diff options
Diffstat (limited to 'src/lib/common/ConfirmationPrompt.ts')
-rw-r--r-- | src/lib/common/ConfirmationPrompt.ts | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/src/lib/common/ConfirmationPrompt.ts b/src/lib/common/ConfirmationPrompt.ts deleted file mode 100644 index b87d9ef..0000000 --- a/src/lib/common/ConfirmationPrompt.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { type CommandMessage, type SlashMessage } from '#lib'; -import { ActionRowBuilder, ButtonBuilder, ButtonStyle, type MessageComponentInteraction, type MessageOptions } from 'discord.js'; - -/** - * Sends a message with buttons for the user to confirm or cancel the action. - */ -export class ConfirmationPrompt { - /** - * @param message The message that triggered the command - * @param messageOptions Options for sending the message - */ - protected constructor(protected message: CommandMessage | SlashMessage, protected messageOptions: MessageOptions) {} - - /** - * Sends a message with buttons for the user to confirm or cancel the action. - */ - protected async send(): Promise<boolean> { - this.messageOptions.components = [ - new ActionRowBuilder<ButtonBuilder>().addComponents( - new ButtonBuilder({ style: ButtonStyle.Success, customId: 'confirmationPrompt_confirm', label: 'Yes' }), - new ButtonBuilder({ style: ButtonStyle.Danger, customId: 'confirmationPrompt_cancel', label: 'No' }) - ) - ]; - - const msg = await this.message.channel!.send(this.messageOptions); - - return await new Promise<boolean>((resolve) => { - let responded = false; - const collector = msg.createMessageComponentCollector({ - filter: (interaction) => interaction.message?.id == msg.id, - time: 300_000 - }); - - collector.on('collect', async (interaction: MessageComponentInteraction) => { - await interaction.deferUpdate().catch(() => undefined); - if (interaction.user.id == this.message.author.id || this.message.client.config.owners.includes(interaction.user.id)) { - if (interaction.customId === 'confirmationPrompt_confirm') { - responded = true; - collector.stop(); - resolve(true); - } else if (interaction.customId === 'confirmationPrompt_cancel') { - responded = true; - collector.stop(); - resolve(false); - } - } - }); - - collector.on('end', async () => { - await msg.delete().catch(() => undefined); - if (!responded) resolve(false); - }); - }); - } - - /** - * Sends a message with buttons for the user to confirm or cancel the action. - * @param message The message that triggered the command - * @param sendOptions Options for sending the message - */ - public static async send(message: CommandMessage | SlashMessage, sendOptions: MessageOptions): Promise<boolean> { - return new ConfirmationPrompt(message, sendOptions).send(); - } -} |