Cha*_*G20 3 javascript discord discord.js
我正在构建一个 Discord 机器人,我希望有一个if声明,只有当消息作者在公会中具有管理员角色时才会继续。
我试过拥有特定于角色的权限,但这意味着机器人所在的所有服务器上都必须有完全相同的名称角色。
如何检查消息作者是否具有管理员角色?(该角色具有管理员权限。)
slo*_*ful 12
由于 Managers 的实现,必须修改以下一些代码才能在最新的主要 Discord.js 版本(本次编辑时为 v12)中使用。
这里确实需要解决三个不同的问题。它们都是相关的,但每个都有不同的直接答案。
如何检查消息作者是否具有管理员角色?
发送消息的GuildMember通过Message#member属性访问,而不是Message#author返回User。请记住,成员具有角色和权限,而不是用户。
一个集合成员的角色可以被检索GuildMember#roles。
您可以通过两种主要方式搜索角色:
Map#has()Collection#find()所以,把这一切联系在一起:
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)