我正在用discord.js创建机器人。 这是我的代码:
var Discord = require('discord.js');
const swarmConfig = require('./swarmConfig.json');
var swarmbot = new Discord.Client();
swarmbot.login('myToken');
fs.readdir('./commands/', (err, files) =>{
if(err) console.log(err);
var jsFiles = files.filter(f => f.split('.').pop() === 'js');
if(jsFiles.length <=0){
console.log('Cant find commands');
return;
}
jsFiles.forEach((f, i) =>{
let fileGet = require(`./commands/${f}`);
console.log(`${f} loaded!`);
swarmbot.commands.set(fileGet.help.name, fileGet);
});
});
swarmbot.on("message", async message =>{
if (message.author.swarmbot)
return;
var prefix = swarmConfig.prefix;
var command = messageArray[0];
var arguments = messageArray.slice(1);
var commands = swarmbot.commands.get(command.slice(prefix.length));
if(commands)
commands.run(swarmbot, message, arguments);
});
但是,如果我尝试启动它,则会出现此错误:
C:\Users\purul\Desktop\swarm-dsbot\swarm.js:25
swarmbot.commands.set(fileGet.help.name, fileGet);
^
TypeError: Cannot read property 'set' of undefined
at jsFiles.forEach (C:\Users\purul\Desktop\swarm-dsbot\swarm.js:25:23)
at Array.forEach (<anonymous>)
at fs.readdir (C:\Users\purul\Desktop\swarm-dsbot\swarm.js:22:11)
at FSReqWrap.oncomplete (fs.js:141:20)
我仍在学习JavaScript,感谢所有对此提供帮助的人。
答案 0 :(得分:2)
如果我们在Discord.js的文档中查找,则没有称为“命令”的对象。 链接:https://discord.js.org/#/docs/main/stable/search?q=commands 我猜您正在从文件中加载它们,因此您可能应该创建一个包含命令的js文件,然后将其加载到主文件中。
可能的解决方案的参考:https://stackoverflow.com/a/51333277/7363404(您还应该检查问题)