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

discord.js v13版本serverinfo命令用户状态统计异常问题咨询

问题引发原因
  1. 网关权限配置缺失
    discord.js v13开始强制要求使用网关意图(Intent)来获取敏感数据,用户状态、成员列表属于需要手动开启的特权意图,未开启时机器人无法拉取全量成员状态数据,只会同步启动后发生状态变更的用户信息,所以刚重启时离线用户数为0,只有用户上下线后数据才会更新。
  2. 缓存机制限制
    默认情况下interaction.guild.members.cache只会缓存部分活跃成员,不会预加载全量服务器成员数据,导致统计时遗漏部分成员,出现计数偏差。
  3. 离线用户判断逻辑错误
    离线用户的presence字段为undefined,原代码中判断member.presence?.status == "offline"的逻辑无法匹配到真实离线用户,只会匹配到有presence缓存但状态为offline的用户,导致离线统计完全失效。
解决方法

步骤1:开启开发者后台特权意图

  • 进入Discord开发者门户,找到对应的机器人应用,进入「Bot」配置页
  • 下滑到Privileged Gateway Intents区域,开启SERVER MEMBERS INTENT和PRESENCE INTENT两个开关

步骤2:修改客户端初始化配置,注册对应意图

更新机器人启动时的客户端初始化代码,添加必要意图:

const { Client, Intents } = require('discord.js');
const client = new Client({
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MEMBERS, // 拉取成员列表必需
    Intents.FLAGS.GUILD_PRESENCES, // 拉取用户状态必需
    // 保留其他正在使用的意图即可
  ]
});

步骤3:修正状态统计逻辑

修改serverinfo命令中的统计代码,先拉取全量成员再统计,同时用总成员数减去在线状态数的方式计算离线用户数,避免判断遗漏:

const lang = require('../bot/languageSelector');
const { MessageEmbed } = require("discord.js");
module.exports = {
    name: 'serverinfo',
    description: 'Shows information of this Discord server',
    run: async (bot, interaction, colorMe) => {
        let embed = new MessageEmbed();
        // 先拉取全量服务器成员,保证缓存完整
        await interaction.guild.members.fetch();
        const members = interaction.guild.members.cache;
        // 统计各状态人数
        const online = members.filter(member => member.presence?.status === "online").size;
        const idle = members.filter(member => member.presence?.status === "idle").size;
        const dnd = members.filter(member => member.presence?.status === "dnd").size;
        // 离线人数 = 总成员数 - 其他三类状态人数,避免判断遗漏
        const offline = members.size - online - idle - dnd;
        embed.setColor(colorMe);
        embed.setTitle(`${lang(interaction.user.id, "about")} ${interaction.guild.name}`);
        embed.setFields({
            name: `${lang(interaction.user.id, "byStatuses")}`,
            value: `
                ${lang(interaction.user.id, "online")}: ${online}
                ${lang(interaction.user.id, "idle")}: ${idle}
                ${lang(interaction.user.id, "dnd")}: ${dnd}
                ${lang(interaction.user.id, "offline")}: ${offline}
            `,
            inline: true
        });
        interaction.followUp({embeds: [embed]});
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:06:04