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

Discord.js中fetchMessage获取的reaction.users为空问题求助

解决Discord.js中reaction.users为空但count显示正确的问题

你这碰到了Discord.js里一个挺常见的小坑——明明reaction.count显示是2(对应你和机器人的反应),但reaction.users却是空的。核心原因很简单:默认调用fetchMessage()时,Discord API不会自动拉取反应对应的用户列表,它只会返回反应的基础数据(比如表情、计数),用户数据需要你手动去获取。

问题根源

Discord的API做了性能优化,不会一次性把所有关联数据都返回给你。当你通过channel.fetchMessage()拿到消息对象时,反应的用户集合是未加载状态,所以reaction.users看起来是空的,哪怕实际有用户添加了反应。

修复代码

你只需要在遍历用户前,调用reaction.users.fetch()这个异步方法来拉取用户数据,记得加await等待完成。修改后的代码如下:

var msg = await channel.fetchMessage(the-message-id);
var reaction = msg.reactions.get("🎉");
// 手动拉取该反应的所有用户数据
await reaction.users.fetch();
for (const user of reaction.users.values()) {
  const data = user.id;
  reacted.push(data);
}

额外提示

  • 如果不需要获取所有用户,可以给fetch()传参数限制数量,比如reaction.users.fetch({ limit: 5 }),默认会拉取所有添加该反应的用户。
  • 要是你用的是较新版本的Discord.js(v13+),语法可能略有不同,但核心逻辑还是一样的:必须手动触发用户数据的拉取。

这样修改后,reaction.users里就会包含你和机器人的用户对象,你就能顺利把用户ID存入reacted数组了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:34:08