You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js:更新消息后回复避免InteractionAlreadyReplied错误

Discord 交互报错:InteractionAlreadyReplied 解决方案

问题核心

你混淆了两种交互响应类型:deferReply()用于延迟发送新回复消息,而你需要的是延迟更新触发交互的原Embed消息,两者不能同时使用,否则会触发InteractionAlreadyReplied错误。

正确实现流程

  1. 调用deferUpdate()替代deferReply(),告知Discord你要延迟更新原按钮所在的消息,避免超时。
  2. 执行耗时操作(比如你的5秒等待)。
  3. 使用update()更新原Embed消息。
  4. 使用followUp()发送确认点击的新消息(可设置ephemeral: true让消息仅触发用户可见)。

修正后的代码

await interaction.deferUpdate(); // 延迟原消息更新,规避超时问题
await wait(5_000);
const embed1 = embed1content;
const embed2 = embed2content;
await interaction.update({ embeds: [embed1] }); // 更新带按钮的原Embed
await interaction.followUp({ embeds: [embed2], ephemeral: true }); // 发送确认消息

原尝试失败原因

  • Attempt 1:deferReply()将交互标记为"需要回复",后续调用update()属于对同一交互的第二种响应类型(更新原消息),Discord不允许同时存在两种响应,因此报错。
  • Attempt 2:同理,deferReply()占用了交互的"回复"状态,update()与该状态冲突,后续editReply()也无法生效,因为交互已被错误标记为回复类型。

内容的提问来源于stack exchange,提问作者user874737

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:09:54