我希望通过将所有较长的内容放入另一个文件中,以保持代码的外观整洁和易于理解。我有主文件(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);
}
}
我希望它发送嵌入内容,但是当我输入命令时,什么也没有发生,也没有错误输出。
答案 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;
我希望这可以为您提供帮助,如果您还有其他疑问,请告诉我。