Discord.js:更新消息后回复避免InteractionAlreadyReplied错误
Discord 交互报错:InteractionAlreadyReplied 解决方案
问题核心
你混淆了两种交互响应类型:deferReply()用于延迟发送新回复消息,而你需要的是延迟更新触发交互的原Embed消息,两者不能同时使用,否则会触发InteractionAlreadyReplied错误。
正确实现流程
- 调用
deferUpdate()替代deferReply(),告知Discord你要延迟更新原按钮所在的消息,避免超时。 - 执行耗时操作(比如你的5秒等待)。
- 使用
update()更新原Embed消息。 - 使用
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
相关产品推荐
相关产品推荐

