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

discord.js的awaitReactions方法无法正常触发应如何解决?

问题原因及解决方案

你遇到的添加反应后无响应的问题,基本由以下几个常见原因导致,按优先级排查即可:

1. Discord.js 版本API不匹配

Discord.js v13及以上版本中,awaitReactions 方法的传参规则发生了变化:旧版v12支持第一个参数传过滤函数、第二个参数传配置项,v13+仅支持传入一个配置对象,过滤函数需要放在配置对象的filter字段中。

2. 未开启对应网关意图

要接收消息反应事件,必须在客户端初始化时开启对应意图:

  • 服务器消息收反应需要开启GuildMessageReactions意图
  • 私聊消息收反应需要开启DirectMessageReactions意图

3. 缺少错误捕获逻辑

你当前的代码没有添加catch块,当反应收集超时、权限不足时抛出的错误会被静默吞掉,无法定位问题。

4. 超时时间过短

你设置的time: 3000仅为3秒,测试时很容易还没完成点击就超时,建议先调大到30秒验证功能。


修正后代码示例

第一步:初始化客户端时补全意图

const { Client, IntentsBitField } = require('discord.js');
const client = new Client({
  intents: [
    IntentsBitField.Flags.Guilds,
    IntentsBitField.Flags.GuildMessages,
    IntentsBitField.Flags.GuildMessageReactions,
    IntentsBitField.Flags.MessageContent
  ]
});

第二步:修正反应收集逻辑

let PossibleMessage = await Message.channel.send({embeds: [msgEmbed1]});

// 并行添加反应,避免嵌套回调冗余
await Promise.all([
  PossibleMessage.react("✅"),
  PossibleMessage.react("❎")
])
console.log("stuff applied.. awaiting.")

const filter = (Reaction, User) => User.id === Message.author.id && ["❎", "✅"].includes(Reaction.emoji.name);

PossibleMessage.awaitReactions({
  filter,
  max: 1,
  time: 30000
}).then(Collected => {
  console.log("yes")
  if (Collected.first().emoji.name === "✅") {
    console.log("ye2")
    // 后续业务逻辑
  }
}).catch(err => {
  console.log("反应收集失败/超时:", err)
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 09:39:01