From 414509dd6e2dc69139ba21030af7e3b8caec02e7 Mon Sep 17 00:00:00 2001 From: Pihkaal Date: Sat, 8 Nov 2025 13:30:41 +0100 Subject: [PATCH] feat: implement tejtrack command to remove a tracker --- src/index.ts | 88 +++++++++++++++++++++++++++++++++++++++++++++++-- src/tracking.ts | 14 ++++++++ 2 files changed, 99 insertions(+), 3 deletions(-) diff --git a/src/index.ts b/src/index.ts index 5bcdea7..486ab93 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,12 @@ import { getAccountBalance, initAccounts, setAccountBalance } from "./account"; import { makeResultEmbed } from "./discord"; import { env } from "./env"; -import { initTracking, listTrackedPlayers, trackWovPlayer } from "./tracking"; +import { + initTracking, + listTrackedPlayers, + trackWovPlayer, + untrackWovPlayer, +} from "./tracking"; import { checkForNewQuest, getClanInfos, @@ -232,7 +237,86 @@ client.on("messageCreate", async (message) => { .split(" "); if (command === "ping") { await message.reply("pong"); + } else if (command === "tejtrack") { + if (!message.member) return; + if (!message.member.roles.cache.has("1147963065640439900")) { + await message.reply({ + embeds: [ + { + description: + "### ❌ Erreur\n\n\nTu t'es cru chez mémé ou quoi faut être staff", + color: 15335424, + }, + ], + }); + return; + } + + let playerName = args[0]; + if (!playerName) { + await message.reply({ + embeds: [ + { + description: `### ❌ Erreur\n\n\n\nUsage:\`@LBF untrack NOM_JOUEUR\`, exemple: \`@LBF untrack Yuno\`.\n**Attention les majuscules sont importantes**`, + color: 15335424, + }, + ], + }); + return; + } + + const player = await searchPlayer(playerName); + if (!player) { + await message.reply({ + embeds: [ + { + description: `### ❌ Erreur\n\n\n\nCette personne n'existe pas.\n**Attention les majuscules sont importantes**`, + color: 15335424, + }, + ], + }); + return; + } + + const res = await untrackWovPlayer(player.id); + switch (res.event) { + case "notTracked": { + await message.reply({ + embeds: [ + { + description: `Pas de tracker pour \`${playerName}\` [\`${player.id}\`]`, + color: 0x89cff0, + }, + ], + }); + break; + } + case "trackerRemoved": { + await message.reply({ + embeds: [ + { + description: `Tracker enlevé pour \`${playerName}\` [\`${player.id}\`]`, + color: 0x89cff0, + }, + ], + }); + + const chan = client.channels.cache.get(env.DISCORD_TRACKING_CHANNEL); + if (!chan?.isSendable()) throw "Invalid tracking channel"; + + await chan.send({ + embeds: [ + { + description: `### [REMOVED] \`${playerName}\` [\`${player.id}\`]`, + color: 0x89cff0, + }, + ], + }); + break; + } + } } else if (command === "track") { + if (!message.member) return; if (!message.member.roles.cache.has("1147963065640439900")) { await message.reply({ embeds: [ @@ -272,8 +356,6 @@ client.on("messageCreate", async (message) => { return; } - // 0x89cff0 - const res = await trackWovPlayer(player.id); switch (res.event) { case "notFound": { diff --git a/src/tracking.ts b/src/tracking.ts index 7be7bfd..0435f12 100644 --- a/src/tracking.ts +++ b/src/tracking.ts @@ -17,6 +17,20 @@ export async function listTrackedPlayers(): Promise { return Object.keys(trackedPlayers); } +export async function untrackWovPlayer( + playerId: string, +): Promise<{ event: "notTracked" } | { event: "trackerRemoved" }> { + const trackedPlayers: TrackedPlayers = + await Bun.file(TRACKED_PLAYER_FILE).json(); + + if (!trackedPlayers[playerId]) return { event: "notTracked" }; + + delete trackedPlayers[playerId]; + await Bun.file(TRACKED_PLAYER_FILE).write(JSON.stringify(trackedPlayers)); + + return { event: "trackerRemoved" }; +} + export async function trackWovPlayer(playerId: string): Promise< | { event: "notFound" } | {