Javascript 从成员的消息中检查成员角色
所以之前我一直在使用下面的代码来检查一个成员是否有特定的角色Javascript 从成员的消息中检查成员角色,javascript,discord,discord.js,Javascript,Discord,Discord.js,所以之前我一直在使用下面的代码来检查一个成员是否有特定的角色 if(message.member.roles.some(role=>role.name=='role')) 它一直对我有用。但是,现在它似乎返回了一个错误。我已经把范围缩小到message.member返回Null。我试着把它改成公会会员和同样的问题 有问题的错误是: TypeError:无法读取未定义的属性“角色” 这方面有什么变化吗? 有人能帮我找到一个新的方法来检查他们是否有一个角色吗 编辑 这就是信息的来源 client.o
if(message.member.roles.some(role=>role.name=='role'))
它一直对我有用。但是,现在它似乎返回了一个错误。我已经把范围缩小到message.member返回Null。我试着把它改成公会会员和同样的问题
有问题的错误是:
TypeError:无法读取未定义的属性“角色”
这方面有什么变化吗?
有人能帮我找到一个新的方法来检查他们是否有一个角色吗
编辑
这就是信息的来源
client.on('message', message => {
console.log("Member: " + message.member);
这将为message.member返回空favlues。很可能成员上没有“角色”属性。我建议您创建一个保护条款,并确保在接受它之前道具在那里 您可以在此处阅读有关保护条款的内容: 编辑: 我看到了您在评论中共享的“message”对象的控制台日志,下面是我的更新:
message.guild.roles
这里是一个集合(地图)。请看下面的截图const roles = message.guild.roles;
然后可以使用roles.entries()
从角色映射中获取键值对,并对它们进行迭代,然后使用最初使用的if条件
与错误消息状态一样,发生这种情况是因为“成员”未定义。您可以有一个guard子句,如用户Paulquappe在其回答中提到的,但guard子句将用于成员,而不是角色,因此如下所示:
if (message.member && message.member.roles.some(role => role.name === 'role'))
或者,如果您要传输代码,可以使用ES2020中的可选链接(这是JS中的一个非常新的功能,因此除非您要传输代码,否则我不推荐它):
可选的链接运算符的作用类似于一个guard子句,但该语法只要求在使用点语法进行链接之前使用“?”
if (message.member?.roles.some(role => role.name === 'role'))
您使用的是discord.js的哪个版本?没有“成员”,这就是它说的原因:无法读取“未定义”的属性“角色”。因此,成员未定义。是否对成员应用guard子句?同样的原则。但是已经有人为您编写了代码。它仍然会给出一个错误,因为成员未定义。Guard子句应该应用于成员。谢谢您的帮助。但是它总是返回null,我不知道为什么会这样。这只是阻止了错误的出现,但我正在试图找到一种方法来修复它,并找到另一种方法来检查成员角色。它从数据来源返回null。您必须共享更多代码才能让我们识别。是的,我刚刚编辑了帖子以显示消息的来源。您可以控制台.log(message)对象并共享结果吗?我想看看邮件上是否有会员道具。如果属性名称是其他名称。屏幕截图就好了。这是消息日志