From b667f1ffb9ddba8a0e261995853f9cde9700fca8 Mon Sep 17 00:00:00 2001 From: Ethan Lane Date: Wed, 20 Dec 2023 18:30:32 +0000 Subject: [PATCH 1/5] Put user's name in the embed --- src/helpers/InventoryHelper.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/helpers/InventoryHelper.ts b/src/helpers/InventoryHelper.ts index 197a131..06a7768 100644 --- a/src/helpers/InventoryHelper.ts +++ b/src/helpers/InventoryHelper.ts @@ -20,7 +20,7 @@ interface InventoryPageCards { } export default class InventoryHelper { - public static async GenerateInventoryPage(userid: string, page: number): Promise<{ embed: EmbedBuilder, row: ActionRowBuilder }> { + public static async GenerateInventoryPage(username: string, userid: string, page: number): Promise<{ embed: EmbedBuilder, row: ActionRowBuilder }> { const cardsPerPage = 9; const inventory = await Inventory.FetchAllByUserId(userid); @@ -76,9 +76,9 @@ export default class InventoryHelper { } const embed = new EmbedBuilder() - .setTitle(`${currentPage.name} (${currentPage.seriesSubpage + 1})`) + .setTitle(username) .setDescription(currentPage.cards.map(x => `[${x.id}] ${x.name} (${CardRarityToString(x.type)}) x${x.quantity}`).join('\n')) - .setFooter({ text: `Page ${page} of ${pages.length}` }) + .setFooter({ text: `${currentPage.name} (${currentPage.seriesSubpage + 1}) · Page ${page} of ${pages.length}` }) .setColor(EmbedColours.Ok); const row = new ActionRowBuilder() From 95ed90b916e0778c19e88bfc78319384a3dd566e Mon Sep 17 00:00:00 2001 From: Ethan Lane Date: Wed, 20 Dec 2023 18:33:07 +0000 Subject: [PATCH 2/5] Create inventory command --- src/client/client.ts | 6 +----- src/commands/inventory.ts | 6 ++++++ src/registry.ts | 2 ++ 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/client/client.ts b/src/client/client.ts index 5dee253..85ef43e 100644 --- a/src/client/client.ts +++ b/src/client/client.ts @@ -84,11 +84,7 @@ export class CoreClient extends Client { console.log(`Registered Events: ${CoreClient._eventItems.flatMap(x => x.EventType).join(", ")}`); console.log(`Registered Buttons: ${CoreClient._buttonEvents.flatMap(x => x.ButtonId).join(", ")}`); - const page = await InventoryHelper.GenerateInventoryPage('125776189666230272', 0); - - console.log(page); - - // await super.login(process.env.BOT_TOKEN); + await super.login(process.env.BOT_TOKEN); } public static RegisterCommand(name: string, command: Command, environment: Environment = Environment.All, serverId?: string) { diff --git a/src/commands/inventory.ts b/src/commands/inventory.ts index 37b23c8..047a898 100644 --- a/src/commands/inventory.ts +++ b/src/commands/inventory.ts @@ -1,5 +1,6 @@ import { CommandInteraction, SlashCommandBuilder } from "discord.js"; import { Command } from "../type/command"; +import InventoryHelper from "../helpers/InventoryHelper"; export default class Inventory extends Command { constructor() { @@ -11,6 +12,11 @@ export default class Inventory extends Command { } public override async execute(interaction: CommandInteraction) { + const embed = await InventoryHelper.GenerateInventoryPage(interaction.user.username, interaction.user.id, 0); + await interaction.reply({ + embeds: [ embed.embed ], + components: [ embed.row ], + }); } } \ No newline at end of file diff --git a/src/registry.ts b/src/registry.ts index e602198..fc14bdb 100644 --- a/src/registry.ts +++ b/src/registry.ts @@ -4,6 +4,7 @@ import { CoreClient } from "./client/client"; import About from "./commands/about"; import Drop from "./commands/drop"; import Gdrivesync from "./commands/gdrivesync"; +import Inventory from "./commands/inventory"; import Resync from "./commands/resync"; // Test Command Imports @@ -21,6 +22,7 @@ export default class Registry { CoreClient.RegisterCommand('about', new About()); CoreClient.RegisterCommand('drop', new Drop()); CoreClient.RegisterCommand('gdrivesync', new Gdrivesync()); + CoreClient.RegisterCommand('inventory', new Inventory()); CoreClient.RegisterCommand('resync', new Resync()); // Test Commands From bbe8f0d4d81c8023b3f8b478bdc8521743490960 Mon Sep 17 00:00:00 2001 From: Ethan Lane Date: Wed, 20 Dec 2023 18:37:06 +0000 Subject: [PATCH 3/5] Add inventory button event --- src/buttonEvents/Inventory.ts | 17 +++++++++++++++++ src/registry.ts | 4 +++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 src/buttonEvents/Inventory.ts diff --git a/src/buttonEvents/Inventory.ts b/src/buttonEvents/Inventory.ts new file mode 100644 index 0000000..f1fc2ea --- /dev/null +++ b/src/buttonEvents/Inventory.ts @@ -0,0 +1,17 @@ +import { ButtonInteraction } from "discord.js"; +import { ButtonEvent } from "../type/buttonEvent"; +import InventoryHelper from "../helpers/InventoryHelper"; + +export default class Inventory extends ButtonEvent { + public override async execute(interaction: ButtonInteraction) { + const userid = interaction.customId.split(' ')[1]; + const page = interaction.customId.split(' ')[2]; + + const embed = await InventoryHelper.GenerateInventoryPage(interaction.user.username, userid, Number(page)); + + await interaction.reply({ + embeds: [ embed.embed ], + components: [ embed.row ], + }); + } +} \ No newline at end of file diff --git a/src/registry.ts b/src/registry.ts index fc14bdb..679c70e 100644 --- a/src/registry.ts +++ b/src/registry.ts @@ -1,4 +1,5 @@ import { CoreClient } from "./client/client"; +import { Environment } from "./constants/Environment"; // Global Command Imports import About from "./commands/about"; @@ -13,8 +14,8 @@ import Droprarity from "./commands/stage/droprarity"; // Button Event Imports import Claim from "./buttonEvents/Claim"; +import InventoryButtonEvent from "./buttonEvents/Inventory"; import Reroll from "./buttonEvents/Reroll"; -import { Environment } from "./constants/Environment"; export default class Registry { public static RegisterCommands() { @@ -36,6 +37,7 @@ export default class Registry { public static RegisterButtonEvents() { CoreClient.RegisterButtonEvent('claim', new Claim()); + CoreClient.RegisterButtonEvent('inventory', new InventoryButtonEvent); CoreClient.RegisterButtonEvent('reroll', new Reroll()); } } \ No newline at end of file From fa9a84dbe699d7d0b44b51405fb8b1aefbc39ad9 Mon Sep 17 00:00:00 2001 From: Ethan Lane Date: Wed, 20 Dec 2023 18:41:04 +0000 Subject: [PATCH 4/5] Add page start option --- src/commands/inventory.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/commands/inventory.ts b/src/commands/inventory.ts index 047a898..e0359b2 100644 --- a/src/commands/inventory.ts +++ b/src/commands/inventory.ts @@ -8,11 +8,17 @@ export default class Inventory extends Command { this.CommandBuilder = new SlashCommandBuilder() .setName('inventory') - .setDescription('View your inventory'); + .setDescription('View your inventory') + .addNumberOption(x => + x + .setName('page') + .setDescription('The page to start with')); } public override async execute(interaction: CommandInteraction) { - const embed = await InventoryHelper.GenerateInventoryPage(interaction.user.username, interaction.user.id, 0); + const page = interaction.options.get('page'); + + const embed = await InventoryHelper.GenerateInventoryPage(interaction.user.username, interaction.user.id, page ? Number(page.value) : 0); await interaction.reply({ embeds: [ embed.embed ], From cb57b245214a19cb6a141b75719f4c115507d625 Mon Sep 17 00:00:00 2001 From: Ethan Lane Date: Wed, 20 Dec 2023 19:31:21 +0000 Subject: [PATCH 5/5] Fix pagination bugs --- src/buttonEvents/Inventory.ts | 14 +++++++++----- src/commands/inventory.ts | 20 +++++++++++++++----- src/helpers/InventoryHelper.ts | 8 ++++---- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/buttonEvents/Inventory.ts b/src/buttonEvents/Inventory.ts index f1fc2ea..63ea5a4 100644 --- a/src/buttonEvents/Inventory.ts +++ b/src/buttonEvents/Inventory.ts @@ -7,11 +7,15 @@ export default class Inventory extends ButtonEvent { const userid = interaction.customId.split(' ')[1]; const page = interaction.customId.split(' ')[2]; - const embed = await InventoryHelper.GenerateInventoryPage(interaction.user.username, userid, Number(page)); + try { + const embed = await InventoryHelper.GenerateInventoryPage(interaction.user.username, userid, Number(page)); - await interaction.reply({ - embeds: [ embed.embed ], - components: [ embed.row ], - }); + await interaction.update({ + embeds: [ embed.embed ], + components: [ embed.row ], + }); + } catch { + await interaction.reply("No page for user found."); + } } } \ No newline at end of file diff --git a/src/commands/inventory.ts b/src/commands/inventory.ts index e0359b2..39d0881 100644 --- a/src/commands/inventory.ts +++ b/src/commands/inventory.ts @@ -18,11 +18,21 @@ export default class Inventory extends Command { public override async execute(interaction: CommandInteraction) { const page = interaction.options.get('page'); - const embed = await InventoryHelper.GenerateInventoryPage(interaction.user.username, interaction.user.id, page ? Number(page.value) : 0); + try { + let pageNumber = 0; - await interaction.reply({ - embeds: [ embed.embed ], - components: [ embed.row ], - }); + if (page && page.value) { + pageNumber = Number(page.value) - 1; + } + + const embed = await InventoryHelper.GenerateInventoryPage(interaction.user.username, interaction.user.id, pageNumber); + + await interaction.reply({ + embeds: [ embed.embed ], + components: [ embed.row ], + }); + } catch { + await interaction.reply("No page for user found."); + } } } \ No newline at end of file diff --git a/src/helpers/InventoryHelper.ts b/src/helpers/InventoryHelper.ts index 06a7768..ad4bf85 100644 --- a/src/helpers/InventoryHelper.ts +++ b/src/helpers/InventoryHelper.ts @@ -21,7 +21,7 @@ interface InventoryPageCards { export default class InventoryHelper { public static async GenerateInventoryPage(username: string, userid: string, page: number): Promise<{ embed: EmbedBuilder, row: ActionRowBuilder }> { - const cardsPerPage = 9; + const cardsPerPage = 15; const inventory = await Inventory.FetchAllByUserId(userid); @@ -77,8 +77,8 @@ export default class InventoryHelper { const embed = new EmbedBuilder() .setTitle(username) - .setDescription(currentPage.cards.map(x => `[${x.id}] ${x.name} (${CardRarityToString(x.type)}) x${x.quantity}`).join('\n')) - .setFooter({ text: `${currentPage.name} (${currentPage.seriesSubpage + 1}) · Page ${page} of ${pages.length}` }) + .setDescription(`**${currentPage.name} (${currentPage.seriesSubpage + 1})**\n${currentPage.cards.map(x => `[${x.id}] ${x.name} (${CardRarityToString(x.type)}) x${x.quantity}`).join('\n')}`) + .setFooter({ text: `Page ${page + 1} of ${pages.length}` }) .setColor(EmbedColours.Ok); const row = new ActionRowBuilder() @@ -92,7 +92,7 @@ export default class InventoryHelper { .setCustomId(`inventory ${userid} ${page + 1}`) .setLabel("Next") .setStyle(ButtonStyle.Primary) - .setDisabled(page == pages.length)); + .setDisabled(page + 1 == pages.length)); return { embed, row }; }