From eb3407255f3f96778aa31f6bf5141479ac1d943a Mon Sep 17 00:00:00 2001 From: Ethan Lane Date: Mon, 21 Apr 2025 15:12:22 +0100 Subject: [PATCH] Fix the droprarity and dropnumber commands --- src/client/appLogger.ts | 8 +++++ src/commands/stage/dropnumber.ts | 51 ++++++++++++++-------------- src/commands/stage/droprarity.ts | 57 ++++++++++++++++---------------- src/constants/CardRarity.ts | 23 +++++++++++++ 4 files changed, 83 insertions(+), 56 deletions(-) diff --git a/src/client/appLogger.ts b/src/client/appLogger.ts index f1ba1dc..7c93f16 100644 --- a/src/client/appLogger.ts +++ b/src/client/appLogger.ts @@ -86,4 +86,12 @@ export default class AppLogger { public static LogSilly(label: string, message: string) { AppLogger.Logger.silly({ label, message }); } + + public static CatchError(label: string, error: any) { + if (error instanceof Error) { + AppLogger.Logger.error({ label, message: error.message }); + } else { + AppLogger.Logger.error({ label, message: error }); + } + } } diff --git a/src/commands/stage/dropnumber.ts b/src/commands/stage/dropnumber.ts index 750210d..9d3754a 100644 --- a/src/commands/stage/dropnumber.ts +++ b/src/commands/stage/dropnumber.ts @@ -1,4 +1,4 @@ -import { AttachmentBuilder, CacheType, CommandInteraction, DiscordAPIError, SlashCommandBuilder } from "discord.js"; +import { AttachmentBuilder, CacheType, CommandInteraction, SlashCommandBuilder } from "discord.js"; import { Command } from "../../type/command"; import { readFileSync } from "fs"; import Inventory from "../../database/entities/app/Inventory"; @@ -6,6 +6,7 @@ import { v4 } from "uuid"; import { CoreClient } from "../../client/client"; import path from "path"; import CardDropHelperMetadata from "../../helpers/CardDropHelperMetadata"; +import AppLogger from "../../client/appLogger"; export default class Dropnumber extends Command { constructor() { @@ -43,43 +44,39 @@ export default class Dropnumber extends Command { const series = CoreClient.Cards .find(x => x.cards.includes(card))!; - const files = []; - let imageFileName = ""; + const claimId = v4(); - if (!(card.path.startsWith("http://") || card.path.startsWith("https://"))) { - const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", card.path)); - imageFileName = card.path.split("/").pop()!; - - const attachment = new AttachmentBuilder(image, { name: imageFileName }); - - files.push(attachment); - } await interaction.deferReply(); - const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, card.id); - const quantityClaimed = inventory ? inventory.Quantity : 0; - - const embed = CardDropHelperMetadata.GenerateDropEmbed({ card, series }, quantityClaimed, imageFileName); - - const claimId = v4(); - - const row = CardDropHelperMetadata.GenerateDropButtons({ card, series }, claimId, interaction.user.id); - try { + const files = []; + let imageFileName = ""; + + if (!(card.path.startsWith("http://") || card.path.startsWith("https://"))) { + const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", card.path)); + imageFileName = card.path.split("/").pop()!; + + const attachment = new AttachmentBuilder(image, { name: imageFileName }); + + files.push(attachment); + } + + const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, card.id); + const quantityClaimed = inventory ? inventory.Quantity : 0; + + const embed = CardDropHelperMetadata.GenerateDropEmbed({ card, series }, quantityClaimed, imageFileName); + + const row = CardDropHelperMetadata.GenerateDropButtons({ card, series }, claimId, interaction.user.id); + await interaction.editReply({ embeds: [ embed ], files: files, components: [ row ], }); } catch (e) { - console.error(e); - - if (e instanceof DiscordAPIError) { - await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening. Code: ${e.code}`); - } else { - await interaction.editReply("Unable to send next drop. Please try again, and report this if it keeps happening. Code: UNKNOWN"); - } + AppLogger.CatchError("Droprarity", e); + await interaction.editReply("Unable to send next drop. Please try again, and report this if it keeps happening"); } CoreClient.ClaimId = claimId; diff --git a/src/commands/stage/droprarity.ts b/src/commands/stage/droprarity.ts index 0e95db0..cf2eded 100644 --- a/src/commands/stage/droprarity.ts +++ b/src/commands/stage/droprarity.ts @@ -1,12 +1,13 @@ -import { AttachmentBuilder, CacheType, CommandInteraction, DiscordAPIError, SlashCommandBuilder } from "discord.js"; +import { AttachmentBuilder, CacheType, CommandInteraction, SlashCommandBuilder } from "discord.js"; import { Command } from "../../type/command"; -import { CardRarity, CardRarityParse } from "../../constants/CardRarity"; +import { CardRarity, CardRarityChoices, CardRarityParse } from "../../constants/CardRarity"; import { readFileSync } from "fs"; import Inventory from "../../database/entities/app/Inventory"; import { v4 } from "uuid"; import { CoreClient } from "../../client/client"; import CardDropHelperMetadata from "../../helpers/CardDropHelperMetadata"; import path from "path"; +import AppLogger from "../../client/appLogger"; export default class Droprarity extends Command { constructor() { @@ -19,7 +20,8 @@ export default class Droprarity extends Command { x .setName("rarity") .setDescription("The rarity you want to summon") - .setRequired(true)); + .setRequired(true) + .setChoices(CardRarityChoices)); } public override async execute(interaction: CommandInteraction) { @@ -39,48 +41,45 @@ export default class Droprarity extends Command { return; } - const card = await CardDropHelperMetadata.GetRandomCardByRarity(rarityType); + const card = CardDropHelperMetadata.GetRandomCardByRarity(rarityType); if (!card) { await interaction.reply("Card not found"); return; } - const files = []; - let imageFileName = ""; - - if (!(card.card.path.startsWith("http://") || card.card.path.startsWith("https://"))) { - const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", card.card.path)); - imageFileName = card.card.path.split("/").pop()!; - - const attachment = new AttachmentBuilder(image, { name: imageFileName }); - - files.push(attachment); - } - - const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, card.card.id); - const quantityClaimed = inventory ? inventory.Quantity : 0; - - const embed = CardDropHelperMetadata.GenerateDropEmbed(card, quantityClaimed, imageFileName); - const claimId = v4(); - const row = CardDropHelperMetadata.GenerateDropButtons(card, claimId, interaction.user.id); + await interaction.deferReply(); try { + const files = []; + let imageFileName = ""; + + if (!(card.card.path.startsWith("http://") || card.card.path.startsWith("https://"))) { + const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", card.card.path)); + imageFileName = card.card.path.split("/").pop()!; + + const attachment = new AttachmentBuilder(image, { name: imageFileName }); + + files.push(attachment); + } + + const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, card.card.id); + const quantityClaimed = inventory ? inventory.Quantity : 0; + + const embed = CardDropHelperMetadata.GenerateDropEmbed(card, quantityClaimed, imageFileName); + + const row = CardDropHelperMetadata.GenerateDropButtons(card, claimId, interaction.user.id); + await interaction.editReply({ embeds: [ embed ], files: files, components: [ row ], }); } catch (e) { - console.error(e); - - if (e instanceof DiscordAPIError) { - await interaction.editReply(`Unable to send next drop. Please try again, and report this if it keeps happening. Code: ${e.code}`); - } else { - await interaction.editReply("Unable to send next drop. Please try again, and report this if it keeps happening. Code: UNKNOWN"); - } + AppLogger.CatchError("Droprarity", e); + await interaction.editReply("Unable to send next drop. Please try again, and report this if it keeps happening"); } CoreClient.ClaimId = claimId; diff --git a/src/constants/CardRarity.ts b/src/constants/CardRarity.ts index 8817172..0fcdec7 100644 --- a/src/constants/CardRarity.ts +++ b/src/constants/CardRarity.ts @@ -9,6 +9,29 @@ export enum CardRarity { Legendary, } +export const CardRarityChoices = [ + { + name: "Bronze", + value: "bronze", + }, + { + name: "Silver", + value: "silver", + }, + { + name: "Gold", + value: "gold", + }, + { + name: "Manga", + value: "manga", + }, + { + name: "Legendary", + value: "legendary", + }, +]; + export function CardRarityToString(rarity: CardRarity): string { switch (rarity) { case CardRarity.Unknown: