Discord.js V13 interactionCreate中获取服务器成员缓存仅显示本人和机器人
问题原因
- 未开启
GuildMembers特权网关意图
Discord API v10及discord.js v13以上版本对成员数据做了权限限制,获取服务器全量成员属于敏感操作,需要你在Discord开发者平台的机器人配置页手动开启服务器成员特权网关意图。未开启该意图时,网关只会向机器人推送与机器人产生过直接交互的成员数据,因此本地缓存仅会保留你和机器人自身的信息。 - 未主动拉取全量成员数据
即使开启了对应意图,机器人默认不会主动拉取服务器全量成员到本地缓存,直接访问interaction.guild.members.cache只能拿到已经触发过相关事件、被临时缓存的成员,无法拿到全量列表。
修复步骤
- 进入Discord开发者平台,找到对应机器人的设置页,在「Privileged Gateway Intents」分类下开启
Server Members Intent开关 - 修改代码,先拉取全量成员再遍历:
bot.on('interactionCreate', async interaction => { // 主动拉取服务器所有成员,覆盖本地缓存不全的问题 const allMembers = await interaction.guild.members.fetch(); allMembers.forEach(m => { console.log(m.user.username) }); });
内容的提问来源于stack exchange,提问作者779804
相关产品推荐
相关产品推荐

