Node.js Discord bot setRole命令只能随机工作

Node.js Discord bot setRole命令只能随机工作,node.js,bots,discord,discord.js,Node.js,Bots,Discord,Discord.js,我最近用一个简单的算法制作了一个机器人。机器人应该在某个频道欢迎你,然后你必须告诉他你的名字级别(在某个游戏中)和你的团队(团队1、团队2或团队3)。当你这样做时,他应该以你的昵称和级别命名你,并以你的团队设置你的不和谐角色。最后,在他这样做之后,他会要求你在pm上提供你个人资料的截图,并在另一个频道发送截图(这不是重要部分) 命名部分和屏幕截图功能工作正常,但出于未知原因,setRole功能似乎是随机工作的。它有时赋予成员正确的角色,有时则没有。这是我的算法: if (message.chan

我最近用一个简单的算法制作了一个机器人。机器人应该在某个频道欢迎你,然后你必须告诉他你的名字级别(在某个游戏中)和你的团队(团队1、团队2或团队3)。当你这样做时,他应该以你的昵称和级别命名你,并以你的团队设置你的不和谐角色。最后,在他这样做之后,他会要求你在pm上提供你个人资料的截图,并在另一个频道发送截图(这不是重要部分)

命名部分和屏幕截图功能工作正常,但出于未知原因,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;
    }
  }
}
if(message.channel.id==welcomeid){
var words=message.content.split(“”);
变量名称=单词[0];
变量编号=字[1];
var团队=单词[2];
如果(单词类型[0]=“未定义”| |单词类型[1]=“未定义”| |单词类型[2]=“未定义”){
message.reply(“错误检查程序”)
返回;
}
team=team.toLowerCase();
如果(name.includes('team1')==1 | | name.includes('team2')==1 | | name.includes('team3')==1 | | name.includes('team4')==1){
回复(“另一个错误”);
返回;
}
else if(name.length<3){
message.reply(“名称长度错误”);
返回;
}
else if(isNaN(编号)){
message.reply(“检查级别是否为数字时出错”);
返回;
}
否则如果(编号>40 | |编号<1){
message.reply(“检查级别是否高于1且低于40时出错”);
返回;
}
否则{
if(team.includes(“team1”){//这4个if是有问题的部分
message.member.set昵称(名称+“|”+编号)
.then(console.log)
.catch(控制台错误);
message.member.addRole(team1id)
.then(console.log)
.catch(控制台错误);
截图();
}
其他如果(团队包括(“团队2”)){
message.member.set昵称(名称+“|”+编号)
.then(console.log)
.catch(控制台错误);
message.member.addRole(team2id)
.then(console.log)
.catch(控制台错误);
截图();
}
其他如果(团队包括(“团队3”)){
message.member.set昵称(名称+“|”+编号)
.then(console.log)
.catch(控制台错误);
message.member.addRole(team3id)
.then(console.log)
.catch(控制台错误);
截图();
}
其他如果(团队包括(“团队4”)){
message.member.set昵称(名称+“|”+编号)
.then(console.log)
.catch(控制台错误);
message.member.addRole(team4id)
.then(console.log)
.catch(控制台错误);
截图();
}
否则{
消息。回复(“团队错误”);
返回;
}
}
}

当然,我不需要机器人在任何时候提供角色,我也看不到任何与“addrole”函数冲突的代码部分。

您的代码中没有可见的错误,我唯一想摆脱的是没有不必要的其他块。因为如果输入的任何参数不正确,则将使用
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;
    }
}
if(message.channel.id==welcomeid){
var words=message.content.split(“”);
变量名称=单词[0];
变量编号=字[1];
var团队=单词[2];
如果(单词类型[0]=“未定义”| |单词类型[1]=“未定义”| |单词类型[2]=“未定义”){
返回消息。回复(“错误检查程序”)
}
team=team.toLowerCase();
如果(name.includes('team1')==1 | | name.includes('team2')==1 | | name.includes('team3')==1 | | name.includes('team4')==1){
回复(“另一个错误”);
返回;
}else if(name.length<3){
message.reply(“名称长度错误”);
返回;
}else if(isNaN(编号)){
message.reply(“检查级别是否为数字时出错”);
返回;
}否则如果(编号>40 | |编号<1){
message.reply(“检查级别是否高于1且低于40时出错”);
返回;
}
if(团队包括(“团队1”)){
message.member.set昵称(名称+“|”+编号)
.then(console.log)
.catch(控制台错误);
message.member.addRole(team1id)
.then(console.log)
.catch(控制台错误);
截图();
}其他如果(团队包括(“团队2”)){
message.member.set昵称(名称+“|”+编号)
.then(console.log)
.catch(控制台错误);
message.member.addRole(team2id)
.then(console.log)
.catch(控制台错误);
截图();
}其他如果(团队包括(“团队3”)){
message.member.set昵称(name+“|”+编号)
.then(console.log)
.catch(控制台错误);
message.member.addRole(team3id)
.then(console.log)
.catch(控制台错误);
截图();
}其他如果(团队包括(“团队4”)){
message.member.set昵称(名称+“|”+编号)
.then(console.log)
.catch(控制台错误);
message.member.addRole(team4id)
.then(console.log)
.catch(控制台错误);
截图();
}否则{
消息。回复(“团队错误”);
返回;
}
}

机器人有一个特定的等级,它确实高于所有其他成员等级,因此我猜不应该是这样,否则它根本不会给出等级/昵称。我会删除“else”块,以防万一,如果问题仍然存在,我会通知您。谢谢。好吧,我做了几次测试,它甚至一次都没有给我一个角色,这是一个好迹象,因为它现在应该已经失败不止一次了。我只注意到它一次没有给用户起绰号,但我可以认为它是一个视觉bug,我认为它发生了。