如何获取拥有指定角色的所有成员?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
相关产品推荐
相关产品推荐

