我正在尝试使用 discord.js 和 repl.it 创建一个 discord bot,但是对于 ping 命令,我不断收到此错误消息,提示“无法读取未定义的属性‘执行’”。我看过其他有同样问题的人并尝试过他们的解决方案,但没有一个奏效。这是我的 index.js 文件的代码:
const Discord = require('discord.js');
const client = new Discord.Client();
const fs = require('fs');
client.commands = new Discord.Collection();
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
for (const file of commandFiles) {
const command = require(`./commands/${file}`);
client.commands.set(command.name, command);
}
client.on('ready', () => {
console.log(`Bot is ready.`)
client.user.setActivity("b!help", {type: "LISTENING"});
});
client.on('message', msg => {
if (!msg.content.startsWith(process.env.PREFIX) || msg.author.bot) return;
const args = msg.content.slice(process.env.PREFIX.length).trim().split(/ +/);
const command = args.shift().toLowerCase();
if (command == 'ping') {
client.commands.get('ping').execute(client, msg, args);
} else if (command == 'avatar') {
client.commands.get('avatar').execute(client, msg, args);
}
// do the same for the rest of the commands...
});
client.login(process.env.TOKEN)
这是我的 ping.js 文件的代码:
const client = require('../index.js');
module.exports = {
name: 'ping',
description: 'Ping pong',
execute(client, msg, args) {
msg.channel.send(`?Latency is ${Date.now() - msg.createdTimestamp}ms. API Latency is ${Math.round(client.ws.ping)}ms`);
},
};
感谢任何帮助!我对编码和一切都还不太熟悉 o.o
答案 0 :(得分:0)
非常简单的修复
module.exports = {
name: 'ping',
description: 'Ping pong',
execute: (client, msg, args) { // the colons are very important in objects
msg.channel.send(`?Latency is ${Date.now() - msg.createdTimestamp}ms. API Latency is ${Math.round(client.ws.ping)}ms`);
},
};
看到你正在导出一个对象是吗? {}
,一个 javascript 对象只是一个 name: value
对,你的代码的错误是你忘记了 :
和 execute
之间的 (client, msg, args)
函数参数。< /p>
此外,您不能使用从 index.js 导出的模块,因为它会引发循环依赖错误,您已经在 index.js 中将 client 作为函数参数传入,因此您真的不需要在命令文件中再次定义 client
如果您不明白什么是命令处理,请务必阅读 Discord.js command handlers ,它非常简单:)
希望对您有所帮助,祝您好运