如何使用Discord.js检查消息作者是否具有管理员角色?

时间:2019-07-08 00:01:29

标签: javascript discord discord.js

我正在构建Discord机器人,我想拥有一个if语句,该语句仅在消息作者在公会中具有管理员角色时才会继续。

我尝试拥有特定于角色的权限,但这意味着该漫游器所在的所有服务器上都必须具有完全相同的名称角色。

如何检查消息作者是否具有管理员角色? (该角色具有管理员权限。)

3 个答案:

答案 0 :(得分:1)

这里确实需要解决三个不同的问题。它们都是相关的,但每个都有不同的直接答案。


  

如何检查消息作者是否具有管理员角色

因此,将它们绑在一起:

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集合。
  • 然后...déjàvu ...您可以使用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)

相关问题