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

djs v12 列出指定guild全部成员的代码问题排查

代码问题诊断
  • 数据源错误:你当前从client.users.cache拉取的是机器人全局缓存的所有平台用户,并非你指定ID的目标服务器内的成员,同时代码中混淆了message.guild(消息发送所在服务器)和你主动获取的指定ID的guild对象,逻辑完全不匹配。
  • 缺少必要权限开关:Discord.js v12及以上版本要求开发者必须在Discord开发者后台的机器人设置页开启Server Members Intent(服务器成员权限),否则无法拉取到服务器内的全量成员,仅能获取到与机器人有过交互、或在线的少量成员缓存。
  • 未主动拉取全量成员:直接读取cache仅能拿到机器人启动后已缓存的成员,刚启动时缓存为空会导致拉取不全,需要主动调用fetch方法拉取服务器全量成员。
  • 冗余逻辑错误:代码中遍历message.guild.members.cache时重复打印全局用户列表长度,属于完全无用的冗余逻辑,不会输出目标服务器的成员信息。
  • 事件接口过期:Discord.js v14及以上版本已弃用message事件,需改用messageCreate事件才能正常触发消息监听逻辑。
修正后可运行代码
// 初始化client示例(v14版本,注意注册对应Intent):
// const { Client, GatewayIntentBits } = require('discord.js');
// const client = new Client({
//   intents: [
//     GatewayIntentBits.Guilds,
//     GatewayIntentBits.GuildMessages,
//     GatewayIntentBits.MessageContent,
//     GatewayIntentBits.GuildMembers // 必须配置该Intent才能拉取成员列表
//   ]
// });

client.on("messageCreate", async (message) => {
  // 可自定义触发命令
  if (message.content !== "list-users") return;
  // 替换为你的目标服务器ID
  const TARGET_GUILD_ID = "替换为你的目标服务器ID";
  const guild = client.guilds.cache.get(TARGET_GUILD_ID);
  if (!guild) return message.reply("未找到指定ID的服务器");

  try {
    // 主动拉取全量成员,忽略本地缓存
    const allMembers = await guild.members.fetch();
    // 提取所有成员ID
    const memberIds = allMembers.map(member => member.id);
    
    console.log(`Listing user ids from ${guild.name}:`);
    console.log(memberIds);
    console.log(`Amount of users: ${memberIds.length}`);
    message.reply(`已成功拉取该服务器共${memberIds.length}名用户的ID,详情可查看控制台`);
  } catch (err) {
    console.error("拉取成员失败:", err);
    message.reply("拉取成员失败,请检查机器人权限和Intent配置");
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:18:01