首页 > 解决方案 > 机器人如何将两个或多个参数作为命令接收?

问题描述

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

    }
}

我有这段代码,但是当我运行命令时,它什么也不做(run: async...我删除了它以保持简短。)当我这样做!!help me!!help!!me它什么也不做。此消息下方的代码将是我的message.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);
}

Discord.JS 版本:12.2.0

标签: javascriptnode.jsdiscord.js

解决方案


那是因为你在删除第一个参数时删除了args.shift(). 不要那样做。它将命令名称仅用作“帮助”,将“我”用作args[0],这还不错,但不适用于您要执行的操作。

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

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

您不应该将多个单词作为命令名称。实现它helpmehelp或者也许help-me,否则正确处理用户输入将变得不必要地困难。这就是它没有做任何事情的原因,因为命令名称是,help me但它将命令解释为help.


推荐阅读