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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -42,3 +42,20 @@ export function CardRarityToColour(rarity: CardRarity): number {
|
||||||
return EmbedColours.MangaCard;
|
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
|
// Test Command Imports
|
||||||
import Dropnumber from "./commands/stage/dropnumber";
|
import Dropnumber from "./commands/stage/dropnumber";
|
||||||
|
import Droprarity from "./commands/stage/droprarity";
|
||||||
|
|
||||||
// Button Event Imports
|
// Button Event Imports
|
||||||
import Claim from "./buttonEvents/Claim";
|
import Claim from "./buttonEvents/Claim";
|
||||||
|
@ -20,6 +21,7 @@ export default class Registry {
|
||||||
|
|
||||||
// Test Commands
|
// Test Commands
|
||||||
CoreClient.RegisterCommand('dropnumber', new Dropnumber(), Environment.Test);
|
CoreClient.RegisterCommand('dropnumber', new Dropnumber(), Environment.Test);
|
||||||
|
CoreClient.RegisterCommand('droprarity', new Droprarity(), Environment.Test);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static RegisterEvents() {
|
public static RegisterEvents() {
|
||||||
|
|
Loading…
Reference in a new issue