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

Discord.js服务器成员筛选计数不准确 含/不含bot计数错误求助

问题排查及修复方案

核心原因

  • 未开启GUILD_MEMBERS(服务器成员)意图:Discord API v8及以上版本要求开发者主动在Discord开发者面板的Bot设置里开启服务器成员权限意图,同时在客户端初始化时声明该意图,否则无法获取完整的服务器成员列表,只能拿到和Bot有交互的少量成员,这是你普通成员、Bot计数都只有1的核心原因。
  • 成员缓存未完全拉取:默认状态下Discord.js只会把部分成员加载到本地缓存中,直接读取message.guild.members.cache只能拿到已经缓存的成员,自然计数不准。

修复步骤

步骤1:开启并声明成员意图

首先访问Discord开发者面板,找到你的Bot应用,进入「Bot」设置页,下拉找到Privileged Gateway Intents分类,开启Server Members Intent开关。
然后在客户端初始化代码中声明该意图,示例如下:

const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent,
    // 必须添加成员意图
    GatewayIntentBits.GuildMembers,
  ]
});

步骤2:拉取完整成员列表再计数

不要直接读取本地缓存,先调用fetch()拉取全量成员后再过滤计数,修改你的计数代码如下:

// 拉取全量服务器成员,force参数强制跳过本地缓存请求最新数据
const allMembers = await message.guild.members.fetch({ force: true });
const memberCount = allMembers.filter(member => !member.user.bot).size;
// 直接用拉取到的全量成员长度获取总计数,无延迟偏差
const totalCount = allMembers.size;
const botCount = allMembers.filter(member => member.user.bot).size;

注:使用await时,外层函数需要声明为async,否则会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:48:02