38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
|
import { ButtonInteraction } from "discord.js";
|
||
|
import { ButtonEvent } from "../type/buttonEvent";
|
||
|
import Inventory from "../database/entities/app/Inventory";
|
||
|
import { CoreClient } from "../client/client";
|
||
|
|
||
|
export default class Claim extends ButtonEvent {
|
||
|
public override async execute(interaction: ButtonInteraction) {
|
||
|
if (!interaction.guild || !interaction.guildId) return;
|
||
|
|
||
|
const cardNumber = interaction.customId.split(' ')[1];
|
||
|
const claimId = interaction.customId.split(' ')[2];
|
||
|
const userId = interaction.user.id;
|
||
|
|
||
|
const claimed = await Inventory.FetchOneByClaimId(claimId);
|
||
|
|
||
|
if (claimed) {
|
||
|
await interaction.reply('This card has already been claimed');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (claimId != CoreClient.ClaimId) {
|
||
|
await interaction.reply('This card has expired');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
let inventory = await Inventory.FetchOneByCardNumberAndUserId(userId, cardNumber);
|
||
|
|
||
|
if (!inventory) {
|
||
|
inventory = new Inventory(userId, cardNumber, 1, claimId);
|
||
|
} else {
|
||
|
inventory.SetQuantity(inventory.Quantity + 1);
|
||
|
}
|
||
|
|
||
|
await inventory.Save(Inventory, inventory);
|
||
|
|
||
|
await interaction.reply('Card claimed');
|
||
|
}
|
||
|
}
|