diff --git a/index.js b/index.js index 7cc1ca2..3195f38 100644 --- a/index.js +++ b/index.js @@ -406,6 +406,9 @@ client.on("messageCreate", async (message) => { console.log( `getting rank of ${applicableName}, ${playerId} at ${rankingsPath}...` ); + if (!fs.existsSync(rankingsPath)) { + fs.writeFileSync(rankingsPath, "{}"); + } const rankings = JSON.parse(fs.readFileSync(rankingsPath)); await message.reply( `${backticks}${applicableName} - ${"*".repeat( @@ -418,6 +421,46 @@ client.on("messageCreate", async (message) => { } } + if (args[0] === "rankings") { + await message.reply("getting rankings..."); + try { + console.log(`getting rankings at ${rankingsPath}...`); + if (!fs.existsSync(rankingsPath)) { + fs.writeFileSync(rankingsPath, "{}"); + } + const rankings = JSON.parse(fs.readFileSync(rankingsPath)); + let players = []; + for (const [playerId, rank] of Object.entries(rankings)) { + if (rank > 0) { + const player = await pickupGuild.members.fetch(playerId); + const applicableName = getApplicableName(player); + players.push({ name: applicableName, rank }); + } + } + + // sort by rank, then name + players.sort((a, b) => { + if (a.rank === b.rank) { + return a.name.localeCompare(b.name); + } + return b.rank - a.rank; + }); + + // build string + let str = backticks; + const maxNameLength = Math.max(...players.map((p) => p.name.length)); + for (const { name, rank } of players) { + str += `${name.padEnd(maxNameLength, " ")} - ${"*".repeat(rank)}\n`; + } + str += backticks; + if (str === backticks + backticks) str = "no rankings found"; + await message.reply(str); + } catch (error) { + console.error(error); + await message.reply(`error getting rankings: ${error.message}`); + } + } + if (args[0] === "whitelist") { // add user to config.json whitelist if (args.length < 2) { @@ -435,7 +478,7 @@ client.on("messageCreate", async (message) => { ); return; } - + const playerId = player.id; const applicableName = getApplicableName(player); @@ -468,7 +511,7 @@ client.on("messageCreate", async (message) => { } if (args[0] === "getwhitelist") { - let str = `${backticks}${whitelistStr}${backticks}${backticks}` + let str = `${backticks}${whitelistStr}${backticks}${backticks}`; const whitelistIds = whitelistStr.split(","); for (const id of whitelistIds) { const player = findPlayer(pickupGuild, id); diff --git a/rankings.json b/rankings.json deleted file mode 100644 index 24c11e6..0000000 --- a/rankings.json +++ /dev/null @@ -1 +0,0 @@ -{"233036215610245120":0} \ No newline at end of file