Fix the droprarity and dropnumber commands
Some checks failed
Test / build (push) Failing after 20s

This commit is contained in:
Ethan Lane 2025-04-21 15:12:22 +01:00
parent ad34cc7b7f
commit eb3407255f
4 changed files with 83 additions and 56 deletions

View file

@ -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 });
}
}
}

View file

@ -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;

View file

@ -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<CacheType>) {
@ -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;

View file

@ -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: