繁体   English   中英

Discord Bot 的特定角色命令

[英]Specific Role Commands for Discord Bot

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

我查看了该站点上的其他问题,但它们都在 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.")
  }

我希望能够看到“你可以使用这个命令!

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

您可以使用.find() function 查看用户是否具有角色。 It takes a function (in this case, a lambda function) that passes r (being the role), and checks if r.name is equal to your role (in this case, 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.")
}

另一种选择是,您可以通过他们的 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. }

我认为你应该这样写。 它可以防止许多错误,例如“message.member.roles.name is not a function”

这是我的代码:

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.")
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM