所以我创建了这个名为 q!giverole
的命令,它给使用它的人一个角色,当角色被赋予时,机器人说“角色给定”但是当有人已经拥有这个角色并使用它时我想要它发送诸如“您已经拥有该角色”之类的内容,但它不会发送“您已经拥有该角色”,而是发送“给定的角色”,那么我如何制作它以便仅在有人时发送“您已经拥有该角色”已经有角色了?无论如何,这是代码:
if(message.content.startsWith("q!giverole"))
var role = message.guild.roles.cache.find(role => role.name === "example");
message.member.roles.add(role);
message.channel.send("Role given!")
if(role == true)
message.channel.send("you already have that role")
}
我也试过:
if(message.guild.roles.cache.find(role => role.name === "example"))
但在这种情况下,机器人只会发送“给定的角色”和“您已经拥有该角色”。我对 discord.js
和 javascript
非常陌生,希望您能帮助我
答案 0 :(得分:1)
您可以简单地使用 <message>.member.roles.cache.has()
if(message.content.startsWith("q!giverole")) {
const role = message.guild.roles.cache.find(role => role.name === "example");
if (!role) return message.channel.send('role doesnt exist :(');
if (message.member.roles.cache.has(role.id) return message.channel.send("You already have that role :)");
message.member.roles.add(role);
message.channel.send("Role given yeee")
}
答案 1 :(得分:0)
Role 是角色名称第一次出现的索引,因此将返回一个索引(我认为是一个数字)。您可以检查角色是否未定义作为检查角色是否存在的一种方式。 see here for more information on .find
至于只发送一个,我会使用 if else 语句:
if(message.content.startsWith("q!giverole")) {
var role = message.guild.roles.cache.find(role => role.name === "example");
if (message.member.roles.find(role => role.name === "example") !== undefined) {
message.channel.send("You already have that role")
} else if (role !== undefined) {
message.member.roles.add(role);
message.channel.send("Role given!")
} else {
message.channel.send("Role doesn't exist)
}
}
此外,在检查布尔值是否为真时,您也不需要 == true
:
if (bool) {
//runs if bool is true
} else if (!bool) {
//runs if bool is false
}
答案 2 :(得分:0)
发送 msg 'Role given!' 后将角色布尔值更改为 true
答案 3 :(得分:0)
这是一些为用户分配角色的代码:
client.on('message', msg => {
if(msg.content.startsWith('`commandname`')) {
const role = msg.guild.roles.cache.get('`id`')
//^or you can use the find method^
if(!msg.member.roles.has(role)) {
msg.member.roles.add(role).catch(err => {return console.log('An error occurred: ' + err});
msg.channel.send(`Role ${role.name} has been added`)
} else if(msg.member.roles.has(role)) {
return msg.channel.send('You already have that role!');
}
}
})
抱歉,如果有错误,我没时间测试。