对漫游器命令使用不同的文件

时间:2018-07-13 19:57:11

标签: 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.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 个答案:

答案 0 :(得分:0)

我看到有两点需要修复:
1 commands.js
中的客户端 2 :主文件中的命令功能

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

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

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

我希望这可以为您提供帮助,如果您还有其他疑问,请告诉我。