如何修复错误“无法读取未定义的属性‘执行’”?

时间:2021-05-29 23:14:08

标签: node.js error-handling discord.js repl.it

我正在尝试使用 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

1 个答案:

答案 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 ,它非常简单:)

希望对您有所帮助,祝您好运