【问题标题】:Discord bot setRole command works only randomlyDiscord bot setRole 命令只能随机工作
【发布时间】:2020-05-11 19:06:22
【问题描述】:

我最近用一个简单的算法制作了一个机器人。机器人应该在某个频道上欢迎您,然后您必须告诉他您的姓名级别(在某个游戏中)和您的团队(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”功能相矛盾的代码部分。

【问题讨论】:

    标签: node.js bots discord discord.js


    【解决方案1】:

    您的代码中没有可见的错误,我唯一要摆脱的不是不必要的 else 块。因为如果任何参数输入不正确,您将使用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;
        }
    }
    

    【讨论】:

    • 机器人有一个特定的等级,确实高于所有其他成员等级,所以我猜不应该是这种情况,否则它根本不会给出等级/昵称。然后,我将删除“其他”块,以防万一,如果问题仍然存在,我会通知您。谢谢。
    • 嗯,我做了几次测试,它甚至一次都没有给我一个角色,这是一个好兆头,因为它现在应该不止一次失败。我只会注意到它曾经没有给用户一个昵称,但我可以认为这是一个视觉错误,我认为它在过去发生过一次。我真的看不出“其他”语句对这一切有什么影响,但是嘿!只要它有效... XD
    猜你喜欢
    • 2019-04-19
    • 2021-11-14
    • 2021-01-06
    • 2021-01-31
    • 2020-11-03
    • 2020-09-24
    • 1970-01-01
    • 2019-07-31
    • 2018-03-04
    相关资源
    最近更新 更多