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

Discord.js 13.8.1按钮交互报错:如何延迟回复或避免失败?

解决Discord按钮交互"This interaction failed"报错的方法

原因分析

Discord要求所有交互(比如按钮点击)必须在3秒内得到响应,如果超出时间未处理就会触发该报错。你的代码仅编辑了指定消息,但未对按钮交互本身做出任何响应,因此导致报错。

方案一:用deferUpdate()静默标记交互已处理(推荐)

如果按钮是附在某条消息上的,且不需要发送新回复,直接调用interaction.deferUpdate()即可。这个方法会告诉Discord“我会稍后处理这条消息相关的交互”,不会发送任何可见内容,同时能避免报错。

修改后的代码:

// 先标记交互已接收,避免报错
await interaction.deferUpdate();

// 执行编辑指定消息的逻辑
interaction.channel.messages.fetch(/* 按钮自定义ID中的消息ID */).then(async ms => {
  return ms.edit({ content: '编辑后的消息内容' });
});

方案二:用临时回复后删除(适合非消息组件的按钮)

如果按钮不是附在目标消息上的,可以先发送一条仅自己可见的临时回复,再马上删除,同样能避免报错:

// 发送临时回复(仅自己可见)
const tempReply = await interaction.reply({ content: '处理中...', ephemeral: true });

// 执行编辑消息逻辑
await interaction.channel.messages.fetch(/* 消息ID */).then(async ms => {
  await ms.edit({ content: '编辑后的消息内容' });
});

// 删除临时回复
await tempReply.delete();

注意事项

  • 所有与交互相关的方法(比如deferUpdate、reply)都需要用await确保异步执行顺序,避免逻辑混乱。
  • 如果编辑操作耗时可能超过3秒,必须先调用defer类方法,否则依然会触发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:40:23