diff --git a/package.json b/package.json index b8c7536..5a0ef42 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "card-drop", - "version": "0.9.2", + "version": "0.9.0", "main": "./dist/bot.js", "typings": "./dist", "scripts": { diff --git a/src/buttonEvents/Multidrop.ts b/src/buttonEvents/Multidrop.ts index e88d6ef..e6ea7c2 100644 --- a/src/buttonEvents/Multidrop.ts +++ b/src/buttonEvents/Multidrop.ts @@ -98,18 +98,10 @@ export default class Multidrop extends ButtonEvent { await interaction.deferUpdate(); try { - const files = []; - let imageFileName = ""; - - if (!(randomCard.card.path.startsWith("http://") || randomCard.card.path.startsWith("https://"))) { - const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", randomCard.card.path)); - imageFileName = randomCard.card.path.split("/").pop()!; - - const attachment = new AttachmentBuilder(image, { name: imageFileName }); - - files.push(attachment); - } + const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", randomCard.card.path)); + const imageFileName = randomCard.card.path.split("/").pop()!; + const attachment = new AttachmentBuilder(image, { name: imageFileName }); const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, randomCard.card.id); const quantityClaimed = inventory ? inventory.Quantity : 0; @@ -120,7 +112,7 @@ export default class Multidrop extends ButtonEvent { await interaction.editReply({ embeds: [ embed ], - files: files, + files: [ attachment ], components: [ row ], }); } catch (e) { diff --git a/src/buttonEvents/Reroll.ts b/src/buttonEvents/Reroll.ts index 6ad855e..6d97024 100644 --- a/src/buttonEvents/Reroll.ts +++ b/src/buttonEvents/Reroll.ts @@ -11,7 +11,6 @@ import User from "../database/entities/app/User"; import CardConstants from "../constants/CardConstants"; import GetCardsHelper from "../helpers/DropHelpers/GetCardsHelper"; import DropEmbedHelper from "../helpers/DropHelpers/DropEmbedHelper"; -import {DropResult} from "../contracts/SeriesMetadata"; export default class Reroll extends ButtonEvent { public override async execute(interaction: ButtonInteraction) { @@ -33,7 +32,7 @@ export default class Reroll extends ButtonEvent { user = new User(interaction.user.id, CardConstants.StartingCurrency); await user.Save(User, user); - AppLogger.LogInfo("Button/Reroll", `New user (${interaction.user.id}) saved to the database`); + AppLogger.LogInfo("Commands/Drop", `New user (${interaction.user.id}) saved to the database`); } if (!user.RemoveCurrency(CardConstants.ClaimCost)) { @@ -41,15 +40,9 @@ export default class Reroll extends ButtonEvent { return; } - let randomCard: DropResult | undefined; + await user.Save(User, user); - try { - randomCard = await GetCardsHelper.FetchCard(interaction.user.id); - } catch (e) { - AppLogger.CatchError("Button/Reroll", e); - - await interaction.reply("Unable to fetch card, please try again."); - } + const randomCard = await GetCardsHelper.FetchCard(interaction.user.id); if (!randomCard) { await interaction.reply("Unable to fetch card, please try again."); @@ -82,8 +75,6 @@ export default class Reroll extends ButtonEvent { const row = DropEmbedHelper.GenerateDropButtons(randomCard, claimId, interaction.user.id); - await user.Save(User, user); - await interaction.editReply({ embeds: [ embed ], files: files, diff --git a/src/buttonEvents/Sacrifice.ts b/src/buttonEvents/Sacrifice.ts index 1626cf6..de0bb77 100644 --- a/src/buttonEvents/Sacrifice.ts +++ b/src/buttonEvents/Sacrifice.ts @@ -5,7 +5,6 @@ import { CardRarityToString, GetSacrificeAmount } from "../constants/CardRarity" import EmbedColours from "../constants/EmbedColours"; import User from "../database/entities/app/User"; import GetCardsHelper from "../helpers/DropHelpers/GetCardsHelper"; -import CardConstants from "../constants/CardConstants"; export default class Sacrifice extends ButtonEvent { public override async execute(interaction: ButtonInteraction) { @@ -18,8 +17,6 @@ export default class Sacrifice extends ButtonEvent { case "cancel": await this.cancel(interaction); break; - case "give": - await this.give(interaction); } } @@ -171,77 +168,4 @@ export default class Sacrifice extends ButtonEvent { components: [ row ], }); } - - private async give(interaction: ButtonInteraction) { - const userId = interaction.customId.split(" ")[2]; - const cardNumber = interaction.customId.split(" ")[3]; - const quantity = Number(interaction.customId.split(" ")[4]) || 1; - - if (userId != interaction.user.id) { - await interaction.reply("Only the user who created this sacrifice can confirm it."); - return; - } - - const cardData = GetCardsHelper.GetCardByCardNumber(cardNumber); - - if (!cardData) { - await interaction.reply("Unable to find card in the database."); - return; - } - - let user = await User.FetchOneById(User, userId); - - if (!user) { - user = new User(userId, CardConstants.StartingCurrency); - } - - const cardInInventory = await Inventory.FetchOneByCardNumberAndUserId(userId, cardNumber); - let cardQuantity = 0; - - if (cardInInventory) { - cardQuantity = cardInInventory.Quantity; - } - - const cardValue = GetSacrificeAmount(cardData.card.type) * quantity; - const cardRarityString = CardRarityToString(cardData.card.type); - - user.AddCurrency(cardValue); - - await user.Save(User, user); - - const description = [ - `Card: ${cardData.card.name}`, - `Series: ${cardData.series.name}`, - `Rarity: ${cardRarityString}`, - `Quantity Owned: ${cardQuantity}`, - `Quantity To Sacrifice: ${quantity}`, - `Sacrifice Amount: ${cardValue}`, - ]; - - const embed = new EmbedBuilder() - .setTitle("Card Sacrificed") - .setDescription(description.join("\n")) - .setColor(EmbedColours.Green) - .setFooter({ text: `${interaction.user.username}` }); - - const row = new ActionRowBuilder() - .addComponents([ - new ButtonBuilder() - .setCustomId(`sacrifice confirm ${interaction.user.id} ${cardNumber}`) - .setLabel("Confirm") - .setStyle(ButtonStyle.Success) - .setDisabled(true), - new ButtonBuilder() - .setCustomId("sacrifice cancel") - .setLabel("Cancel") - .setStyle(ButtonStyle.Secondary) - .setDisabled(true), - ]); - - await interaction.update({ - embeds: [ embed ], - components: [ row ], - attachments: [], - }); - } } \ No newline at end of file diff --git a/src/commands/drop.ts b/src/commands/drop.ts index b6ad224..ac8008c 100644 --- a/src/commands/drop.ts +++ b/src/commands/drop.ts @@ -12,7 +12,6 @@ import CardConstants from "../constants/CardConstants"; import ErrorMessages from "../constants/ErrorMessages"; import GetCardsHelper from "../helpers/DropHelpers/GetCardsHelper"; import DropEmbedHelper from "../helpers/DropHelpers/DropEmbedHelper"; -import {DropResult} from "../contracts/SeriesMetadata"; export default class Drop extends Command { constructor() { @@ -49,16 +48,9 @@ export default class Drop extends Command { return; } - let randomCard: DropResult | undefined; - - try { - randomCard = await GetCardsHelper.FetchCard(interaction.user.id); - } catch (e) { - AppLogger.CatchError("Commands/Drop", e); - - await interaction.reply(ErrorMessages.UnableToFetchCard); - } + await user.Save(User, user); + const randomCard = await GetCardsHelper.FetchCard(interaction.user.id); if (!randomCard) { AppLogger.LogWarn("Commands/Drop", ErrorMessages.UnableToFetchCard); @@ -90,9 +82,6 @@ export default class Drop extends Command { const row = DropEmbedHelper.GenerateDropButtons(randomCard, claimId, interaction.user.id); - await user.Save(User, user); - - await interaction.editReply({ embeds: [ embed ], files: files, diff --git a/src/commands/multidrop.ts b/src/commands/multidrop.ts index 82d19fe..aa42686 100644 --- a/src/commands/multidrop.ts +++ b/src/commands/multidrop.ts @@ -62,17 +62,10 @@ export default class Multidrop extends Command { await interaction.deferReply(); try { - const files = []; - let imageFileName = ""; + const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", randomCard.card.path)); + const imageFileName = randomCard.card.path.split("/").pop()!; - if (!(randomCard.card.path.startsWith("http://") || randomCard.card.path.startsWith("https://"))) { - const image = readFileSync(path.join(process.env.DATA_DIR!, "cards", randomCard.card.path)); - imageFileName = randomCard.card.path.split("/").pop()!; - - const attachment = new AttachmentBuilder(image, { name: imageFileName }); - - files.push(attachment); - } + const attachment = new AttachmentBuilder(image, { name: imageFileName }); const inventory = await Inventory.FetchOneByCardNumberAndUserId(interaction.user.id, randomCard.card.id); const quantityClaimed = inventory ? inventory.Quantity : 0; @@ -83,7 +76,7 @@ export default class Multidrop extends Command { await interaction.editReply({ embeds: [ embed ], - files: files, + files: [ attachment ], components: [ row ], }); } catch (e) { diff --git a/src/helpers/DropHelpers/DropEmbedHelper.ts b/src/helpers/DropHelpers/DropEmbedHelper.ts index 5956a27..08b5813 100644 --- a/src/helpers/DropHelpers/DropEmbedHelper.ts +++ b/src/helpers/DropHelpers/DropEmbedHelper.ts @@ -77,7 +77,7 @@ export default class DropEmbedHelper { .setStyle(ButtonStyle.Success) .setDisabled(disabled), new ButtonBuilder() - .setCustomId(`sacrifice give ${userId} ${drop.card.id} 1`) + .setCustomId(`sacrifice confirm ${userId} ${drop.card.id} 1`) .setLabel(`Sacrifice`) .setStyle(ButtonStyle.Danger), new ButtonBuilder() diff --git a/src/helpers/DropHelpers/GetCardsHelper.ts b/src/helpers/DropHelpers/GetCardsHelper.ts index 4c8648f..8bc4fe7 100644 --- a/src/helpers/DropHelpers/GetCardsHelper.ts +++ b/src/helpers/DropHelpers/GetCardsHelper.ts @@ -55,7 +55,7 @@ export default class GetCardsHelper { .find(x => x.cards.includes(card)); if (!series) { - AppLogger.LogError("CardDropHelperMetadata/GetRandomCardByRarity", `Series not found for card ${card.id}`); + AppLogger.LogWarn("CardDropHelperMetadata/GetRandomCardByRarity", `Series not found for card ${card.id}`); return undefined; } diff --git a/src/helpers/DropHelpers/GetUnclaimedCardsHelper.ts b/src/helpers/DropHelpers/GetUnclaimedCardsHelper.ts index 94ce894..87fafea 100644 --- a/src/helpers/DropHelpers/GetUnclaimedCardsHelper.ts +++ b/src/helpers/DropHelpers/GetUnclaimedCardsHelper.ts @@ -31,7 +31,7 @@ export default class GetUnclaimedCardsHelper { public static async GetRandomCardByRarityUnclaimed(rarity: CardRarity, userId: string): Promise { const claimedCards = await Inventory.FetchAllByUserId(userId); - if (!claimedCards || claimedCards.length == 0) { + if (!claimedCards) { // They don't have any cards, so safe to get any random card return GetCardsHelper.GetRandomCardByRarity(rarity); } @@ -39,28 +39,18 @@ export default class GetUnclaimedCardsHelper { const allCards = CoreClient.Cards .flatMap(x => x.cards) .filter(x => x.type == rarity) - .filter(x => !claimedCards.find(y => y.CardNumber == x.id && y.Quantity > 0)); + .filter(x => !claimedCards.find(y => y.CardNumber == x.id)); - if (!allCards || allCards.length == 0) { - // There is no card left unclaimed, fallback to any card - return GetCardsHelper.GetRandomCardByRarity(rarity); - }; + if (!allCards) return undefined; const randomCardIndex = Math.floor(Math.random() * allCards.length); const card = allCards[randomCardIndex]; - - if (!card) { - AppLogger.LogError("CardDropHelperMetadata/GetRandomCardByRarityUnclaimed", `Card not found in index, ${randomCardIndex} of ${allCards.length}, User Id: ${userId}, rarity: ${rarity}`); - - return undefined; - } - const series = CoreClient.Cards .find(x => x.cards.includes(card)); if (!series) { - AppLogger.LogError("CardDropHelperMetadata/GetRandomCardByRarityUnclaimed", `Series not found for card ${card.id}, User Id: ${userId}, rarity: ${rarity}`); + AppLogger.LogWarn("CardDropHelperMetadata/GetRandomCardByRarityUnclaimed", `Series not found for card ${card.id}`); return undefined; } diff --git a/src/helpers/EffectHelper.ts b/src/helpers/EffectHelper.ts index 09e096c..235ea08 100644 --- a/src/helpers/EffectHelper.ts +++ b/src/helpers/EffectHelper.ts @@ -151,7 +151,7 @@ export default class EffectHelper { AppLogger.LogInfo("EffectHelper", `Created initial user entity for : ${userId}`); } - if (!disabled && user.Currency < totalCost) { + if (user.Currency < totalCost) { return `You don't have enough currency to buy this! You have \`${user.Currency} Currency\` and need \`${totalCost} Currency\`!`; } diff --git a/src/helpers/InventoryHelper.ts b/src/helpers/InventoryHelper.ts index 15c9c92..3a7fbff 100644 --- a/src/helpers/InventoryHelper.ts +++ b/src/helpers/InventoryHelper.ts @@ -115,48 +115,17 @@ export default class InventoryHelper { let pageNum = 0; - const maxLength = 25; // Discord API limit - - const allPageOptions = pages.map(x => - new StringSelectMenuOptionBuilder() - .setLabel(`${x.name} (${x.seriesSubpage + 1})`.substring(0, 100)) - .setDescription(`Page ${pageNum + 1}`) - .setDefault(currentPage.id == x.id) - .setValue(`${userid} ${pageNum++}`)); - - const currentPageIndex = allPageOptions.indexOf(allPageOptions.find(x => x.data.default)!); - - let pageOptions: StringSelectMenuOptionBuilder[] = []; - - if (allPageOptions.length <= maxLength) { - pageOptions = allPageOptions; - } else { - let startIndex = currentPageIndex - Math.floor((maxLength - 1) / 2); - let endIndexOffset = 0; - - if (startIndex < 0) { - endIndexOffset = 0 - startIndex; - - startIndex = 0; - } - - let endIndex = currentPageIndex + Math.floor((maxLength - 1) / 2) + endIndexOffset; - - if (endIndex + 1 > allPageOptions.length) { - endIndex = allPageOptions.length; - } - - for (let i = startIndex; i < endIndex; i++) { - pageOptions.push(allPageOptions[i]); - } - } - const row2 = new ActionRowBuilder() .addComponents( new StringSelectMenuBuilder() .setCustomId("inventory") .setPlaceholder(`${currentPage.name} (${currentPage.seriesSubpage + 1})`) - .addOptions(pageOptions)); + .addOptions(...pages.map(x => + new StringSelectMenuOptionBuilder() + .setLabel(`${x.name} (${x.seriesSubpage + 1})`.substring(0, 100)) + .setDescription(`Page ${pageNum + 1}`) + .setDefault(currentPage.id == x.id) + .setValue(`${userid} ${pageNum++}`)))); const buffer = await ImageHelper.GenerateCardImageGrid(currentPage.cards.map(x => ({ id: x.id, path: x.path }))); const image = new AttachmentBuilder(buffer, { name: "page.png" }); diff --git a/tests/buttonEvents/Multidrop.test.ts b/tests/buttonEvents/Multidrop.test.ts deleted file mode 100644 index 5c9da42..0000000 --- a/tests/buttonEvents/Multidrop.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -describe("execute", () => { - describe("GIVEN randomCard image is hosted locally", () => { - test.todo("EXPECT image to be uploaded directly"); - }); - - describe("GIVEN randomCard image is hosted via http", () => { - test.todo("EXPECT image link to be directly added to embed"); - }); - - describe("GIVEN randomCard image is hosted via https", () => { - test.todo("EXPECT image link to be directly added to embed"); - }); -}); diff --git a/tests/commands/multidrop.test.ts b/tests/commands/multidrop.test.ts deleted file mode 100644 index 5c9da42..0000000 --- a/tests/commands/multidrop.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -describe("execute", () => { - describe("GIVEN randomCard image is hosted locally", () => { - test.todo("EXPECT image to be uploaded directly"); - }); - - describe("GIVEN randomCard image is hosted via http", () => { - test.todo("EXPECT image link to be directly added to embed"); - }); - - describe("GIVEN randomCard image is hosted via https", () => { - test.todo("EXPECT image link to be directly added to embed"); - }); -});