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
相关产品推荐
相关产品推荐

