javascript - 如何使用 Discord.js 检查消息作者是否具有管理员角色?
问题描述
我正在构建一个 Discord 机器人,我想要一个if
只有在消息作者在公会中具有管理员角色时才会进行的声明。
我尝试过拥有特定于角色的权限,但这意味着机器人所在的所有服务器上都必须有完全相同的名称角色。
如何检查消息作者是否具有管理员角色?(该角色具有管理员权限。)
解决方案
由于管理器的实现,必须修改以下某些代码以在最新的主要 Discord.js 版本(本次编辑时为 v12)中使用。
这里确实需要解决三个不同的问题。它们都是相关的,但每个都有不同的直接答案。
如何检查邮件作者是否具有管理员角色?
发送消息的GuildMember是通过
Message#member
属性访问的,而不是Message#author
返回User。请记住,成员具有角色和权限,而不是用户。可以使用 检索成员角色的集合
GuildMember#roles
。您可以通过两种主要方式搜索角色:
- ID:
Map#has()
- 财产:
Collection#find()
- ID:
所以,把这一切联系在一起:
if (message.member.roles.has'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#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;
推荐阅读
- c# - 当向上不是真正向上时线性插值向上向量?
- python - 无论我使用什么浏览器,Webdriver 都无法访问网页
- html - 循环遍历列表以将变量存储在字典中运行错误
- c# - JsonPath 中的许多/连续 && 运算符不起作用
- typescript - 显式字符串别名类型
- java - OpenGL ES - 打开概览并返回后,帧缓冲区不绘制任何内容
- graphql - 在 AWS AppSync 中进行的单元测试 GraphQL 架构/查询?
- flutter - Flutter 小部件焦点问题
- azure - 在 Azure 容器实例中启动已部署和终止的容器
- vba - 需要帮助结合 2 个 VBA 代码