运行Discord.js的messageDelete事件时报Cannot read property 'content' of undefined如何解决
Discord机器人messageDelete事件报错修复方案
报错根因
你遇到的TypeError: Cannot read property 'content' of undefined错误由以下核心问题导致:
- discord.js的
messageDelete事件回调仅会传递1个参数:被删除的消息对象,你错误定义了2个入参(member, message),导致实际的消息对象被赋值给第一个参数member,第二个参数message为undefined,访问undefined的content属性就触发了报错。
其他附带逻辑错误
- 代码中
member.member.user.id属于冗余错误写法,消息对象本身自带author属性指向消息发送者 content是消息对象的属性而非方法,不需要加括号调用- 若未开启消息内容意图、未配置消息缓存,非实时缓存的消息删除时可能无法拿到完整内容,需要处理partial消息的情况
修复后的代码
// 首先确认客户端初始化时开启了必要权限与配置 const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, // 必须开启才能获取消息内容 ], partials: [Partials.Message] // 配置后才能拿到未缓存的删除消息 }); // 修正事件回调参数定义 client.on("messageDelete", async (message) => { // 处理未缓存的partial消息,先拉取完整内容 if (message.partial) { try { await message.fetch(); } catch (err) { console.log("无法获取已删除的未缓存消息:", err); return; } } const aud = db.get(`auditchannel_${message.guild.id}`); if (!aud) return; const auditChannel = client.channels.cache.get(aud); if (!auditChannel) return; await auditChannel.send(`<@${message.author.id}> 的消息在 <#${message.channel.id}> 被删除`); console.log(message.content); });
额外验证步骤
- 确认discord.js版本为v14及以上,不同大版本的事件参数、意图配置规则存在差异
- 确认Discord开发者后台中你的机器人应用已经开启了
Message Content Intent权限 - 若删除的是机器人自己发送的消息,检查机器人是否有对应权限可以读取自身消息内容
内容的提问来源于stack exchange,提问作者Lokry
相关产品推荐
相关产品推荐

