我正在尝试为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.")
}
我希望能够看到“您可以使用此命令!
答案 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.")
}