Команда Discord bot setRole работает только случайным образом - PullRequest
0 голосов
/ 26 января 2020

Я совсем недавно создал бота с простым алгоритмом. Предполагается, что бот приветствует вас на определенном канале, затем вы должны сообщить ему свой уровень имени (в определенной игре) и свою команду (team1 team2 или team3). Когда вы делаете это, он должен называть вас в честь вашего псевдонима и уровня и устанавливать вашу роль разногласия после вашей команды и, наконец, после того, как он делает это, он просит вас сделать скриншот вашего профиля в личку, и он отправляет снимок экрана на другой канал ( это не важная часть).

Часть именования и функция скриншота работают просто отлично и, как и предполагалось, по некоторой неизвестной причине функция setRole работает, по-видимому, случайным образом. Иногда он дает правильную роль члену, иногда нет. Вот мой алгоритм:

if (message.channel.id == welcomeid){
  var words = message.content.split(' ');
  var name = words[0];
  var number = words[1];
  var team = words[2];
  if (typeof words[0] === "undefined" || typeof words[1] === "undefined" || typeof words[2] === "undefined"){
    message.reply("error checker")
    return;
  }
  team = team.toLowerCase();

    if (name.includes('team1') == 1 || name.includes('team2') == 1 || name.includes('team3') == 1 || name.includes('team4') == 1   ){
      message.reply("Another error");
      return;
    }
    else if (name.length < 3){
      message.reply("error for name length");
      return;
    }
    else if (isNaN(number)){
      message.reply("error for checking if level is a number");
      return;
    }
    else if (number > 40 || number < 1 ) {
      message.reply("error for checking if level is above one and below 40");
      return;
    }
    else {
      if (team.includes("team1")){ //those 4 ifs are the problematic part
        message.member.setNickname(name+" | "+number)
        .then(console.log)
        .catch(console.error);
      message.member.addRole(team1id)
        .then(console.log)
        .catch(console.error);
      screenShot();
    }
    else if (team.includes("team2")){
      message.member.setNickname(name+" | "+number)
      .then(console.log)
      .catch(console.error);
      message.member.addRole(team2id)
       .then(console.log)
       .catch(console.error);
      screenShot();
    }
    else if (team.includes("team3")){
      message.member.setNickname(name+" | "+number)
      .then(console.log)
      .catch(console.error);
      message.member.addRole(team3id)
        .then(console.log)
        .catch(console.error);
      screenShot();
    }
    else if (team.includes("team4")){
      message.member.setNickname(name+" | "+number)
      .then(console.log)
      .catch(console.error);
      message.member.addRole(team4id)
        .then(console.log)
        .catch(console.error);
      screenShot();
    }
    else {
      message.reply("team error");
      return;
    }
  }
}

Конечно, мне не нужно, чтобы бот давал роли в любое удобное для него время, и я не вижу какой-либо части кода, которая противоречит "addrole" функция.

1 Ответ

1 голос
/ 27 января 2020

В вашем коде нет видимых ошибок, единственное, от чего я бы избавился, - это не лишние блоки. Потому что, если какой-либо из параметров введен неправильно, вы выходите из функции с помощью return. Проверьте, выше ли роль вашего бота, чем роли всех участников. В противном случае он не сможет изменить ник или выдать эту роль.

  if (message.channel.id == welcomeid){
    var words = message.content.split(' ');
    var name = words[0];
    var number = words[1];
    var team = words[2];
    if (typeof words[0] === "undefined" || typeof words[1] === "undefined" || typeof words[2] === "undefined"){
        return message.reply("error checker")
    }

    team = team.toLowerCase();

    if (name.includes('team1') == 1 || name.includes('team2') == 1 || name.includes('team3') == 1 || name.includes('team4') == 1   ){
      message.reply("Another error");
      return;
    } else if (name.length < 3){
      message.reply("error for name length");
      return;
    } else if (isNaN(number)){
      message.reply("error for checking if level is a number");
      return;
    } else if (number > 40 || number < 1 ) {
      message.reply("error for checking if level is above one and below 40");
      return;
    }

  if (team.includes("team1")){
        message.member.setNickname(name+" | "+number)
        .then(console.log)
        .catch(console.error);
      message.member.addRole(team1id)
        .then(console.log)
        .catch(console.error);
      screenShot();
    } else if (team.includes("team2")){
      message.member.setNickname(name+" | "+number)
          .then(console.log)
          .catch(console.error);
      message.member.addRole(team2id)
       .then(console.log)
       .catch(console.error);
      screenShot();
    } else if (team.includes("team3")){
      message.member.setNickname(name+" | "+number)
      .then(console.log)
      .catch(console.error);
      message.member.addRole(team3id)
        .then(console.log)
        .catch(console.error);
      screenShot();
    } else if (team.includes("team4")){
      message.member.setNickname(name+" | "+number)
      .then(console.log)
      .catch(console.error);
      message.member.addRole(team4id)
        .then(console.log)
        .catch(console.error);
      screenShot();
    } else {
      message.reply("team error");
      return;
    }
}
...