r не определено, получить все роли, которые есть у пользователя - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь сделать, когда пользователь отправляет команду, они могут менять роли по желанию. Роли - просто цвета для сервера, для которого я делаю это. Часть, которая имеет проблемы, является первой частью перед частью "var args". По сути, проблема заключается в том, что часть, которая находит все роли, в которых в данный момент находится пользователь, и удаляет их, прежде чем перейти к добавлению новой роли.

Я заставил бота работать над добавлением ролей. Тогда я понял, что мне нужно удалить все старые роли, чтобы новый цвет (который может быть ниже в иерархии) мог не отображаться.

Ошибка в коде ниже: «(узел: 181764) UnhandledPromiseRejectionWarning: ReferenceError: r не определено». Я взял эту часть сразу же из anidiotsguide. Я учу JS как есть. Я подумал, что этот небольшой проект будет простым, чтобы дать мне небольшой опыт работы с discord.js. Извиняюсь, если я выгляжу полным новичком. Я. lol Заранее признателен за помощь.

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 голосов
/ 30 августа 2018

Вы использовали метод .some не правильно. Взгляните на это здесь .

Я использовал .array для вашей коллекции ролей члена гильдии, он такой же, как и некоторый метод discord.js (доказательство: 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;
...