You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.js TypeError:无法读取undefined的members属性报错排查

报错根因

TypeError: Cannot read properties of undefined (reading 'members') 触发的核心原因是guild变量值为undefined:
你在客户端完成登录、缓存完全初始化之前,就提前在全局作用域执行了client.guilds.cache.get('909512069999628349'),这时候client.guilds.cache是空集合,根本拿不到对应ID的服务器实例,等后续ready事件触发时,操作undefined的members属性自然报错。
另外即使修复了执行时机问题,如果没在Discord开发者后台开启特权的成员意图,拉取成员时也会触发权限报错。

修复方案
  • 调整代码执行顺序:将获取服务器实例的逻辑移动到ready事件回调内部,确保客户端就绪、缓存加载完成后再读取guild数据。
  • 开启特权意图:登录Discord开发者后台,进入对应机器人的设置页面,找到Privileged Gateway Intents分区,打开Server Members Intent开关并保存,否则代码层面即使传了对应intents,也没有权限拉取全量服务器成员列表。
  • 增加容错判断:获取guild后先判断实例是否存在,避免服务器ID写错、机器人未加入目标服务器时触发无意义报错。
  • 优化intents写法:不推荐直接传32767开启全量intents,按需声明实际用到的intents即可,减少不必要的事件开销,也避免后续新增特权intents导致机器人启动异常。
修复后可运行代码
const { Client, Intents } = require('discord.js');
const client = new Client({
    // 按需声明需要的intents,不需要全开,discord.js v14版本请替换为GatewayIntentBits对应枚举值
    intents: [
        Intents.FLAGS.GUILDS,
        Intents.FLAGS.GUILD_MEMBERS
    ]
})

client.on('ready', () => {
    // 客户端就绪后再获取目标服务器实例
    const guild = client.guilds.cache.get('909512069999628349');
    if (!guild) {
        console.error('获取服务器失败:请确认机器人已加入对应服务器、服务器ID填写正确');
        return;
    }
    guild.members.fetch()
        .then(memberList => console.log(`成功拉取成员,共${memberList.size}位服务器成员`))
        .catch(err => console.error('拉取成员列表失败:', err));
});

// 替换为你自己的机器人Token
client.login('YOUR_BOT_TOKEN');

内容的提问来源于stack exchange,提问作者General_Viski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:18:38