Discord.js v12 无法获取 Discord 服务器完整实际成员列表
问题原因
discord.js v12版本默认不会全量缓存服务器成员,同时需要申请特权权限才能获取完整成员列表,你只拿到1条ID(通常是Bot自身的ID)就是权限和缓存配置不到位导致的。
解决步骤
1. 开启特权网关意图
打开Discord开发者平台的Bot应用设置页,进入「Bot」标签,下滑到 Privileged Gateway Intents 区域,打开SERVER MEMBERS INTENT开关。
2. 调整客户端初始化配置
初始化Client实例时,声明所需的GUILD_MEMBERS意图,同时可以开启启动时全量拉取成员的配置,示例代码:
const { Client } = require('discord.js'); const client = new Client({ ws: { intents: ['GUILDS', 'GUILD_MEMBERS'] }, fetchAllMembers: true });
配置完成后重启Bot,原先的Guild.members.cache.map就能拿到全量成员ID了。
可选:临时手动拉取成员
如果你不需要全局缓存所有成员,也可以单独调用拉取接口获取全量列表,无需开启fetchAllMembers:
const Guild = client.guilds.cache.first(); Guild.members.fetch().then(fetchedMembers => { const Members = fetchedMembers.map(member => member.id); console.log(Members); });
内容的提问来源于stack exchange,提问作者Chatsky
相关产品推荐
相关产品推荐

