From 2b5e876a957e98b0fa64a6076b41b0819b05d123 Mon Sep 17 00:00:00 2001 From: NekoMonci12 Date: Tue, 3 Jun 2025 09:56:19 +0700 Subject: [PATCH] implement "/answer" --- index.js | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/index.js b/index.js index fe583ee..8f0f95d 100644 --- a/index.js +++ b/index.js @@ -79,6 +79,15 @@ const pastebin = new PastebinClient(process.env.PASTEBIN_DEV_KEY); .setDescription('The new persona text') .setRequired(true) ), + + new SlashCommandBuilder() + .setName('answer') + .setDescription('Reply to a specific message by ID or reply to the last message.') + .addStringOption(option => + option.setName('message_id') + .setDescription('ID of the message to reply') + .setRequired(false) + ), ].map(c => c.toJSON()); await new CommandDeployer(commands, process.env.CLIENT_ID, process.env.DISCORD_TOKEN).deploy(); @@ -295,6 +304,77 @@ const pastebin = new PastebinClient(process.env.PASTEBIN_DEV_KEY); flags: MessageFlags.Ephemeral }); } + + else if (commandName === 'answer') { + try { + const messageId = options.getString('message_id'); + let targetMessage; + + if (messageId) { + targetMessage = await interaction.channel.messages.fetch(messageId); + } else { + const messages = await interaction.channel.messages.fetch({ limit: 1 }); + targetMessage = messages.last(); + } + + if (!targetMessage || targetMessage.author.bot) { + await interaction.reply({ content: 'No valid message to reply to.', flags: MessageFlags.Ephemeral }); + return; + } + + if (targetMessage.reference && targetMessage.reference.messageId) { + + const repliedToMessage = await interaction.channel.messages.fetch(targetMessage.reference.messageId); + if (repliedToMessage && repliedToMessage.author.id !== interaction.user.id) { + const messageContent = repliedToMessage.content; + logInfo(`[/answer] replying to message: ${messageContent}`); + + if (!interaction.deferred && !interaction.replied) { + await interaction.deferReply(); + } + + const { reply } = await processMessage({ + message: messageContent, + authKey: interaction.user.id, + isDiscord: true, + guildId: interaction.guildId, + userId: interaction.user.id + }); + + if (reply) { + await interaction.editReply(reply); + } else { + await interaction.editReply('❌ Failed to generate a reply.'); + } + return; + } + } + + const messageContent = targetMessage.content; + logInfo(`[/answer] replying to message: ${messageContent}`); + + if (!interaction.deferred && !interaction.replied) { + await interaction.deferReply(); + } + + const { reply } = await processMessage({ + message: messageContent, + authKey: interaction.user.id, + isDiscord: true, + guildId: interaction.guildId, + userId: interaction.user.id + }); + + if (reply) { + await interaction.editReply(reply); + } else { + await interaction.editReply('❌ Failed to generate a reply.'); + } + } catch (err) { + logError('Error in /answer:', err); + await interaction.reply({ content: 'Error processing answer.', flags: MessageFlags.Ephemeral }); + } + } }); client.login(process.env.DISCORD_TOKEN);