javascript - 如何修复 TypeError:无法读取 discord.js 中未定义的属性“执行”
问题描述
我是命令处理程序的新手,我正在尝试为不同的 js 文件执行命令
但我得到这个错误
TypeError:无法读取未定义的属性“执行”
这是我的 main.js
// Import the discord.js module
const Discord = require('discord.js');
const fs = require('fs');
// Create an instance of a Discord client
const client = new Discord.Client();
client.commands = new Discord.Collection();
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
const prefix = "$"
/**
* The ready event is vital, it means that only _after_ this will your bot start reacting to information
* received from Discord
*/
client.on('ready', () => {
console.log('I am ready!');
});
client.on('message', message => {
if (!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).trim().split(/ +/);
const command = args.shift().toLowerCase();
if(command === 'pingg'){
client.commands.get('pingg').execute(message, args);
}
if (!client.commands.has(command)) return;
try {
client.commands.get(command).execute(message, args);
} catch (error) {
console.error(error);
message.reply('there was an error trying to execute that command!');
}
});
client.login('censored');
fs.readdir("./commands/", (err, files) => {
if(err) console.error(error)
let jsfiles = files.filter(f => f.split(".").pop() === "js")
if (jsfiles.length <= 0) {
return console.log("No commands to log in FOLDER NAME")
}
console.log(`Loading ${jsfiles.length} commands from FOLDER NAME...`)
jsfiles.forEach((f,i) => {
let props = require(`./commands/${f}`)
console.log(`${i + 1}: ${f} loaded!`)
client.commands.set(f, props)
})
})
我的 ping.js
module.exports = {
name : 'pingg',
description : 'Test',
execute(message, args){
message.channel.send('pongg')
}
}
解决方案
client.commands
客户端准备好后,这些命令将在机器人应用程序生命周期中注册到集合中。这是因为client.login
在它之前被调用。
您可以使用commandFiles
从其模块加载命令。这已经同步执行,因此您对订单有一定的保证。在声明之前也要这样做client.login
。
另一个问题是命令模块被命名ping.js
,因此您当前的实现将 ping 命令注册到client.command
集合。但是,您正在pingg
从返回的集合中解析命令undefined
commandFiles.forEach(file => {
const command = require(`./commands/${file}`);
client.commands.set(command.name, command);
});
client.login('censored');
//...
推荐阅读
- c# - 动态检索 Request.RequestUri.Query 的属性值对?
- python - 从深度图计算视野
- sharepoint - 如何在 SharePoint 列表中设置自定义权限级别
- javascript - 谷歌分析嵌入式 API 不能与谷歌分析报告 API (v4) 一起使用
- c - 假设使用 mmap 时未初始化的堆内存被初始化为零?
- extjs - 防止 Extjs 标记圈被切断
- typescript - 使用 Cordova 和 Ionic 的 Typescript 中的非活动检查器?
- navbar - 当导航栏中的窗口大小发生变化时,如何调整组件的大小?
- javascript - 带有小时而不是日期的时间线图
- javascript - D3 - 如何处理来自 API 的空值或空值?