Discord Bot的特定角色命令

时间:2019-10-15 01:19:18

标签: javascript node.js discord discord.js

我正在尝试为Disc bot创建一个命令,并使其与角色相关。

我已经浏览了本网站上的其他问题,但它们都是Python而非JS;在discord.js上,他们的示例与我想做的完全不同。到目前为止,一切都可以正常工作,只是到了该部分(没有任何东西在上面或下面)

if (message.member.roles.name == "Owner") {
    return message.reply("You can use this command!")
  }
  if (message.member.roles.name != "Owner") {
    return message.reply("Sorry, an error occurred.")
  }

我希望能够看到“您可以使用此命令!

3 个答案:

答案 0 :(得分:1)

问题在于message.member.roles不会是一个单独的项目,它将是用户所拥有的角色的集合,因此您需要搜索角色以检查用户是否具有角色

您可以使用.find()函数来查看用户是否具有角色。它需要一个传递r(作为角色)的函数(在这种情况下为lambda函数),并检查r.name是否等于您的角色(在这种情况下为Owner)

if(message.member.roles.find(r => r.name === "Owner")){
  return message.reply("You can use this command!")
} else {
  return message.reply("Sorry, an error occurred.")
}

答案 1 :(得分:0)

另一种选择是,您可以通过其ID获取角色(因为它们可能不会定期更改),然后检查用户是否具有该角色。

let ownerRole = message.guild.roles.get('123456789');
let moderatorRole = message.guild.roles.get('123456789');

if(msg.member.roles.has(ownerRole.id)) {
    // the user has the role
} else {
    // the user doesn't have the role.
}

答案 2 :(得分:0)

我认为您应该这样写。它可以防止许多错误,例如“ message.member.roles.name不是函数”

这是我的代码:

client.on('message', message => {
            const roleName = message.member.roles.cache.find(r => r.name === "Owner")
            if (roleName) {
                return message.reply("You can use this command.")
            } else {
                return message.reply("Sorry, an error occured.")
            }