From 837013835e665fb4650c95f5a90b54303bd59b47 Mon Sep 17 00:00:00 2001 From: Ethan Lane Date: Sun, 2 Jun 2024 15:39:24 +0100 Subject: [PATCH] Fix user being able to claim cards with a 0 balance --- src/buttonEvents/Claim.ts | 27 ++++++++++++++------------- src/buttonEvents/Reroll.ts | 16 ++++++++++++++++ src/commands/drop.ts | 16 ++++++++++++++++ 3 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/buttonEvents/Claim.ts b/src/buttonEvents/Claim.ts index e94f7cc..4f7f5ae 100644 --- a/src/buttonEvents/Claim.ts +++ b/src/buttonEvents/Claim.ts @@ -11,6 +11,7 @@ import CardConstants from "../constants/CardConstants"; export default class Claim extends ButtonEvent { public override async execute(interaction: ButtonInteraction) { if (!interaction.guild || !interaction.guildId) return; + if (!interaction.channel) return; await interaction.deferUpdate(); @@ -21,15 +22,26 @@ export default class Claim extends ButtonEvent { AppLogger.LogSilly("Button/Claim", `Parameters: cardNumber=${cardNumber}, claimId=${claimId}, droppedBy=${droppedBy}, userId=${userId}`); + const user = await User.FetchOneById(User, userId) || new User(userId, CardConstants.StartingCurrency); + + AppLogger.LogSilly("Button/Claim", `${user.Id} has ${user.Currency} currency`); + + if (!user.RemoveCurrency(CardConstants.ClaimCost)) { + await interaction.channel.send(`${interaction.user}, Not enough currency! You need ${CardConstants.ClaimCost} currency, you have ${user.Currency}!`); + return; + } + + await user.Save(User, user); + const claimed = await eClaim.FetchOneByClaimId(claimId); if (claimed) { - await interaction.reply("This card has already been claimed"); + await interaction.channel.send(`${interaction.user}, This card has already been claimed!`); return; } if (claimId == CoreClient.ClaimId && userId != droppedBy) { - await interaction.reply("The latest dropped card can only be claimed by the user who dropped it"); + await interaction.channel.send(`${interaction.user}, The latest dropped card can only be claimed by the user who dropped it!`); return; } @@ -43,17 +55,6 @@ export default class Claim extends ButtonEvent { await inventory.Save(Inventory, inventory); - const user = await User.FetchOneById(User, userId) || new User(userId, CardConstants.StartingCurrency); - - AppLogger.LogSilly("Button/Claim", `${user.Id} has ${user.Currency} currency`); - - if (!user.RemoveCurrency(CardConstants.ClaimCost)) { - await interaction.reply(`Not enough currency! You need 10 currency, you have ${user.Currency}`); - return; - } - - await user.Save(User, user); - const claim = new eClaim(claimId); claim.SetInventory(inventory); diff --git a/src/buttonEvents/Reroll.ts b/src/buttonEvents/Reroll.ts index c271a3a..c55aedf 100644 --- a/src/buttonEvents/Reroll.ts +++ b/src/buttonEvents/Reroll.ts @@ -8,6 +8,8 @@ import Config from "../database/entities/app/Config"; import CardDropHelperMetadata from "../helpers/CardDropHelperMetadata"; import path from "path"; import AppLogger from "../client/appLogger"; +import User from "../database/entities/app/User"; +import CardConstants from "../constants/CardConstants"; export default class Reroll extends ButtonEvent { public override async execute(interaction: ButtonInteraction) { @@ -23,6 +25,20 @@ export default class Reroll extends ButtonEvent { return; } + let user = await User.FetchOneById(User, interaction.user.id); + + if (!user) { + user = new User(interaction.user.id, CardConstants.StartingCurrency); + await user.Save(User, user); + + AppLogger.LogInfo("Commands/Drop", `New user (${interaction.user.id}) saved to the database`); + } + + if (user.Currency < CardConstants.ClaimCost) { + await interaction.reply(`Not enough currency! You need ${CardConstants.ClaimCost} currency, you have ${user.Currency}!`); + return; + } + const randomCard = CardDropHelperMetadata.GetRandomCard(); if (!randomCard) { diff --git a/src/commands/drop.ts b/src/commands/drop.ts index 7a91042..ab6c339 100644 --- a/src/commands/drop.ts +++ b/src/commands/drop.ts @@ -8,6 +8,8 @@ import Config from "../database/entities/app/Config"; import CardDropHelperMetadata from "../helpers/CardDropHelperMetadata"; import path from "path"; import AppLogger from "../client/appLogger"; +import User from "../database/entities/app/User"; +import CardConstants from "../constants/CardConstants"; export default class Drop extends Command { constructor() { @@ -31,6 +33,20 @@ export default class Drop extends Command { return; } + let user = await User.FetchOneById(User, interaction.user.id); + + if (!user) { + user = new User(interaction.user.id, CardConstants.StartingCurrency); + await user.Save(User, user); + + AppLogger.LogInfo("Commands/Drop", `New user (${interaction.user.id}) saved to the database`); + } + + if (user.Currency < CardConstants.ClaimCost) { + await interaction.reply(`Not enough currency! You need ${CardConstants.ClaimCost} currency, you have ${user.Currency}!`); + return; + } + const randomCard = CardDropHelperMetadata.GetRandomCard(); if (!randomCard) {