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

如何修改Discord.js代码过滤机器人,仅显示真实用户?

解决Discord.js统计真实用户数量并更新机器人状态的问题

原代码使用guild.memberCount统计成员时会包含机器人账号,要过滤掉机器人只统计真实用户,需要修改成员统计逻辑,同时确保机器人拥有必要权限获取成员数据。

修改步骤说明

  1. 替换成员统计逻辑:放弃直接使用memberCount,改为遍历每个服务器的成员缓存,过滤掉user.bot为true的账号,再统计真实用户数量。
  2. 添加网关意图:Discord.js v14及以上版本需要启用GUILDS和GUILD_MEMBERS特权意图,否则无法获取完整的成员缓存。需在Discord开发者门户的机器人页面开启这两个意图,同时在客户端初始化时声明。
  3. 修正ActivityType导入:原代码直接使用ActivityType会导致未定义错误,需从Discord模块中解构导出。

修改后的完整代码

const Discord = require('discord.js');
// 解构获取ActivityType
const { ActivityType } = Discord;
const token = require('./token.json').token;

// 初始化客户端时添加必要的网关意图
const client = new Discord.Client({
  intents: [
    Discord.GatewayIntentBits.Guilds,
    Discord.GatewayIntentBits.GuildMembers
  ]
});

setInterval(async () => {
  // 遍历所有服务器,过滤机器人后统计真实用户总数
  let membersCount = client.guilds.cache
    .map(guild => guild.members.cache.filter(member => !member.user.bot).size)
    .reduce((a, b) => a + b, 0);

  await client.user.setPresence({
    activities: [{
      name: `mit ${membersCount} usern`,
      type: ActivityType.Playing
    }],
    status: "online"
  });
}, 1000 * 60 * 10);

client.login(token);

关键修改点解析

  • 过滤机器人:guild.members.cache.filter(member => !member.user.bot).size 会筛选出当前服务器中所有非机器人用户,再获取其数量。
  • 网关意图配置:GatewayIntentBits.Guilds 是机器人运行的基础意图,GatewayIntentBits.GuildMembers 允许机器人获取服务器成员列表数据,缺少这两个意图会导致成员缓存为空,统计结果为0。
  • ActivityType导入:通过解构const { ActivityType } = Discord; 确保ActivityType.Playing能被正确识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:20:33