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#membersGuildMemberManager,而不是 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类型的ma​​p()方法获取用户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)时,如何发送欢迎消息?

Discord.js 和 discord.js-commando 防止命令在特定通道中运行

使用 Discord 按钮的建议命令 Discord.JS