检查用户是不是在新的 discord.js 版本中具有角色

Posted

技术标签:

【中文标题】检查用户是不是在新的 discord.js 版本中具有角色【英文标题】:Check if user has a role in the new discord.js version检查用户是否在新的 discord.js 版本中具有角色 【发布时间】:2022-01-19 00:00:29 【问题描述】:

嘿,我想检查一个用户是否有一个角色,尽管所有其他方法都已经过时了,而且我已经尝试了一些方法,但都不起作用。

我的尝试:

var guild = client.guilds.cache.get("Guild ID")
var buyerRole = guild.roles.cache.get("Role ID")
await guild.members.fetch()
const guildMember =  guild.members.cache.get(message.author.id)
if(guildMember.roles.find(buyerRole.id))...

【问题讨论】:

是roles.cache.find,你只用ID所以用roles.cache.has 但是 find() 接受一个函数,而不是一个 ID,所以可能是 roles.cache.has(buyerRole.id) @ZsoltMeszaros TypeError: authorMember.roles.find is not a function :( 查看previoustwo答案 @MrMythical TypeError: authorMember.roles.has is not a function 【参考方案1】:

好吧,你会想要使用 member.roles.cache.some() 来实现这一点。

var guild = client.guilds.cache.get("Guild ID")
var buyerRole = guild.roles.cache.get("Role ID")
const guildMember = await guild.members.fetch('User ID');
if(guildMember.roles.cache.some(x => x.id == buyerRole.id))...

.some 总是会返回一个布尔值,所以你最好这样使用它。

【讨论】:

guildMember.roles.cache.has(buyerRole.id) 的作用相同,而且更短。【参考方案2】:

经过一番调试,原来可以使用 message.author._roles 而不是 message.author.roles 以获取完整的列表数组。

【讨论】:

以上是关于检查用户是不是在新的 discord.js 版本中具有角色的主要内容,如果未能解决你的问题,请参考以下文章

检查用户是不是可以在提到的频道 discord.js 中发送消息

Discord.js - 检查用户是不是静音/静音更改

如何检查用户是不是有任何角色 discord.js

Discord.js 如何检查用户是不是不接受私信

在新的 discordjs 中从 DM 向用户添加角色

检查 Discord 服务器中是不是存在用户 ID