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

discord.js获取指定角色所有成员仅返回1人问题求助

问题根因
  • 未开启Discord Bot的Server Members特权网关意图,Discord API默认不会推送全量服务器成员数据到Bot本地缓存,当前你本地缓存中仅保留了1名近期和Bot产生过交互的持有目标角色的成员,因此查询仅返回1条结果。
  • 直接读取roles.cache本地缓存数据,未主动调用接口拉取全量持有目标角色的成员列表。
修复步骤
  1. 开启特权意图

进入Discord开发者平台的Bot应用管理页,切换到「Bot」标签页,下滑到Privileged Gateway Intents区域,打开Server Members Intent开关后保存设置。

  1. 初始化Client时声明成员意图
    在创建Bot Client实例时,明确加入GuildMembers意图,示例代码如下(discord.js v14版本):
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMembers, // 必须添加该意图才可获取全量成员数据
    // 其他业务需要的网关意图可自行补充
  ]
});
  1. 修改查询代码,主动拉取全量成员数据
    不要直接读取本地缓存,先调用拉取接口获取全量数据后再处理:
const CSCid = "496507412300300288";
// 先拉取目标角色的全量数据
const targetRole = await interaction.guild.roles.fetch(CSCid);
// 主动拉取所有持有该角色的成员到本地缓存
await targetRole.members.fetch();
// 此时再遍历成员就能拿到完整列表
const CSCmembers = targetRole.members.map(m => m.user.tag);
console.log(CSCmembers);

注意:上述代码使用了await语法,需要放在async标记的函数内才能正常运行,interaction的响应回调函数本身默认支持async语法,直接修改即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:45:00