类型错误:无法读取未定义的不和谐机器人 js 的属性"执行"



我的问题是:编译时,我收到错误,指出未定义属性"execute"。我正在尝试做的是打开另一个文件夹中的文件并将其停靠在 if 中,我受到命令处理文档的指导,我不知道错误是否在另一个称为"ping.js"的文件中。我最近开始了,所以我不完全理解它。 主代码如下:

const Discord = require('discord.js');
const { token, default_prefix } = require('./conf.json');
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.once('ready', () => {
console.log('Ready!');
});
client.on('message', async message => {
if (!message.content.startsWith(default_prefix) || message.author.bot) return;
const args = message.content.slice(default_prefix.length).split(/ +/);
const command = args.shift().toLowerCase();
if (command === 'ping') {
client.commands.get('ping').execute(message, args);
}
});
client.login(token);

而"ping.js"代码是:

const Discord = require('discord.js');
module.exports = {
description: "Get the latency of the bot.",
usage: {},
examples: {},
aliases: [ "pong", "latency", "uptime" ],
permissionRequired: 0,
checkArgs: (args) => !args.length
}
module.exports.run = async function (client, message, args, config, gdb, prefix, permissionLevel, db) {
let botMsg = await message.channel.send("Pinging")
botMsg.edit({ 
embed: {
name: "ping",
title: "📶 Ping",
color: 0x2ed32e,
description: [
"**Server**: `" + (message.createdAt - message.createdAt) + "ms`",
"**API**: `" + Math.round(client.ws.ping) + "ms`",
"**Uptime**: `" + msToTime(client.uptime) + "`"
].join("n"),
footer: { text: "Requested by " + message.author.tag, icon_url: message.author.displayAvatarURL }
}
})
}
function msToTime(ms) {...
}

它可以工作,但是如果我将其直接添加到主代码中,但我不希望那样。如果您有任何想法或知道解决方案,我将不胜感激。

它说execute is undefined是因为您没有在ping.js中定义execute它。

您可以执行以下任一操作:

  • ping.jsmodule.exports.run更改为module.exports.execute
  • 或者在主文件中,将client.commands.get('ping').execute更改为client.commands.get('ping').run

这样做的原因是,当您调用command.execute()尝试在命令模块中调用名为"execute"的函数时。由于您将其命名为run而不是execute,因此它会查找错误的函数并且找不到它。

那是因为你把它命名为run而不是execute在这条线上:

module.exports.run = async function ()

将其更改为执行,它应该可以正常工作,如果要保留关键字run,而不是client.commands.get('ping').execute(message, args),请使用client.commands.get('ping').run(message, args)

我还应该提到你有很多参数:

execute function (client, message, args, config, gdb, prefix, permissionLevel, db) {
//...
}

任何之后的参数都将未定义,因为您只传入消息和参数,在这里:

client.commands.get('ping').execute(message, args)

相关内容

  • 没有找到相关文章

最新更新