UNPKG

srcom

Version:

cli tool to get and post runs to speedrun.com

104 lines (100 loc) 4.07 kB
module.exports = { name: 'world record', exe: async () => { const chalk = require('chalk'); const rl = require('readline-sync'); const path = require('path'); const fs = require('fs'); let queries = new Map(); let imp = fs.readdirSync(path.join(__dirname, '/queries')); imp.forEach(file => { const com = require(path.join(__dirname, '/queries/', file)); queries.set(com.name, com); }); // Function to display run const displayRun = async (gameId, categoryId, variables = null) => { const submitRun = variables === null ? { "game": gameId, "category": categoryId } : { "game": gameId, "category": categoryId, "variableId": variables.id, "variableVal": variables.val }; queries.get('runs').returnTop(submitRun).then(runObject => { const emu = runObject.emulated ? '[EMU]' : ''; console.log(chalk.cyan('\nGame: ' + runObject.game + '\n' + 'Category: ' + runObject.category + '\n' + 'Rank: ' + runObject.rank + '\n' + 'Runner: ' + runObject.runner + '\n' + 'Time: ' + runObject.time + '\n' + 'Date: ' + runObject.date + '\n' + 'Played On: ' + runObject.platform + ' ' + runObject.region + ' ' + emu + '\n' + 'Link: ' + runObject.url)); }); } // Function to list categories given a game const listCategories = async game => { const catString = queries.get('stringify').returnString(game.categories); // Get category from user console.log(chalk.green('\nChoose a category:\n' + catString)); const chosenCategory = rl.question(chalk.bgGreen.black('Category:') + ' '); if (game.categories[chosenCategory - 1] === undefined) { console.log(chalk.red('Not a valid selection.')); return; } // Check for subcategories const subcategories = await queries.get('subcategory').returnList(game.categories[chosenCategory - 1].id); if (subcategories === undefined) displayRun(game.id, game.categories[chosenCategory - 1].id) else { const subCatString = queries.get('stringify').returnString(subcategories.subcategories); // Get subcategory from user console.log(chalk.green('\nChoose a subcategory:\n' + subCatString)); const chosenSubcategory = rl.question(chalk.bgGreen.black('Subcategory:') + ' '); if (subcategories.subcategories[chosenSubcategory - 1] === undefined) { console.log(chalk.red('Not a valid selection.')); return; } displayRun(game.id, game.categories[chosenCategory - 1].id, { 'id': subcategories.id, 'val': subcategories.subcategories[chosenSubcategory - 1].id }); } } // Get game from user const game = rl.question(chalk.bgGreen.black('Game:') + ' '); // Check abbreviation search (exact) const abbrGame = await queries.get('abbreviation').returnGame(game); if (abbrGame != undefined) { console.log(chalk.yellow('\nFound game: ' + abbrGame.name)); listCategories(abbrGame); } else { // If no exact abbreviation match, search for game (fuzzy) const games = await queries.get('game').returnList(game); if (games === undefined) { console.log(chalk.red('Can not find any games matching ' + game)); return; } if (games.length === 1) { // Found only one game console.log(chalk.yellow('\nFound game: ' + games[0].name)); listCategories(games[0]); } else { // Listing games const gameString = queries.get('stringify').returnString(games); console.log(chalk.green('\nChoose a game:\n' + gameString)); // Get game from user let chosenGame = rl.question(chalk.bgGreen.black('Game:') + ' '); if (games[chosenGame - 1] === undefined) { console.log(chalk.red('Not a valid selection.')); return; } listCategories(games[chosenGame - 1]); } } } };