Files
xiao/commands/util-public/high-scores.js
T
2024-05-21 21:02:12 -04:00

55 lines
2.6 KiB
JavaScript

const Command = require('../../framework/Command');
const { stripIndents } = require('common-tags');
const moment = require('moment');
require('moment-duration-format');
const { fetchHSUserDisplay } = require('../../util/Util');
const minesweeperSizes = [2, 3, 4, 5, 6, 7, 8, 9, 10];
module.exports = class HighScoresCommand extends Command {
constructor(client) {
super(client, {
name: 'high-scores',
aliases: ['high-score', 'hs', 'h-score', 'high-s', 'leaderboard', 'lb'],
group: 'util-public',
description: 'Responds with the high scores the bot has saved.',
guarded: true
});
}
async run(msg) {
const typingRaceGet = await this.client.redis.db.get('typing-test');
const typingRace = typingRaceGet ? Number.parseInt(typingRaceGet, 10) : null;
const typingRaceUser = await this.client.redis.db.get('typing-test-user');
const typingRaceUserDisplay = await fetchHSUserDisplay(this.client, typingRaceUser);
const anagramsGet = await this.client.redis.db.get('anagramica');
const anagrams = anagramsGet ? Number.parseInt(anagramsGet, 10) : null;
const anagramsUser = await this.client.redis.db.get('anagramica-user');
const anagramsUserDisplay = await fetchHSUserDisplay(this.client, anagramsUser);
const minesweeperScores = {};
const minesweeperUsers = {};
for (const size of minesweeperSizes) {
const minesweeperGet = await this.client.redis.db.get(`minesweeper-${size}`);
const minesweeper = minesweeperGet ? Number.parseInt(minesweeperGet, 10) : null;
const minesweeperUser = await this.client.redis.db.get(`minesweeper-${size}-user`);
minesweeperScores[size] = moment.duration(minesweeper).format('mm:ss');
minesweeperUsers[size] = await fetchHSUserDisplay(this.client, minesweeperUser);
}
const reactionTimeGet = await this.client.redis.db.get('reaction-time');
const reactionTime = reactionTimeGet ? Number.parseInt(reactionTimeGet, 10) : null;
const reactionTimeUser = await this.client.redis.db.get('reaction-time-user');
const reactionTimeUserDisplay = await fetchHSUserDisplay(this.client, reactionTimeUser);
const minesweeperDisplay = Object.entries(minesweeperScores)
.map(([size, score]) => `\`${size}x${size}\`: ${score} (Held by ${minesweeperUsers[size]})`)
.join('\n');
return msg.say(stripIndents`
__**Single-Score Games:**__
\`typing-race\`/\`typing-test\`: ${typingRace / 1000}s (Held by ${typingRaceUserDisplay})
\`anagramica\`: ${anagrams || 0} (Held by ${anagramsUserDisplay})
\`gunfight\`/\`reaction-time\`: ${reactionTime / 1000}s (Held by ${reactionTimeUserDisplay})
__**Minesweeper:**__
${minesweeperDisplay}
`);
}
};