我正在构建Discord机器人,我想拥有一个if
语句,该语句仅在消息作者在公会中具有管理员角色时才会继续。
我尝试拥有特定于角色的权限,但这意味着该漫游器所在的所有服务器上都必须具有完全相同的名称角色。
如何检查消息作者是否具有管理员角色? (该角色具有管理员权限。)
答案 0 :(得分:1)
这里确实需要解决三个不同的问题。它们都是相关的,但每个都有不同的直接答案。
如何检查消息作者是否具有管理员角色?
通过GuildMember属性访问发送消息的Message.member
,而返回Message.author
的User则相反。请记住,成员具有角色和权限,不是用户。
可以使用Collection来检索GuildMember.roles
个成员角色。
您可以通过两种主要方式搜索角色:
Map.get()
Collection.find()
因此,将它们绑在一起:
if (message.member.roles.get('roleIDHere')) console.log('User is an admin.');
或
if (message.member.roles.find(role => role.name === 'Admin')) console.log('User is an admin.');
如何检查消息作者的角色是否具有管理员权限?
Message.member
中的GuildMember。GuildMember.roles
集合。Collection.find()
在集合中进行搜索。Role.hasPermission()
。例如:
if (message.member.roles.find(role => role.hasPermission('Administrator'))) console.log('User is an admin.');
您也可以将此概念应用于任何特定角色。
针对这种情况的最佳方法...
如何检查消息作者是否具有管理员权限?
Message.member
访问GuildMember。GuildMember.hasPermission()
方法立即检查成员的所有权限。考虑以下简短示例:
if (message.member.hasPermission('ADMINISTRATOR')) console.log('User is an admin.');
快速,对吧?
在尝试检查用户是否为管理员之前,请确保您检查客户端收到的消息不是DM。当公会中未发送邮件时,Message.member
是未定义的,尝试使用它会引发错误。
使用此条件,如果消息是DM,它将停止:
if (!message.guild) return;
答案 1 :(得分:0)
在GuildMember对象上,您可以使用hasPermission函数。
因此,您只需member.hasPermission('ADMINISTRATOR')
如果您对所有其他可解决权限的字符串感兴趣,则可以在discord.js docs中找到它们。
答案 2 :(得分:0)
这些答案似乎已经过时了:
使用:msg.member.roles.cache.has(roleID)