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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:36:04