diff --git a/commands/games-sp/minesweeper.js b/commands/games-sp/minesweeper.js index 37642be4..5440be6f 100644 --- a/commands/games-sp/minesweeper.js +++ b/commands/games-sp/minesweeper.js @@ -100,8 +100,22 @@ module.exports = class MinesweeperCommand extends Command { const newScore = Date.now() - startTime; const highScoreGet = await this.client.redis.get(`minesweeper-${size}`); const highScore = highScoreGet ? Number.parseInt(highScoreGet, 10) : null; - if (win && (!highScore || highScore > newScore)) { + const highScoreUser = await this.client.redis.get(`minesweeper-${size}-user`); + const scoreBeat = win && (!highScore || highScore > newScore); + let user; + if (user) { + try { + const fetched = await this.client.users.fetch(highScoreUser); + user = fetched.tag; + } catch { + user = 'Unknown'; + } + } else { + user = 'no one'; + } + if (scoreBeat) { await this.client.redis.set(`minesweeper-${size}`, newScore); + await this.client.redis.set(`minesweeper-${size}-user`, msg.author.id); } this.client.games.delete(msg.channel.id); if (win === null) return msg.say('Game ended due to inactivity.'); @@ -109,7 +123,7 @@ module.exports = class MinesweeperCommand extends Command { const displayTime = moment.duration(highScore).format('mm:ss'); return msg.say(stripIndents` ${win ? `Nice job! You win! (Took ${newDisplayTime})` : 'Sorry... You lose.'} - ${win && (!highScore || highScore > newScore) ? `**New High Score!** Old:` : `High Score:`} ${displayTime} + ${scoreBeat ? `**New High Score!** Old:` : `High Score:`} ${displayTime} (Held by ${user}) ${this.displayBoard(game.board)} `); diff --git a/commands/util-public/high-scores.js b/commands/util-public/high-scores.js index 73478d74..160d6c51 100644 --- a/commands/util-public/high-scores.js +++ b/commands/util-public/high-scores.js @@ -22,13 +22,30 @@ module.exports = class HighScoresCommand extends Command { const anagramsGet = await this.client.redis.get('anagramica'); const anagrams = anagramsGet ? Number.parseInt(anagramsGet, 10) : null; const minesweeperScores = {}; + const minesweeperUsers = {}; for (const size of minesweeperSizes) { const minesweeperGet = await this.client.redis.get(`minesweeper-${size}`); const minesweeper = minesweeperGet ? Number.parseInt(minesweeperGet, 10) : null; + const minesweeperUser = await this.client.redis.get(`minesweeper-${size}-user`); minesweeperScores[size] = moment.duration(minesweeper).format('mm:ss'); + let user; + if (user) { + try { + const fetched = await this.client.users.fetch(minesweeperUser); + user = fetched.tag; + } catch { + user = 'Unknown'; + } + } else { + user = 'no one'; + } + minesweeperUsers[size] = user; } const reactionTimeGet = await this.client.redis.get('reaction-time'); const reactionTime = reactionTimeGet ? Number.parseInt(reactionTimeGet, 10) : null; + 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 @@ -36,7 +53,7 @@ module.exports = class HighScoresCommand extends Command { \`reaction-time\`: ${reactionTime / 1000}s __**Minesweeper:**__ - ${Object.entries(minesweeperScores).map(([size, score]) => `\`${size}x${size}\`: ${score}`).join('\n')} + ${minesweeperDisplay} `); } };