繁体   English   中英

我怎么做才能让我的机器人在没有给出角色时不发送“角色给定”?

[英]How do I make it so my bot doesn't send “role given” when it doesn't give the role?

所以我做了一个名为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很陌生,所以希望你能帮助我

您可以简单地使用<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")
}

角色是角色名称第一次出现的索引,因此将返回一个索引(我认为是一个数字)。 您可以检查角色是否未定义作为检查角色是否存在的一种方式。 有关更多信息,请参见此处。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)
    }
}
    

在检查 boolean 值是否为真时,您也不需要== true true:

if (bool) {
    //runs if bool is true
} else if (!bool) {
    //runs if bool is false
}

在发送 msg 'Role given!' 后将角色 boolean 更改为 true!

下面是一些为用户赋予角色的代码:

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

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

暂无
暂无

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

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