Discord.js:reaction.message.guild.members.find 不是函数
Posted
技术标签:
【中文标题】Discord.js:reaction.message.guild.members.find 不是函数【英文标题】:Discord.js : reaction.message.guild.members.find is not a function 【发布时间】:2020-08-10 18:56:30 【问题描述】:我正在尝试制作一个 Discord.js 机器人,为对 ✅ 表情符号做出反应的用户添加“Joueur”角色。我是 JS 新手,在网上找到了reaction.message.guild.members.find
函数,但不知怎么得到错误TypeError: reaction.message.guild.members.find is not a function
并且没有添加角色。
这是我的代码的一部分:
client.on('messageReactionAdd', async (reaction, user) =>
if (reaction.emoji.name === "✅")
try
reaction.message.guild.members.find('id', user.id).addRole(reaction.message.guild.roles.find('name', 'Joueur'));
catch
console.log('Error : can\'t add the role');
);
【问题讨论】:
【参考方案1】:如果您使用的是 Discord.js v12(最新版本),Guild#members
是 GuildMemberManager
,而不是 v11 中的 Collection
。
要访问集合,请使用 cache
属性。
另一个区别是Collection
不支持像这样通过键和值查找东西。但是,它确实支持通过 id
获取对象:
reaction.message.guild.members.cache.get(user.id)
请注意,要通过另一个键查找对象,您需要使用以下命令:
reaction.message.guild.members.cache.find(member => member.someProperty === theValue)
您可能还想检查反应是否在公会中完成(除非您使用意图并且未使用 DIRECT_MESSAGE_REACTIONS
意图)。人们也可以在 DM 中添加对消息的反应,因此 reaction.message.guild
可能是 undefined
。
【讨论】:
【参考方案2】:如果您使用的是最新版本,这里是一个示例:
他们还在 v12 中将 addRole 更改为:roles.add
let role = message.guild.roles.cache.find(role => role.name === 'somerolename');
reaction.message.guild.member(user).roles.add(role.id).catch(console.error);
https://discordjs.guide/additional-info/changes-in-v12.html#roles
【讨论】:
【参考方案3】:根据doc,您可以使用reaction.users
获取对消息做出反应的用户的collection。
该集合将如下所示:
Collection(n)[Map]
'id_of_user_who_reacted' => <ref*1> ClientUser
id: 'id_of_user_who_reacted',
username: String,
discriminator:String
...
然后可以使用Collector类型的map()方法获取用户id
console.log(reaction.users.map(user => user.id))
这将返回一个如下所示的数组:
['id', 'id', 'id']
然后您可以更改这些用户的角色。
【讨论】:
以上是关于Discord.js:reaction.message.guild.members.find 不是函数的主要内容,如果未能解决你的问题,请参考以下文章
Discord 错误错误 Discord.js 中的无效令牌
Discord 仅识别 discord.js 中的“ping”命令
错误“const Discord = require(discord.js) ^ ReferenceError: discord is not defined”
(Discord 机器人)当用户加入 Discord 服务器(discord.js)时,如何发送欢迎消息?