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

Discord成员计数机器人输出旧数值、更新异常问题技术问询

问题修复方案

问题根源

  • 成员拉取、在线人数统计的逻辑全部写在了setInterval定时器外部,这部分代码只会在模块加载时执行1次,后续定时器运行时永远调用首次计算得到的旧数值
  • onlineCount前的await属于多余用法,filter返回的集合的size是同步属性,不需要异步等待
  • 若使用discord.js v14及以上版本,需要确认机器人已经开启GUILD_MEMBERS、GUILD_PRESENCES两个特权意图,否则无法正常拉取成员在线状态数据

修复后代码

module.exports = async (client) => {
    const guild = client.guilds.cache.get('889774617349218304');
    // 固定不变的频道对象可以提前提取,不需要每次定时器执行都重复查询缓存
    const channel = guild.channels.cache.get('906111710706954251');
    setInterval(async () =>{
        // 每次统计前重新拉取最新的成员列表和在线状态数据
        const guildMembers = await guild.members.fetch({ withPresences: true });
        const onlineCount = guildMembers.filter(member => !member.user.bot && member.presence?.status === "online").size;
        channel.setName(`🟢 ${onlineCount.toLocaleString()}`);
        console.log('Updating User-Online Count');
    }, 360000);
}

额外注意事项

  • Discord对频道改名有全局速率限制,每10分钟最多修改5次,你当前设置的360000毫秒即6分钟修改1次符合限制要求,无需调整
  • 如果需要统计idle、dnd状态的成员数量,按照同样逻辑在定时器内部新增对应过滤规则计算数值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:06:09