Last active
May 13, 2020 01:34
-
-
Save NikhilNarayana/4dab3760d26d32cb0cd0e296958d1b3c to your computer and use it in GitHub Desktop.
Sort Slippi Files by Matchup -- Windows EXE: https://drive.google.com/file/d/1odkwoMNoVpAYFyPRxh8bXQXPRH6-ima1/view?usp=sharing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const slp = require('slp-parser-js'); | |
const SlippiGame = slp.default; | |
const path = require('path'); | |
const fs = require('fs'); | |
const _ = require('lodash'); | |
const cliProgress = require("cli-progress"); | |
const inputFolder = "./Slippi"; | |
const outputFolder = "./sorted"; | |
function generateVSFolderName(players) { | |
const chars = players.map(p => slp.characters.getCharacterName(p.characterId)); | |
chars.sort(); | |
return chars.join(" vs. "); | |
} | |
function walk(dir) { | |
let results = []; | |
let list = fs.readdirSync(dir); | |
_.each(list, (file) => { | |
file = path.join(dir, file); | |
let stat = fs.statSync(file); | |
if (stat && stat.isDirectory()) { | |
// Recurse into a subdirectory | |
results = results.concat(walk(file)); | |
} else if (path.extname(file) === ".slp") { | |
results.push(file); | |
} | |
}); | |
return results; | |
} | |
function sortSLPMU() { | |
const files = walk(inputFolder); | |
const bar = new cliProgress.SingleBar({}, cliProgress.Presets.shades_classic); | |
bar.start(files.length, 0); | |
_.each(files, (file) => { | |
try{ | |
const game = new SlippiGame(file); | |
let settings = game.getSettings(); | |
const cpu = _.some(settings.players, (player) => player.type != 0); | |
const notsingles = settings.players.length != 2; | |
if (cpu || notsingles) { // only look for files against real players in a 1v1 | |
bar.setTotal(bar.getTotal() - 1); | |
return; | |
} | |
const folderName = generateVSFolderName(settings.players); | |
let outputDir = path.join(outputFolder, folderName); | |
fs.mkdir(outputDir, { recursive: true }, (err) => { | |
if (err) console.log(`mkdir ${err}`); | |
fs.copyFile(file, path.join(outputDir, path.basename(file)), (err) => {if (err) console.log(`rename ${err}`);}); | |
}); | |
bar.increment(); | |
} catch (err) { | |
console.log(err); | |
fs.appendFileSync("./sort_log.txt", `${err.stack}\n\n`); | |
} | |
}); | |
bar.stop(); | |
} | |
module.exports = sortSLPMU; // export for use in other scripts | |
if (require.main == module) sortSLPMU(); // if running from terminal call main |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I use Node 10 (https://nodejs.org/dist/latest-v10.x/), haven't tried on Node 12
Windows EXE: https://drive.google.com/file/d/1odkwoMNoVpAYFyPRxh8bXQXPRH6-ima1/view?usp=sharing
Setup if not using exe
npm install slp-parser-js cli-progress
Slippi
next to the script.node <script file name>
.Need extra help? Come to the slippi discord (https://discord.gg/pPfEaW5) and ping Nikki in #support-and-bugs.