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

Cha*_*G20 3 javascript discord discord.js

我正在构建一个 Discord 机器人,我希望有一个if声明,只有当消息作者在公会中具有管理员角色时才会继续。

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

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

slo*_*ful 12

由于 Managers 的实现,必须修改以下一些代码才能在最新的主要 Discord.js 版本(本次编辑时为 v12)中使用。

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


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

所以,把这一切联系在一起:

if (message.member.roles.has'roleIDHere')) console.log('User is an admin.');
Run Code Online (Sandbox Code Playgroud)

或者

if (message.member.roles.find(role => role.name === 'Admin')) console.log('User is an admin.');
Run Code Online (Sandbox Code Playgroud)

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

  • 同样,我们需要使用Message#member.
  • 再次,我们需要使用GuildMember#roles集合。
  • 而且……似曾相识……您可以使用 搜索收藏Collection#find()
  • 这一次,您应该专门检查Role#hasPermission()谓词函数。

例如:

if (message.member.roles.find(role => role.hasPermission('Administrator'))) console.log('User is an admin.');
Run Code Online (Sandbox Code Playgroud)

您也可以将此概念应用于任何特定角色。


这种情况的最佳方法...

如何检查消息作者是否具有管理员权限

  • 我们继续使用Message#memberGuildMember 来访问。
  • 但是,您可以通过该方法一次检查成员的所有权限GuildMember#hasPermission()

考虑这个简短的例子:

if (message.member.hasPermission('ADMINISTRATOR')) console.log('User is an admin.');
Run Code Online (Sandbox Code Playgroud)

快,对吧?


在尝试检查用户是否为管理员之前,请确保检查您的客户收到的消息是否不是DM。Message#member当消息未在公会中发送时未定义,并且尝试使用它的属性将引发错误。

使用此条件,如果消息是 DM,它将停止:

if (!message.guild) return;
Run Code Online (Sandbox Code Playgroud)