【问题标题】:Don't know how to change to lowercase in this scenario在这种情况下不知道如何更改为小写
【发布时间】:2021-05-02 03:48:03
【问题描述】:

我正在尝试使用 discord.js awaitMessages 方法,但它似乎不适用于大写字母,因为我可能的答案 (triviacharacterslist.js) 都是小写字母。我试图转换它(在代码中),但它似乎不起作用。

triviachar.js:

const iKF = Characters.KiritoVariants;
        const possibleAnswers = [iKF.kirito0, iKF.kirito1, iKF.kirito2, iKF.kirito3, iKF.kirito4, iKF.kirito5, iKF.kirito6, iKF.kirito7, iKF.kirito8];
        const triviaKiritoEmbed = new MessageEmbed()
            .setColor('#008fff')
            .setTitle(guessCharacterString)
            .setImage(Characters.CharacterImgs.kiritoimg)
    
        msg.channel.send(triviaKiritoEmbed)

        const filterK = m => possibleAnswers.some(answer => m.content.includes(answer));
        msg.channel.awaitMessages(filterK, { max: 1, time: 15000, errors: ['time'] })
        .then(collected => {switch(collected.first().content.toLowerCase()){
            case Characters.KiritoVariants.kirito0:
                msg.channel.send(fivePoint);
                break;
            case Characters.KiritoVariants.kirito3:
                msg.channel.send(fivePoint);
                break;
            case Characters.KiritoVariants.kirito6:
                msg.channel.send(fivePoint);
                break;
            case Characters.KiritoVariants.kirito1:
                msg.channel.send(tenPoint);
                break;
            case Characters.KiritoVariants.kirito2:
                msg.channel.send(tenPoint);
                break;
            case Characters.KiritoVariants.kirito4:
                msg.channel.send(tenPoint);
                break;
            case Characters.KiritoVariants.kirito5:
                msg.channel.send(tenPoint);
                break;
            case Characters.KiritoVariants.kirito7:
                msg.channel.send(tenPoint);
                break;
            case Characters.KiritoVariants.kirito8:
                msg.channel.send(tenPoint);
                break;
        }})
        .catch(collected => msg.channel.send('too bad u took too long ya 3am'));
    }

triviacharacterslist.js:

//character names ---------------------------------------------------------------------------------------------------------------

const KiritoVariants = {
    kirito0: 'kirito',
    kirito1: 'kirito sao',
    kirito2: 'kirito sword art online',
    kirito3: 'kazuto',
    kirito4: 'kazuto sao',
    kirito5: 'kazuto sword art online',
    kirito6: 'kazuto kirigaya',
    kirito7: 'kazuto kirigaya sao',
    kirito8: 'kazuto kirigaya sword art online'
};

【问题讨论】:

    标签: javascript node.js discord.js commando


    【解决方案1】:

    includes() 方法区分大小写:

    const str1 = 'kirito sword art online'
    const str2 = 'Kirito sword art online'
    
    console.log(str1.includes(str2))

    您可以在过滤器中使用m.content.toLowerCase() 将用户的答案转换为小写:

    const filterK = m => possibleAnswers.some(answer => m.content.toLowerCase().includes(answer));
    

    您还可以简化您的 switch 语句并使用 Object.values 来获取 possibleAnswers 中的值数组:

    const possibleAnswers = Object.values(Characters.KiritoVariants);
    const triviaKiritoEmbed = new MessageEmbed()
      .setColor('#008fff')
      .setTitle(guessCharacterString)
      .setImage(Characters.CharacterImgs.kiritoimg);
    
    msg.channel.send(triviaKiritoEmbed);
    
    const filterK = (m) =>
      possibleAnswers.some((answer) => m.content.toLowerCase().includes(answer));
    
    msg.channel
      .awaitMessages(filterK, { max: 1, time: 15000, errors: ['time'] })
      .then((collected) => {
        switch (collected.first().content.toLowerCase()) {
          case Characters.KiritoVariants.kirito0:
          case Characters.KiritoVariants.kirito3:
          case Characters.KiritoVariants.kirito6:
            msg.channel.send(fivePoint);
            break;
          case Characters.KiritoVariants.kirito1:
          case Characters.KiritoVariants.kirito2:
          case Characters.KiritoVariants.kirito4:
          case Characters.KiritoVariants.kirito5:
          case Characters.KiritoVariants.kirito7:
          case Characters.KiritoVariants.kirito8:
            msg.channel.send(tenPoint);
            break;
        }
      })
      .catch((collected) => msg.channel.send('too bad u took too long ya 3am'));
    

    【讨论】:

    • 我已经尝试过了,但不幸的是它没有用,不过感谢您的回答。
    【解决方案2】:

    我认为@Zsolt 的想法是正确的,但执行起来有点错误。由于您的所有答案都已经是小写字母,因此在答案字符串上调用 .toLowerCase() 不会有太大作用。相反,您需要在字符串内容上调用.toLowerCase()。请看下面的例子:

    const filterK = m => possibleAnswers.some(answer => m.content.toLowerCase().includes(answer));
    

    【讨论】:

    • 我试过了,但发生了这种情况imgur.com/SEdJeO8imgur.com/ogjLjXp
    • 在您链接的第二张图片中,我没有看到机器人响应超时消息,所以我的猜测是 awaitMessage 确实收集带有大写字母的消息,但 switch案例未正确触发。你的代码中还有switch (collected.first().content.toLowerCase()) 吗?过滤器和开关盒都需要toLowerCase
    • 哦,对不起,我删除了switch 机箱上的那个,我把它放回去了,现在它可以工作了,谢谢!
    • 糟糕,新手错误。感谢您指出。有我的支持;)
    猜你喜欢
    • 2015-11-10
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多