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

如何用Discord.js机器人列出指定服务器的所有成员?

解决Discord.js机器人无法获取服务器成员的问题

我帮你分析下代码里的几个关键问题,以及对应的修复方案:

问题根源

  1. API版本不兼容:你用的client.guilds.find("id", "...")是Discord.js v11及更早版本的写法,v12+已经把集合操作迁移到cache属性下,旧方法已经被移除了。
  2. 错误的属性调用:服务器对象里没有users属性,成员数据存在members属性中;而且默认情况下机器人不会缓存所有成员,必须主动获取完整列表。
  3. 未处理异步操作:获取成员列表是异步行为,直接同步遍历会因为数据未加载完成而没有输出。

修正后的代码

下面是适配Discord.js v12+的正确写法,我加了详细注释:

// 要在异步函数中执行(比如放在命令回调、ready事件里)
async function fetchAndLogMembers() {
  // 从缓存中获取指定服务器
  const targetGuild = client.guilds.cache.get("335507048017952771");
  
  // 先判断服务器是否存在
  if (!targetGuild) {
    console.log("找不到指定的服务器,请检查ID是否正确!");
    return;
  }

  try {
    // 异步获取服务器所有成员(包括离线成员)
    const allMembers = await targetGuild.members.fetch();
    
    // 遍历成员并打印用户名
    allMembers.forEach(member => {
      console.log(member.user.username);
    });
  } catch (err) {
    // 捕获并打印错误(比如权限不足)
    console.error("获取成员列表时出错:", err);
  }
}

// 调用函数执行
fetchAndLogMembers();

额外注意事项

  • 开启成员意图:现在Discord要求机器人必须开启「服务器成员意图」才能获取成员列表。你需要登录Discord开发者门户,找到你的机器人应用,在「Bot」标签页的「Privileged Gateway Intents」里,开启「Server Members Intent」。
  • 权限检查:确保机器人在目标服务器里有「查看服务器成员」的权限,否则会获取失败。
  • 版本建议:尽量使用最新稳定版的Discord.js,旧版本不仅API过时,还可能存在安全漏洞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:25:43