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

Discord.js v14获取用户所在服务器报错:无法读取cache属性

问题排查与解决

错误原因

你遇到的TypeError: Cannot read properties of undefined (reading 'cache'),是因为guild.members.cache未初始化——Discord.js 默认不会自动缓存所有服务器的成员,只有特定场景下(比如机器人主动获取过成员、或配置了成员缓存策略)才会有数据,直接访问未加载的缓存就会报错。

修复方案

不要依赖本地成员缓存,改用guild.members.fetch()直接从Discord API查询用户是否在服务器内,同时处理异步批量操作:

async execute(interaction) {
  const guilds = await interaction.client.guilds.fetch();
  // 批量检查用户是否在每个服务器中
  const userGuilds = await Promise.all(
    guilds.map(async guild => {
      try {
        // 尝试获取用户在该服务器的成员信息
        await guild.members.fetch(interaction.user.id);
        return guild;
      } catch (err) {
        // 用户不在该服务器,或机器人无权限,返回null
        return null;
      }
    })
  );
  // 过滤无效结果,提取服务器ID
  const guildIDs = userGuilds.filter(Boolean).map(guild => guild.id);
}

关键说明

  • guild.members.fetch()会直接调用Discord API验证用户身份,不依赖本地缓存,结果更可靠。
  • 用Promise.all处理多服务器的异步查询,避免同步代码阻塞。
  • try/catch捕获无权限或用户不在服务器的情况,确保流程不中断。

额外注意

  • 确保机器人在目标服务器拥有List Members权限,否则fetch操作会失败。
  • 若机器人加入大量服务器,批量查询可能触发API速率限制,可根据需求添加分批延迟逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:35:13