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

使用discord.js v14获取频道成员仅返回机器人,如何获取全部成员?

解决discord.js v14获取频道成员仅返回机器人自身的问题

核心问题原因

  1. 未在Discord开发者门户开启服务器成员特权意图
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:06:01