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

Discord.js v13定时器结束后reactions.resolve返回undefined及未知消息错误

问题排查与修复方案

错误原因定位

1. TypeError: Cannot read properties of undefined (reading 'resolve')

  • 核心触发点:cacheChannel.messages.fetch()返回的reactionMessage为空,或reactionMessage.reactions.resolve('⬆️')返回空
  • 具体诱因包括:
    • 线上服务器字符编码非UTF-8,导致表情符号被转码为乱码,无法匹配到对应的表情回应
    • 数据库存储的MessageID对应的消息已被删除/撤回,fetch消息操作返回空值
    • 此前node版本不匹配,用npx启动时调用的node版本与依赖编译版本不一致,导致discord.js缓存读取、数据库读写异常,无法拿到正确的消息数据

2. DiscordAPIError: Unknown Message(错误码10008)

  • 核心触发点:代码尝试对已不存在的消息执行添加表情、读取内容等操作,和第一个错误属于同源问题,都是目标消息无法被discord接口识别导致的报错。

修复步骤

    1. 先确认环境一致性
    • 执行node -v确认当前启动用的node版本确实为v92,执行npm ls sqlite3确认sqlite3的编译版本匹配当前node版本,消除依赖版本异常隐患
    • 确认线上服务器系统字符集设置为UTF-8,避免表情符号被转码导致匹配失败
    1. 代码层面添加空值判断和错误捕获,避免未捕获异常导致机器人崩溃,参考修改后的代码:
sEmbed.awaitReactions({ filter, max: 15, time: 43200000, errors: ['time'] })
.then(async collected => {
    let cacheChannel = message.guild.channels.cache.get(channelID); 
    if(!cacheChannel) return;
    try {
        const reactionMessage = await cacheChannel.messages.fetch(db.get(`${suggestionID}.MessageID`));
        const upReaction = reactionMessage?.reactions?.resolve('⬆️');
        if(!upReaction) {
            // 表情不存在/消息异常的兜底逻辑
            GV.lessVotes(true, suggestionID, sEmbed, db, message, icon, discord);
            return;
        }
        const userList = await upReaction.users.fetch();
        db.set(`${suggestionID}.Upvoted_Users`, ((userList.map((user) => user.id).length) - 1));
        db.set(`${suggestionID}.Total_Users`, 15);
        db.set(`${suggestionID}.Downvoted_Users`, db.get(`${suggestionID}.Total_Users`) - db.get(`${suggestionID}.Upvoted_Users`));
        GV.checkValues(db, suggestionID, sEmbed, message, icon, discord);
    } catch (err) {
        // 消息拉取失败的兜底逻辑
        GV.lessVotes(true, suggestionID, sEmbed, db, message, icon, discord);
    }
})
.catch(collected => {
    change = true;
    GV.lessVotes(change, suggestionID, sEmbed, db, message, icon, discord);
});
    1. 发送消息、添加表情的逻辑也同步添加try/catch捕获10008错误,添加兜底处理逻辑
    1. 测试阶段可将倒计时时间临时修改为1-5分钟,不用等待12小时即可验证修复效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:18:03