Discord.js遍历服务器成员仅返回单个用户的问题如何解决
解决方法
核心问题原因
你使用的members.list()是discord.js v12及更早版本的废弃API,v13及之后的版本已经将该方法移除/停止维护,高版本中调用该方法只会返回本地已缓存的成员(通常只有机器人自身、触发过交互的用户、服务器所有者这类已经加载到缓存的对象),这就是你只能拿到1个用户ID的核心原因。
修正方案
你需要替换为官方提供的guild.members.fetch()方法,强制拉取全量服务器成员,同时优化服务器获取逻辑避免取错服务器:
修正后的ready事件代码
client.once('ready', async () => { // 替换为你的目标测试服务器ID const targetGuild = await client.guilds.fetch('替换为你的服务器ID'); // 添加强制拉取参数,不走本地缓存,获取全量成员 const allMembers = await targetGuild.members.fetch({ force: true }); allMembers.each(member => { console.log(member.id); // 此处添加你的数据库写入逻辑 }); console.log(`成功拉取到${allMembers.size}名成员信息`); });
生效校验项
- 确认Discord开发者门户对应机器人的
Privileged Gateway Intents下,Server Members Intent已经开启并保存,你代码中配置的GUILD_MEMBERS意图才会正常生效 - 若你使用的是discord.js v14及以上版本,意图配置需要改为枚举形式:
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers, // 剩余其他需要的意图按对应枚举替换即可 ] });
字符串形式的意图仅在v13及更低版本中生效,版本不匹配也会导致成员拉取失败。
内容的提问来源于stack exchange,提问作者AllLuckBased
相关产品推荐
相关产品推荐

