Discord.js触发Cannot read 'set' of undefined错误如何解决
报错原因
核心报错源于变量名拼写错误:你在main.js中初始化命令集合时写的是单数形式client.command,后续调用时用的是复数形式client.commands,导致client.commands未定义,调用set方法时抛出类型错误。
同时你的代码还存在多个其他隐性问题,不修正后续还会出现其他报错。
修复步骤
- 修正集合命名拼写错误
将main.js中的
client.command = new Discord.Collection();
修改为
client.commands = new Discord.Collection();
- 修正错误打印变量名
将main.js中fs读取部分的
if(err) console.error(error)
修改为
if(err) console.error(err)
避免报错时出现未定义变量问题。
- 替换废弃事件名
discord.js v13及以上版本已废弃message事件,需替换为messageCreate,将main.js中的
client.on('message', message =>{
修改为
client.on('messageCreate', message =>{
- 修正命令调用的未定义变量
main.js中执行命令时你传入了未定义的bot变量,将
if (cmd) cmd.run(bot, message, args, prefix)
修改为
if (cmd) cmd.run(client, message, args, prefix)
- 清理ping.js冗余代码
ping.js中不需要重复实例化Client对象,删除以下三行无用代码即可:
const { Client, Intents, DiscordAPIError } = require('discord.js'); const Discord = require('discord.js') const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });
- 修正登录参数
将client.login('Prefix')中的Prefix替换为你自己的Discord机器人真实令牌,否则会登录失败。
所有修改完成后重新执行node .即可正常运行。
内容的提问来源于stack exchange,提问作者enderr
相关产品推荐
相关产品推荐

