Discord.js报错:Cannot read properties of null (reading 'bot')求助
Discord机器人报错“TypeError: Cannot read properties of null (reading 'bot')”修复方案
问题根源分析
报错本质是代码尝试访问一个null对象的bot属性,结合你的业务逻辑,大概率出在两个环节:消息引用的处理,或是messageUpdate事件中的嵌入消息判断。
针对性修复方案
1. 消息引用检测逻辑加固
当你获取引用消息时,存在引用消息被删除、获取失败的可能,此时返回的对象为null,直接访问其author.bot就会触发报错。
修改示例:
// 获取引用消息时增加异常捕获与空值判断 const referencedMsgId = message.reference?.messageId; let referencedMessage = null; if (referencedMsgId) { referencedMessage = await message.channel.messages.fetch(referencedMsgId).catch(() => null); } // 先确认引用消息存在,再进行后续操作 if (!referencedMessage) return; // 安全访问bot属性 const isBotAuthor = referencedMessage.author?.bot;
2. messageUpdate事件中嵌入消息判断优化
你标记的if (!newMessage.embeds[0]) return;存在隐患:如果newMessage.embeds本身为null,访问索引[0]会触发类似的空值读取错误,需提前判断数组是否存在且非空。
修改示例:
// 先判断embeds数组是否有效 if (!newMessage.embeds || newMessage.embeds.length === 0) return; // 再安全访问第一个嵌入消息 const targetEmbed = newMessage.embeds[0];
通用防崩溃技巧
- 对所有异步获取操作(如消息、用户数据)添加
catch块,避免未处理的Promise异常导致机器人崩溃。 - 访问嵌套属性时使用可选链操作符
?.,比如obj?.prop?.subProp,即使中间某层为null/undefined也不会抛出错误。
内容的提问来源于stack exchange,提问作者James Lewis
相关产品推荐
相关产品推荐

