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

如何获取Discord服务器所有成员ID?Discord.js新手求助

解决Discord.js仅获取到机器人自身ID的问题

嘿,我完全懂你这种复制代码却踩坑的无奈!刚接触Discord.js的时候,我也遇到过一模一样的问题——明明想抓取整个服务器的成员ID,结果数组里只有机器人自己。这其实是Discord.js的缓存机制和权限设置在搞鬼,咱们一步步来解决:

问题根源

Discord.js v13及以后的版本,默认不会自动缓存服务器的所有成员。members.cache里只会存机器人已经“见过”的成员(也就是它自己),除非你满足两个核心条件:

  1. 开启了GuildMembers特权意图
  2. 主动从Discord API拉取完整的成员数据

第一步:开启特权意图

先去Discord开发者平台完成设置:

  • 打开你的机器人应用,切换到「Bot」标签页
  • 往下翻找到「Privileged Gateway Intents」,把「Server Members Intent」的开关打开
  • 保存更改(如果提示需要验证,按页面指引完成即可)

第二步:修改代码获取所有成员

原来的代码直接读取缓存肯定不行,咱们换成异步的fetch()方法主动拉取成员数据,同时把readyDiscord改成异步函数:

const { Client, GatewayIntentBits } = require('discord.js');
// 初始化客户端时必须添加GuildMembers意图
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds, // 必备的服务器基础意图
    GatewayIntentBits.GuildMembers, // 必须添加这个才能获取成员列表
  ],
});

client.on("ready", readyDiscord);
// 改成async函数才能使用await关键字
async function readyDiscord() {
  console.log("Authentication complete");
  console.log("Going online");
  const serverUsers = [];
  const MyServer = client.guilds.cache.get("MyServerID");
  
  // 用fetch()从Discord API拉取完整的成员列表,这一步是关键!
  const allMembers = await MyServer.members.fetch();
  
  // 遍历拉取到的成员,将ID存入数组
  allMembers.forEach(member => serverUsers.push(member.user.id));
  console.log(serverUsers);
}

// 记得最后登录你的机器人
client.login("你的机器人Token");

额外提醒

  • 确保你的机器人在目标服务器里拥有「查看服务器成员」的权限(虽然开启意图后大部分情况没问题,但权限配置齐全更稳妥)
  • 如果还是无法获取成员,试试重新邀请机器人到服务器,确保新的意图设置生效

这样改完之后,你应该就能拿到服务器所有成员的ID啦!

内容的提问来源于stack exchange,提问作者Nexoan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:37:56