You need to enable JavaScript to run this app. Discord成员在线计数器显示为0无报错、日志正常问题如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Discord成员在线计数器显示为0无报错、日志正常问题如何解决

问题原因
  • 在线人数统计逻辑语法错误:filter方法的回调函数用花括号包裹了判断逻辑,但没有添加return语句,导致所有成员都被过滤,统计结果恒为0
  • 缺少必要的Gateway Intents权限:Discord.js v13及以上版本需要在Discord开发者后台手动开启GUILD_PRESENCES(读取成员在线状态)、GUILD_MEMBERS(读取服务器成员列表)两个Intent,否则无法正常获取成员在线状态数据
  • 频道改名频率超出Discord API限制:Discord官方规定频道名称修改的速率限制为每5分钟最多2次,你设置的1.2秒修改一次会直接触发限流,即使逻辑正确也无法成功更新频道名
  • 成员缓存未预热:默认情况下guild.members.cache不会存储服务器全量成员数据,需要主动拉取全量成员列表才能准确统计在线人数
修复后代码
// 请先在Discord开发者后台的Bot设置页开启「Presence Intent」和「Server Members Intent」
const guild = client.guilds.cache.get('693805106906398722');
// 总成员数更新 20分钟一次,符合速率限制要求
setInterval(async () => {
    try {
        const memberCount = guild.memberCount;
        const channel = guild.channels.cache.get('824050164376666182');
        await channel.setName(`Użytkownicy ${memberCount.toLocaleString()}`);
        console.log('Member Status: 总人数更新成功');
    } catch (err) {
        console.error('总人数更新失败', err);
    }
}, 1200000);

// 在线人数更新 5分钟一次,符合速率限制要求
setInterval(async () => {
    try {
        // 拉取全量成员列表,确保缓存完整
        await guild.members.fetch();
        const memberCollection = guild.members.cache;
        // 修复filter语法错误,添加可选链避免presence为空时报错
        const online = memberCollection.filter(member => member.presence?.status === 'online').size;
        const channel1 = guild.channels.cache.get('824050194177720391');
        await channel1.setName(`Online ${online}`);
        console.log('Member online Status: 在线人数更新成功');
    } catch (err) {
        console.error('在线人数更新失败', err);
    }
}, 300000); 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 00:54:03