【问题标题】:How do I make it so my bot doesn't send "role given" when it doesn't give the role?我怎么做才能让我的机器人在没有给出角色时不发送“角色给定”?
【发布时间】:2021-05-31 20:55:51
【问题描述】:

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

【问题讨论】:

  • 试试这个if(role === true) ?

标签: javascript discord.js


【解决方案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")
}

【讨论】:

  • @TomTheItalianBBQ 我明白了:D
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    在发送消息“Role given!”后将角色 boolean 更改为 true!

    【讨论】:

    • 正如我所说,我对 js/discord,js 很陌生,所以,我该怎么做呢?
    【解决方案4】:

    这里有一些代码给用户一个角色:

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-19
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 2019-11-10
      • 1970-01-01
      • 2021-08-13
      • 2020-11-21
      相关资源
      最近更新 更多