Replit上Discord机器人启动失败:ClientDataManager.js读取undefined的'id'属性报错
问题原因
你使用的是discord.js v11及更早的旧版本,Discord官方更新了网关事件返回的数据结构,旧版本SDK无法解析新返回的频道字段,就会触发Cannot read property 'id' of undefined报错,该问题属于全量范围故障,所有仍在使用v11及以下版本的Discord机器人都会突然触发,和业务代码是否修改无关。
解决方案
方法1:升级到稳定兼容版本(长期推荐)
升级discord.js到v12及以上版本,同步修改代码中的过时API即可:
- 将所有
Discord.RichEmbed替换为Discord.MessageEmbed - 将所有
sendEmbed(embed对象)写法替换为send({ embeds: [embed对象] }) - 实例化Client时补充网关意图配置:
const client = new Discord.Client({ intents: [ Discord.Intents.FLAGS.GUILDS, Discord.Intents.FLAGS.GUILD_MESSAGES, Discord.Intents.FLAGS.DIRECT_MESSAGES ] })
方法2:临时兼容旧版本(无需修改业务代码)
直接使用社区修复的discord.js v11分支:
- 打开项目根目录的
package.json文件 - 找到dependencies下的discord.js配置项,将版本号修改为
github:discordjs/discord.js#v11.6.4 - 重启项目,Replit会自动安装对应版本的依赖
额外注意:你的代码中引入了第三方包
guild,变量名和discord.js内置的Guild结构重名,建议将引入语句修改为const guildLib = require('guild')避免变量污染引发其他问题。
内容的提问来源于stack exchange,提问作者Hamoodi youtube
相关产品推荐
相关产品推荐

