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
相关产品推荐
相关产品推荐

