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

如何获取拥有指定角色的所有成员?DM发送异常求助

解决Discord机器人仅返回自身角色成员的问题

以下是几种可行的排查方向和解决方法:

1. 调整机器人角色层级

机器人的角色位置必须高于目标角色,否则无法读取该角色下其他成员的信息(仅能读取自身)。进入服务器角色设置页面,将机器人的角色拖动到目标角色的上方即可。

2. 主动拉取全量成员缓存

Discord.js默认不会自动缓存所有成员,仅缓存机器人启动后活跃的成员。需要先主动拉取全量成员到缓存:

// 先拉取服务器所有成员到缓存
await guild.members.fetch();
// 再获取目标角色的成员
const targetRole = guild.roles.cache.get(ROLE_ID);
const roleMembers = targetRole.members;

3. 正确处理异步操作

使用roles.fetch()时属于异步操作,必须用await等待结果返回,否则无法获取完整的角色对象:

const targetRole = await guild.roles.fetch(ROLE_ID);
const roleMembers = targetRole.members;

4. 二次确认Intents配置

虽然你提到排除了Intents问题,但仍需二次检查:

  • 在Discord开发者门户的机器人页面,开启Server Members Intent和Presence Intent
  • 代码初始化客户端时必须传入对应Intents:
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMembers, // 必须开启该权限
    GatewayIntentBits.GuildPresences
  ]
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:27:29