(modals): Implement edit-knowledgebase-item-modal modal.

This commit is contained in:
2026-10-14 13:45:52 +08:00
parent 0fbb8918dc
commit 96c783fb96
+24 -36
View File
@@ -1,54 +1,42 @@
import { Client, MessageFlags, ModalSubmitInteraction } from 'discord.js'; import { Client, ModalSubmitInteraction } from 'discord.js';
import { Database } from '../shared/Database'; import { Database } from '../shared/Database';
import { deferInteraction, logCustomEvent } from '../utils'; import { deferInteraction, logCustomEvent } from '../utils';
import { Modal } from '../types';
export default { class EditKnowledgebaseItemModal implements Modal<Client> {
name: 'edit-knowledgebase-item-modal', id = '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.' });
async execute(context: Client<boolean>, interaction: ModalSubmitInteraction, idString: string): Promise<void> {
if (!interaction.inGuild()) return;
await deferInteraction(interaction); await deferInteraction(interaction);
try {
const id = parseInt(idString); 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 content = interaction.fields.getTextInputValue('content'); const content = interaction.fields.getTextInputValue('content');
if (content.length > 2000) throw new Error('Content cannot be longer than 2000 characters.');
const existingItem = await Database.getFromKnowledgebase(id); await logCustomEvent(interaction.guild!, {
if (!existingItem) return interaction.editReply('Knowledgebase item not found.');
if (content.length > 2000) return interaction.editReply('Content cannot be over 2000 characters long.');
logCustomEvent(interaction.guild!, {
title: 'Knowledgebase Item Edited', title: 'Knowledgebase Item Edited',
description: null, description: null,
color: 0xFFFF00, color: 0xFFFF00,
timestamp: new Date(), timestamp: new Date(),
fields: [ fields: [
{ { name: 'User', value: `${interaction.user} (${interaction.user.id})`, inline: false },
name: 'User', { name: 'Name', value: existing.name, inline: false },
value: `<@${interaction.user.id}>\n${interaction.user.username}`, { name: 'Old Content', value: existing.content, inline: false },
inline: true { name: 'New Content', value: content, inline: false },
}, ],
{
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); await Database.editKnowledgebaseItem(id, content);
await interaction.editReply(`\`${existing.name}\` has been edited.`);
return interaction.editReply(`Edited knowledgebase entry \`${existingItem.name}\`.`); } catch (error: Error | any) {
await interaction.editReply({ content: error.message }).catch(() => {});
} }
}; }
}
export default new EditKnowledgebaseItemModal();