mirror of
https://github.com/arthur-pbty/xiao.git
synced 2026-06-03 15:07:42 +02:00
56 lines
2.6 KiB
JavaScript
56 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',
|
|
memberName: 'high-scores',
|
|
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}
|
|
`);
|
|
}
|
|
};
|