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

Discord.js统计更新模块变量设置引发ReferenceError报错求助

报错核心原因
  • 代码存在重复粘贴故障,updateStats 函数被意外嵌套定义了两次,整体逻辑结构完全混乱
  • interval 变量在声明初始化完成之前就被传入 setInterval(interval, Date.now()) 调用,直接触发「访问未初始化变量」的报错
  • client.channels.fetch() 是异步API,未添加await等待执行完成的情况下,你拿到的是Promise对象而非频道实例,后续调用setName方法也会报错
  • 存在多余的$console语法错误,且你冗余实现了定时逻辑,本身外层已经有30秒执行一次的setInterval,不需要额外写混乱的异步循环逻辑
修复后可运行的代码
const Discord = require('discord.js');
const settings = require("../settings/configuration");

async function updateStats(client) {
    const guild = client.guilds.cache.get(settings.BOT_SETTINGS.Guild_ID);
    // 等待异步获取频道实例
    const totalUsers = await client.channels.fetch('883654989271154728');
    const onlineUsers = await client.channels.fetch('883655041813200926');

    // 每30秒更新一次,注意Discord有频道改名频率限制,建议改到5分钟以上
    setInterval(async () => {
        console.log('Getting stats update..')
        const userCount = guild.memberCount;
        // 过滤在线成员,注意需要开启GUILD_PRESENCES意图才能拿到presence数据
        const onlineCount = guild.members.cache.filter(m => m.presence?.status === 'online').size;
        console.log("Total Users: " + userCount);
        console.log("Online Users: " + onlineCount);

        await totalUsers.setName("Total Users: " + userCount)
            .then(newChannel => console.log(`Stat channel renamed to: ${newChannel.name}`))
            .catch(console.error);
        await onlineUsers.setName("Online Users: " + onlineCount)
            .then(newChannel => console.log(`Stat channel renamed to: ${newChannel.name}`))
            .catch(console.error);
    }, 30000)
}

module.exports = {
    updateStats
}
额外配置要求
  • 初始化Discord客户端时必须开启GUILDS、GUILD_MEMBERS、GUILD_PRESENCES三个网关意图,否则无法正常获取成员数据和在线状态
  • 机器人账号需要被授予统计频道的「管理频道」权限,才有权限修改频道名称
  • Discord官方限制频道名称修改频率为10分钟最多2次,建议将定时执行的间隔调整到5分钟(即300000毫秒)以上,避免触发频率限制报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:15:03