机器人如何将两个或多个参数作为命令?

时间:2020-07-01 06:11:13

标签: javascript node.js discord.js

module.exports = {
    config: {
        name: "help me",
        noalias: ""
    },
    run: async (bot, message, args) => {

    }
}

我有这段代码,但是当我运行命令时,它什么也没做(run: async...里面的代码已删除,以简化代码。)当我执行!!help me时,{{ 1}}或!!help不会执行任何操作。此消息下方的代码将是我的!!me文件。\

message.js

Discord.JS版本:const { PREFIX } = require('../../config.json'); module.exports = async (bot, message) => { let args = message.content.slice(PREFIX.length).trim().split(/ +/g); let cmd = args.shift().toLowerCase(); if (!message.content.startsWith(PREFIX)) return; var commandfile = bot.commands.get(cmd) || bot.commands.get(bot.aliases.get(cmd)) if (commandfile) commandfile.run(bot, message, args); }

2 个答案:

答案 0 :(得分:1)

那是因为您在执行args.shift()时将删除第一个参数。不要那样做它以命令名称作为“帮助”,以“我”作为args[0],这虽然不错,但是与您要执行的操作无关。

相反,让它接受索引位置0处的参数并将其用作命令名称:

let args = message.content.substring(PREFIX.length).split(/ +/g);
let cmd = args[0];

您不应使用多个单词作为命令名称。将其设置为helpmehelp或也许help-me,否则将不必要地使正确处理用户输入变得困难。这就是为什么它不执行任何操作的原因,因为命令名称为help me,但它仅将命令解释为help

答案 1 :(得分:-1)

看看您的代码,我认为您最好像github / telebot一样使用正则表达式来匹配命令。这是一个简短的示例,看起来像这样:

const watchRegExp = /^\/watch ([a-z0-9]{64}) ([0-9]*) ?(.*)$/;

// let's say you sent: /watch 81a40da1f3e110017a6982e9e354577926ac047f57a954f70f365e8f5ae65ac6 5 cocacola

bot.on(watchRegExp, (msg, props) => {
  const txid = props.match[1]; // '81a40da1f3e110017a6982e9e354577926ac047f57a954f70f365e8f5ae65ac6'
  const threshold = props.match[2]; // 5
  const label = props.match[3]; // 'cocacola'

// do your stuff here

}

希望这会有所帮助,
干杯