Javascript 对bot命令使用不同的文件

Javascript 对bot命令使用不同的文件,javascript,node.js,discord.js,Javascript,Node.js,Discord.js,我希望通过将所有较长的内容放在另一个文件中来保持代码的整洁和易于理解。我有我的主文件index.js: const discord = require('discord.js'); require('dotenv').config() const token = process.env.botToken; const prefix = "s!"; const cmds = require("./commands.js"); var client = new discord.Cl

我希望通过将所有较长的内容放在另一个文件中来保持代码的整洁和易于理解。我有我的主文件index.js:

 const discord = require('discord.js');
 require('dotenv').config()

 const token = process.env.botToken;
 const prefix = "s!";

 const cmds = require("./commands.js");

 var client = new discord.Client();

 client.on('ready', function(message) {});

 client.on('message', function(message) {
    if(message.author.equals(client.user) || !message.content.startsWith(prefix)) return;

    var args = message.content.substring(prefix.length).split(" ");

    switch (args[0].toLowerCase()) {
        case "help":
            cmds.help;
            break;
    }
 });

 client.login(token)
和我的其他文件夹commands.js:

const discord = require('discord.js');
var client = new discord.Client();

    module.exports = {
        help: function(message) {
            var embed = new discord.RichEmbed()
                .addField("spyBot Commands", "If you get issues, dont be afraid to join us: http://discord.gg/3k6zGNF");
            message.channel.send(embed);
        }
    }

我希望它发送嵌入,但当我输入命令时,不会发生任何事情,也不会打印错误。

我看到两个主要问题需要解决: 1:commands.js中的客户端 2:主文件中的命令功能

1-在commands.js中,您创建了一个新客户端。如果您只有这个命令,它不会导致任何问题,因为您的代码中没有使用客户机,但当您需要它时,它将无法工作,因为它必须与主文件中的相同。您有两种可能的解决方案:将客户机设置为全局或需要主模块。如果您的bot不必在公共包中发布,则可以保存global.client=client;,然后在其他每个文件中作为客户端访问它。另一种方法是从主模块导出客户端。exports={client};然后需要commands.js var{client}=require./index.js;中的主文件

2-在commands.js中,您正在导出帮助函数,因此当您调用它index.js时,必须使用括号并将消息作为参数传递。试着这样做:

//in the switch statement
case "help":
  cmds.help(message);
  break;

我希望这能对您有所帮助,如果您有任何进一步的问题,请告诉我。

并且我个人推荐discord.js-commando用于组织代码。