r未定义,获取用户拥有的所有角色

时间:2018-08-30 01:40:59

标签: javascript node.js bots roles discord.js

当用户发布命令时,我试图使他们能够随意在角色之间进行交换。角色只是我要为其制造服务器的颜色。存在问题的部分是“ var args”部分之前的第一部分。基本上,找到用户当前所处的所有角色并在添加新角色之前将其删除的部分就是问题所在。

我让机器人开始添加角色。然后,我知道我需要删除所有旧角色,以便新颜色(层次结构中可能较低的颜色)可能不会显示。

以下代码的错误是“(node:181764)UnhandledPromiseRejectionWarning:ReferenceError:未定义r。”我直接从anidiotsguide上摘下了这一部分。我正在按原样学习js。认为这个小项目很简单,可以使我对discord.js有所了解。抱歉,如果我看起来像个新手。我是。大声笑提前感谢帮助。

bot.on('message', async (message) => {

  if(message.content.toLowerCase().startsWith("!colorme"))
  if(message.member.roles.some(r => ["blue", "red", "yellow"].includes(r.name)))
  await(message.member.removeRole(r.name));

  {
    var args = message.content.toLowerCase().split(" ");
    console.log(args);
    if(args[1] === "blue")
  {
      var role = message.guild.roles.find('name', 'blue');
      console.log("Role found!");
      message.member.addRole(role.id);
      message.channel.send('Role successfully added!');
  }
  else if(args[1] === 'red')
  {
    addUserRole('red', message);
    message.channel.send('Role successfully added!');
}
else if(args[1] === 'yellow')
  {
    addUserRole('yellow', message);
    message.channel.send('Role successfully added!');

    }
  };
});

function addUserRole(roleName, message)
{
  var role = message.guild.roles.find('name', roleName);
  message.member.addRole(role.id);
  return;
}

1 个答案:

答案 0 :(得分:0)

您未正确使用.some方法。看看here

我使用.array作为公会成员的角色集合,它与discord.js的.some方法相同(证明:https://i.imgur.com/5aXu1wj.png

尝试以下代码:

bot.on('message', async (message) => {

    if(message.content.toLowerCase().startsWith("!colorme"))
    message.member.roles.array().some(r => {
        if (["blue", "red", "yellow"].includes(r.name)) {
            message.member.removeRole(r);
        }
    })

    {
      var args = message.content.toLowerCase().split(" ");
      console.log(args);
      if(args[1] === "blue")
    {
        var role = message.guild.roles.find('name', 'blue');
        console.log("Role found!");
        message.member.addRole(role.id);
        message.channel.send('Role successfully added!');
    }
    else if(args[1] === 'red')
    {
      addUserRole('red', message);
      message.channel.send('Role successfully added!');
  }
  else if(args[1] === 'yellow')
    {
      addUserRole('yel', message);
      message.channel.send('Role successfully added!');

      }
    };
  });

  function addUserRole(roleName, message)
  {
    var role = message.guild.roles.find('name', roleName);
    message.member.addRole(role.id);
    return;