使用Discord.js发送Modal时遭遇Interaction Already Replied错误求助
问题原因
你遇到的Interaction Already Replied错误,是因为**interaction.deferReply()会将交互标记为已回复状态**,而Discord规则里,showModal()要求交互处于未处理状态——这两个操作属于同一层级的交互响应,不能先后触发。
解决方案
直接移除await interaction.deferReply()这一行,同时调用sendModal时要加上await确保异步操作完成:
修改后的interactCreate.js代码:
const DC = require("../methods/discord_methods") module.exports = { name: 'interactionCreate', async execute(interaction) { // 移除deferReply调用 await DC.sendModal(interaction) }, };
补充说明
如果你的需求是在用户提交模态框内容后需要延迟回复,逻辑应该放在模态框的interactionCreate事件处理分支里(监听自定义ID为myModal的交互),而非触发模态框前调用deferReply。示例:
// 在interactCreate.js的execute函数中补充 if (interaction.isModalSubmit()) { if (interaction.customId === 'myModal') { await interaction.deferReply({ ephemeral: true }); // 后续处理模态框提交的数据逻辑 await interaction.editReply('已收到你的提交内容'); } }
内容的提问来源于stack exchange,提问作者Dummy Cron
相关产品推荐
相关产品推荐

