当前位置: 首页 > 知识库问答 >
问题:

Discord bot setRole命令只能随机工作

荀裕
2023-03-14

我最近用一个简单的算法制作了一个机器人。机器人应该在某个频道欢迎你,然后你必须告诉他你的名字级别(在某个游戏中)和你的团队(团队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;
    }
  }
}

当然,我不需要机器人在任何时候给角色,我也看不到代码中与“角色”函数相矛盾的任何部分。

共有1个答案

权烨磊
2023-03-14

您的代码中没有可见的错误,我唯一想摆脱的是不必要的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;
    }
}
 类似资料:
  • 我在bitbucket上有一个私有的存储库,其中有一些python代码,是我用git从命令行提取的。然后我将该项目导入Pycharm 2016.3。从命令行我可以推拉,但Pycharm中的git似乎不起作用。我会遇到以下错误:我正在使用ssh身份验证,并且我已将我的.ssh/config设置为使用正确的私钥解析Bitbucket.org。我还将Pycharm配置为使用本机ssh,而不是内置ssh。

  • 但是,一旦我们更改命令(更改位置fontfile=with text= 我得到以下错误 [Parsed_drawtext_0@02d88a80]无法加载字体“C”:无法找到匹配的字体

  • 我使用NetBeans8.2创建了一个非常简单的Hello World程序。但是,当我尝试在Linux中使用命令行执行jar文件时 如果你需要更多的信息,请告诉我。 谢了。

  • 我已经下载了jdk 1.8.0\u 131 当我打开命令提示符并编写以下命令-java-version时,它会给出输出 但是当我编写以下命令时:javac-version它会给我输出 我已经编辑了系统变量路径-C:\Progra~1\Java\jdk1.8.0_131\bin; 当我执行以下命令时:"C:\Program Files\Java\jdk1.8.0_131\bin\javac"-ver

  • 说明 RandomUtil主要针对JDK中Random对象做封装,严格来说,Java产生的随机数都是伪随机数,因此Hutool封装后产生的随机结果也是伪随机结果。不过这种随机结果对于大多数情况已经够用。 使用 RandomUtil.randomInt 获得指定范围内的随机数 RandomUtil.randomBytes 随机bytes RandomUtil.randomEle 随机获得列表中的元素

  • 我在一个非常简单的GUI中有一个JTextPane,我将它用作学习Java的游戏的输出控制台,我(尝试)将它与Windows类中的append方法一起使用,从另一个类(程序本身)或从command reader类调用它。理论上,它应该输出我输入的命令,在下几行中,它的输出来自所述程序。 另外,这里有一些示例输出 在调试过程中,我看到为Swing/AWT创建了一个线程,但我根本不了解线程,所以我只希