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

为什么部署在Heroku的DJS Discord Bot身份组领取指令运行数小时后无报错停止?

故障原因与修复方案

核心诱因

  • 缓存失效问题:你的代码直接从guild.members.cache读取成员数据,Discord.js的缓存会随运行时间自动清理过期/不活跃数据,运行数小时后目标用户不在缓存中时,cache.get(user.id)会返回undefined,调用.roles.add直接抛出未捕获的异步错误,导致反应事件监听链路中断,无错误提示是因为你没有捕获异步异常。
  • 语法隐患:你代码中最后一个判断分支存在悬空的await关键字,后续无执行表达式,触发该分支时会直接抛出语法错误,中断事件处理。
  • 意图未开启风险:若你使用的是Discord.js v13及以上版本,未主动开启GUILD_MESSAGE_REACTIONS、GUILD_MEMBERS网关意图的情况下,网关会在运行一段时间后停止推送反应事件,也会导致功能失效。

修复代码示例

// 套入try/catch捕获所有异步错误
try {
    if (reaction.message.partial) await reaction.message.fetch();
    if (reaction.partial) await reaction.fetch();
    if (user.bot) return;
    if (!reaction.message.guild) return;

    if (reaction.message.channel.id == channel) {
        // 改用fetch拉取成员,不走缓存避免miss
        const member = await reaction.message.guild.members.fetch(user.id);
        if (reaction.emoji.id === '842102278223167528') {
            await member.roles.add(technologyRole);
        } else if (reaction.emoji.id === '871172469334089738') {
            await member.roles.add(engineeringRole);
        } else if (reaction.emoji.id === '871172735114555393') {
            await member.roles.add(roboticsRole);     
        } else if (reaction.emoji.id === '870823307467968603') {
            await member.roles.add(mathRole);  
        } else if (reaction.emoji.id === '871172490892804107') {
            await member.roles.add(chemistryRole);
        } else if (reaction.emoji.id === '870823212441800714') {
            await member.roles.add(biomedRole);
        // 要么补全该分支逻辑,要么直接删除该分支,删掉悬空的await
        } else if (reaction.emoji.id === '842102248993718374') {
            // 补全你要执行的逻辑,或者删除该分支
        } else {
            return;
        }
    }
} catch (err) {
    // 打印错误日志,可在Heroku日志面板查看具体报错信息
    console.error('反应角色处理失败:', err);
}

额外检查项

  • 确认Discord开发者门户中,你的Bot应用的Gateway Intents页面已开启Guilds、Guild Members、Guild Message Reactions三个权限。
  • 可在Heroku日志面板开启调试日志,运行过程中出现的所有报错都会被捕获打印,方便后续定位其他潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:15:03