You need to enable JavaScript to run this app. 如何修复Discord机器人报错TypeError: Cannot read property 'id' of null
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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:修复成员信息获取权限(如果是服务器内触发仍报错)

如果确认用户是在服务器内触发命令还是出现该错误,说明你的机器人没有开启成员信息获取权限:

  1. 登录Discord开发者平台,进入对应机器人的「Bot」设置页面
  2. 在「Privileged Gateway Intents」分组下,打开「Server Members Intent」开关
  3. 代码中初始化客户端时,需要声明成员相关的意图,以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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 20:15:01