Add Drop Rarity test command #73
3 changed files with 100 additions and 0 deletions
81
src/commands/stage/droprarity.ts
Normal file
81
src/commands/stage/droprarity.ts
Normal file
|
@ -0,0 +1,81 @@
|
|||
import { AttachmentBuilder, CacheType, CommandInteraction, DiscordAPIError, SlashCommandBuilder } from "discord.js";
|
||||
import { Command } from "../../type/command";
|
||||
import { CardRarity, CardRarityParse } from "../../constants/CardRarity";
|
||||
import CardDropHelper from "../../helpers/CardDropHelper";
|
||||
import { readFileSync } from "fs";
|
||||
import Inventory from "../../database/entities/app/Inventory";
|
||||
import { v4 } from "uuid";
|
||||
import { CoreClient } from "../../client/client";
|
||||
|
||||
export default class Droprarity extends Command {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
super.CommandBuilder = new SlashCommandBuilder()
|
||||
.setName('droprarity')
|
||||
.setDescription('(TEST) Summon a random card of a specific rarity')
|
||||
.addStringOption(x =>
|
||||
x
|
||||
.setName('rarity')
|
||||
.setDescription('The rarity you want to summon')
|
||||
.setRequired(true));
|
||||
}
|
||||
|
||||
public override async execute(interaction: CommandInteraction<CacheType>) {
|
||||
if (!interaction.isChatInputCommand()) return;
|
||||
|
||||
const rarity = interaction.options.get('rarity');
|
||||
|
||||
if (!rarity || !rarity.value) {
|
||||
await interaction.reply('Rarity is required');
|
||||
return;
|
||||
}
|
||||
|
||||
const rarityType = CardRarityParse(rarity.value.toString());
|
||||
|
||||
if (rarityType == CardRarity.Unknown) {
|
||||
await interaction.reply('Invalid rarity');
|
||||
return;
|
||||
}
|
||||
|
||||
const card = await CardDropHelper.GetRandomCardByRarity(rarityType);
|
||||
|
||||
if (!card) {
|
||||
await interaction.reply('Card not found');
|
||||
return;
|
||||
}
|
||||
|
||||
const image = readFileSync(card.Path);
|
||||
|
||||
await interaction.deferReply();
|
||||
|
||||
const attachment = new AttachmentBuilder(image, { name: card.FileName });
|
||||
|
||||
const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, card.CardNumber);
|
||||
const quantityClaimed = inventory ? inventory.Quantity : 0;
|
||||
|
||||
const embed = CardDropHelper.GenerateDropEmbed(card, quantityClaimed || 0);
|
||||
|
||||
const claimId = v4();
|
||||
|
||||
const row = CardDropHelper.GenerateDropButtons(card, claimId, interaction.user.id);
|
||||
|
||||
try {
|
||||
await interaction.editReply({
|
||||
embeds: [ embed ],
|
||||
files: [ attachment ],
|
||||
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`);
|
||||
}
|
||||
}
|
||||
|
||||
CoreClient.ClaimId = claimId;
|
||||
}
|
||||
}
|
|
@ -41,4 +41,21 @@ export function CardRarityToColour(rarity: CardRarity): number {
|
|||
case CardRarity.Manga:
|
||||
return EmbedColours.MangaCard;
|
||||
}
|
||||
}
|
||||
|
||||
export function CardRarityParse(rarity: string): CardRarity {
|
||||
switch (rarity.toLowerCase()) {
|
||||
case "bronze":
|
||||
return CardRarity.Bronze;
|
||||
case "silver":
|
||||
return CardRarity.Silver;
|
||||
case "gold":
|
||||
return CardRarity.Gold;
|
||||
case "legendary":
|
||||
return CardRarity.Legendary;
|
||||
case "manga":
|
||||
return CardRarity.Manga;
|
||||
default:
|
||||
return CardRarity.Unknown;
|
||||
}
|
||||
}
|
|
@ -6,6 +6,7 @@ import Drop from "./commands/drop";
|
|||
|
||||
// Test Command Imports
|
||||
import Dropnumber from "./commands/stage/dropnumber";
|
||||
import Droprarity from "./commands/stage/droprarity";
|
||||
|
||||
// Button Event Imports
|
||||
import Claim from "./buttonEvents/Claim";
|
||||
|
@ -20,6 +21,7 @@ export default class Registry {
|
|||
|
||||
// Test Commands
|
||||
CoreClient.RegisterCommand('dropnumber', new Dropnumber(), Environment.Test);
|
||||
CoreClient.RegisterCommand('droprarity', new Droprarity(), Environment.Test);
|
||||
}
|
||||
|
||||
public static RegisterEvents() {
|
||||
|
|
Loading…
Reference in a new issue