我如何做到这一点,以便我的机器人在不提供角色时不发送“指定的角色”?

时间:2021-05-29 18:35:16

标签: javascript discord.js

所以我创建了这个名为 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.jsjavascript 非常陌生,希望您能帮助我

4 个答案:

答案 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!');
}
}
})

抱歉,如果有错误,我没时间测试。