如何修复Discord机器人报错TypeError: Cannot read property 'id' of null
报错根因
你遇到的TypeError: Cannot read property 'id' of null错误,本质是代码执行到${msg.member.id}时,msg.member的值为null,无法读取其下的id属性。
修复方案
方案1:优先使用稳定的用户ID属性(推荐,可直接解决问题)
Discord的消息对象中,msg.author.id在任何场景(服务器频道、私信)下都可以正常获取到触发消息的用户ID,@用户的效果和使用msg.member.id完全一致。你可以直接把description行的代码替换为:
description: `<@!${msg.author.id}> \nNapotkałem błąd przy twojej rejestracji!\n**Powód:** Wpisałeś błędny nick!\nWpisz prawidłowy nick!`,
方案2:增加非空校验拦截异常场景
如果业务逻辑要求该命令只能在服务器内使用,可以在定义embed之前增加校验逻辑,避免代码执行到报错行:
// 检测到消息来自私信场景时直接返回提示 if (!msg.member) { return msg.reply('该注册命令仅支持在服务器内使用,请进入对应服务器后再操作。'); } // 校验通过后再执行后续的embed定义和发送逻辑 const nznick = { // 原有embed代码保持不变 }
方案3:修复成员信息获取权限(如果是服务器内触发仍报错)
如果确认用户是在服务器内触发命令还是出现该错误,说明你的机器人没有开启成员信息获取权限:
- 登录Discord开发者平台,进入对应机器人的「Bot」设置页面
- 在「Privileged Gateway Intents」分组下,打开「Server Members Intent」开关
- 代码中初始化客户端时,需要声明成员相关的意图,以Discord.js v14为例:
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers, // 必须开启该意图才能正常获取服务器成员信息 GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent ] });
内容的提问来源于stack exchange,提问作者Hastlerr999D
相关产品推荐
相关产品推荐

