【问题标题】:How can I add multiple parameters to message.content?如何向 message.content 添加多个参数?
【发布时间】:2018-08-01 02:57:59
【问题描述】:

在我的代码方面需要一些帮助。我今天开始使用 Node.JS 和 Discord.JS 库编写我的第一个 Discord 机器人,很快就会使用其他程序。我目前正在使用 YouTube 视频来指导我完成 Node.JS。这是我的问题。

这是我当前的代码。

const Discord = require('discord.js');
const bot = new Discord.Client();

bot.on('message', (message) => {

    if(message.content == 'ping') {
        message.reply('pong');
    }

    if(message.content == 'xd') {
        message.reply('smh');
    }

});

此代码运行良好。如果你转到第二个message.content,它里面写着'xd'。当我在我的 Discord 服务器中写入单词 xd 时,机器人将返回 smh。这样做的问题是机器人只会在大写与xd 完全相同时返回smh,但我希望它适用于所有大写。

像这样。

    if(message.content == 'xd', 'xD', 'XD', 'Xd',) {
        message.reply('pong');
}

显然,上面的代码不起作用,但是有什么简单的方法可以做到这一点?

干杯。

【问题讨论】:

    标签: node.js cmd discord discord.js


    【解决方案1】:

    在我回答这个问题之前,请确保在共享您的源代码时隐藏您的机器人令牌,因为如果它具有正确的权限,人们可以使用您的机器人做一些有害的事情。

    好的,答案如下:

    在一开始,声明一个名为 msg 的变量或存储message.content.toLowerCase(); 的东西。因此,无论人们如何键入它,它始终是小写的。

    请注意,仅当 message.content 为“xd”时它才会起作用,因此如果有人键入“xD something”,这将不起作用。

    代码中的其他内容:

    如果你想检查一个人是否使用某个前缀来表示命令,你可以检查message.content.startsWith("prefix"); - 这将返回真或假。

    将消息的内容分解为单独的变量总是好的,这样您就可以轻松地对消息执行您想要执行的操作,例如,命令和 args 变量 (先将 message.content 转换为数组).

    【讨论】:

    • 感谢您指出我的令牌在那里。它已被删除并重置。 +1
    【解决方案2】:

    您可以在message.content 上调用.toLowerCase() 将其转换为全部小写:

    if (message.content.toLowerCase() == 'xd') {
      message.reply('pong');
    }
    

    这样消息的大小写实际上被忽略了。

    【讨论】:

      【解决方案3】:

      您需要使用 toLowerCase() 方法将 message.content 小写,然后将其与使用 === 运算符的“xd 字符串”进行比较

      例如:

      if(message.content && message.content.toLowerCase() === 'xd') {
          message.reply("smh");
      }
      

      【讨论】:

        【解决方案4】:

        除了toLowerCase() 函数之外,还有其他两种主要方法可以允许多个参数。

        第一种方法是使用|| 运算符或or 运算符。此方法允许您检查完全不同的单词,同时能够获得相同的结果。例如:

        if (message.content == "xd" || message.content == "xD" || message.content == "XD") { 
             message.reply("Why would you do that");
        }
        

        第二种方法是使用正则表达式,如正则表达式。正则表达式使用.test() 方法检查字符串中的单词。例如:

        let myRegex = /xd/i;
        if (myRegex.test(message.content)) { //We are assuming that message.content = "XD"
           message.reply("smh");
        }
        

        此方法有效,因为正则表达式检查单词是否等于分配给它的正则表达式。 /xd/ 后面的 i 表示它不关心大小写,因此这是一种更短的方法来检查某些单词而不关心字母大小写。

        【讨论】:

          【解决方案5】:

          在内容上使用 toLowerCase 然后测试它

          if(message.content.toLowerCase() === 'xd') {
             message.reply('pong');
          }

          【讨论】:

            【解决方案6】:

            更好的方法是使用别名...

            //defined early on.
            let commands = [
                {
                    aliases:["xd","lol",":smile:"],
                    run:function(msg){
                        msg.send(`pong`);
                    }
                },
                {
                    aliases:[":("],
                    run:function(msg){
                        msg.send(`why the long face?`);
                    }
                }
            ]
            //later
            client.on(`message`,function(msg){
                for(let i =0;i<commands;i++){
                    if(commands[i].includes(msg.content.toLowerCase())){
                        commands[i].run();
                    }
                }
            });
            

            string.toLowerCase 当您希望多个事物运行同一命令时,上述回答并不总是有效。
            上面的代码允许每个命令的别名

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-09-12
              • 2011-04-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多