From 96c783fb966ae0bb263dbc3c93741df5afb4248f Mon Sep 17 00:00:00 2001 From: Nix Krystik Date: Wed, 14 Oct 2026 13:45:52 +0800 Subject: [PATCH] (modals): Implement `edit-knowledgebase-item-modal` modal. --- src/modals/edit-knowledgebase-item-modal.ts | 76 +++++++++------------ 1 file changed, 32 insertions(+), 44 deletions(-) diff --git a/src/modals/edit-knowledgebase-item-modal.ts b/src/modals/edit-knowledgebase-item-modal.ts index 52d612a..eb94fc9 100644 --- a/src/modals/edit-knowledgebase-item-modal.ts +++ b/src/modals/edit-knowledgebase-item-modal.ts @@ -1,54 +1,42 @@ -import { Client, MessageFlags, ModalSubmitInteraction } from 'discord.js'; +import { Client, ModalSubmitInteraction } from 'discord.js'; import { Database } from '../shared/Database'; import { deferInteraction, logCustomEvent } from '../utils'; +import { Modal } from '../types'; -export default { - name: 'edit-knowledgebase-item-modal', - handler: async function (client: Client, interaction: ModalSubmitInteraction, idString: string) { - if (!interaction.guild) return interaction.reply({ flags: [MessageFlags.Ephemeral], content: 'Must be ran in guild.' }); +class EditKnowledgebaseItemModal implements Modal { + id = 'edit-knowledgebase-item-modal'; + async execute(context: Client, interaction: ModalSubmitInteraction, idString: string): Promise { + if (!interaction.inGuild()) return; await deferInteraction(interaction); - const id = parseInt(idString); - const content = interaction.fields.getTextInputValue('content'); + try { + const id = parseInt(idString); + const existing = await Database.getFromKnowledgebase(id); + if (!existing) throw new Error("A knowledgebase item with that ID doesn't exist."); - const existingItem = await Database.getFromKnowledgebase(id); + const content = interaction.fields.getTextInputValue('content'); + if (content.length > 2000) throw new Error('Content cannot be longer than 2000 characters.'); - if (!existingItem) return interaction.editReply('Knowledgebase item not found.'); + await logCustomEvent(interaction.guild!, { + title: 'Knowledgebase Item Edited', + description: null, + color: 0xFFFF00, + timestamp: new Date(), + fields: [ + { name: 'User', value: `${interaction.user} (${interaction.user.id})`, inline: false }, + { name: 'Name', value: existing.name, inline: false }, + { name: 'Old Content', value: existing.content, inline: false }, + { name: 'New Content', value: content, inline: false }, + ], + }); - if (content.length > 2000) return interaction.editReply('Content cannot be over 2000 characters long.'); - - logCustomEvent(interaction.guild!, { - title: 'Knowledgebase Item Edited', - description: null, - color: 0xFFFF00, - timestamp: new Date(), - fields: [ - { - name: 'User', - value: `<@${interaction.user.id}>\n${interaction.user.username}`, - inline: true - }, - { - name: 'Name', - value: existingItem.name, - inline: true - }, - { - name: 'Old Content', - value: existingItem.content, - inline: true - }, - { - name: 'New Content', - value: content, - inline: true - } - ] - }); - - await Database.editKnowledgebaseItem(id, content); - - return interaction.editReply(`Edited knowledgebase entry \`${existingItem.name}\`.`); + await Database.editKnowledgebaseItem(id, content); + await interaction.editReply(`\`${existing.name}\` has been edited.`); + } catch (error: Error | any) { + await interaction.editReply({ content: error.message }).catch(() => {}); + } } -}; \ No newline at end of file +} + +export default new EditKnowledgebaseItemModal(); \ No newline at end of file