使用discord.js v14获取频道成员仅返回机器人,如何获取全部成员?
解决discord.js v14获取频道成员仅返回机器人自身的问题
核心问题原因
- 未在Discord开发者门户开启服务器成员特权意图
channel.members仅返回本地缓存的成员,默认不会自动加载频道内所有成员
分步解决方案
1. 开启服务器成员特权意图
登录Discord开发者门户,进入你的应用→「Bot」页面,在「Privileged Gateway Intents」板块,开启「Server Members Intent」开关。
2. 修改代码主动拉取频道成员
channel.members.cache只存储机器人已缓存的成员(如自身、近期互动过的用户),需要通过fetch()方法主动从Discord服务器拉取完整成员列表:
// 需在异步函数中执行 async function getTargetMembers(channelId, roleId) { const channel = client.channels.cache.get(channelId); // 验证频道是否为文本类公会频道 if (!channel || !channel.isTextBased()) return; // 主动获取频道所有成员 const allChannelMembers = await channel.members.fetch(); // 过滤出拥有指定角色的成员 const membersWithTargetRole = allChannelMembers.filter(member => member.roles.cache.has(roleId) ); // 生成可直接发送的提及字符串 const mentionText = membersWithTargetRole.map(m => m.toString()).join(' '); console.log(mentionText); }
注意事项
- 调用
client.channels.cache.get()时,传入纯数字频道ID即可,不要带#前缀 - Partials配置不是导致该问题的核心原因,它主要用于处理未完全缓存的对象(如离线成员发送的消息)
内容的提问来源于stack exchange,提问作者paarth soin
相关产品推荐
相关产品推荐

