import { MessageFlags, PermissionFlagsBits, SlashCommandSubcommandBuilder } from "discord.js"; import { Command, requirePermission } from "@voidy/framework"; import { ChatbotRepository } from "../../schemas/ChatbotRepository"; export default new Command({ id: "chatbot.message.remove", use: [requirePermission(PermissionFlagsBits.ManageGuild)], data: new SlashCommandSubcommandBuilder() .setName("remove") .setDescription("Remove a message from a content repository by index.") .addIntegerOption((option) => option.setName("index").setDescription("Message index (1-based).").setRequired(true).setMinValue(1), ) .addStringOption((option) => option.setName("repository").setDescription("Local repository name. Omit for global."), ), execute: async ({ interaction }) => { const index = interaction.options.getInteger("index", true) - 1; const repoName = interaction.options.getString("repository"); const query = repoName ? { scope: "local" as const, guildId: interaction.guildId, name: repoName } : { scope: "global" as const }; const repo = await ChatbotRepository.findOne(query); if (!repo) { const target = repoName ? `Local repository "${repoName}"` : "Global repository"; await interaction.reply({ content: `${target} not found.`, flags: [MessageFlags.Ephemeral], }); return; } if (index < 0 || index >= repo.messages.length) { await interaction.reply({ content: `Invalid index. Repository has ${repo.messages.length} message(s).`, flags: [MessageFlags.Ephemeral], }); return; } const removed = repo.messages.splice(index, 1)[0]; await repo.save(); await interaction.reply({ content: `Removed message: "${removed?.content}". Remaining: ${repo.messages.length}.`, flags: [MessageFlags.Ephemeral], }); }, });