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

discord.js v13实现Reaction roles功能报DiscordAPIError 404错误如何解决?

错误原因

  • 核心报错404的直接触发原因:你传入的频道ID798996288258703382不存在,或者你的机器人没有权限访问该频道,Discord API找不到对应资源返回404状态码。
  • 代码存在未定义变量的逻辑错误:EditMessage.js中当判断频道无消息时,直接调用了message.channel.send(),但该作用域下根本没有定义message变量,会触发额外运行错误。
  • 不符合discord.js v13的语法规范:v13版本不能直接将MessageEmbed实例作为send方法的参数传递,必须包裹在embeds数组中才能正常发送嵌入消息。
  • 缺少必要的网关Intent:discord.js v13要求显式开启GUILDS、GUILD_MESSAGES、GUILD_MESSAGE_REACTIONS等相关Intent,否则无法正常拉取频道、消息资源,也可能触发404类报错。

修复方案

1. 排查基础配置

  • 确认填写的频道ID正确无误,机器人已经加入该频道所属服务器,并且拥有查看频道、发送消息、管理消息、添加反应的权限。
  • 确认机器人初始化时已经开启了必要的Intent,参考初始化代码:
const { Client, Intents } = require('discord.js');
const client = new Client({ 
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MESSAGES,
    Intents.FLAGS.GUILD_MESSAGE_REACTIONS
  ] 
});

2. 修复EditMessage.js代码

修正后的完整代码如下:

const addReactions = (message, reactions) => {
    message.react(reactions[0])
    reactions.shift()
    if(reactions.length > 0) {
        setTimeout(() => addReactions(message, reactions), 500)
    }
}

module.exports = async (client, id, embed, reactions = []) => {
    try {
        const channel = await client.channels.fetch(id)
        const messages = await channel.messages.fetch()
        if(messages.size === 0) {
            // 修复未定义变量问题,适配v13嵌入发送语法
            const newMessage = await channel.send({ embeds: [embed] })
            addReactions(newMessage, reactions)
        } else {
            // 直接编辑第一条消息即可,无需遍历所有消息
            const targetMessage = messages.first()
            await targetMessage.edit({ embeds: [embed] })
            // 可选:如果需要重置原有反应可先执行 await targetMessage.reactions.removeAll()
            addReactions(targetMessage, reactions)
        }
    } catch (err) {
        // 增加错误捕获方便后续定位问题
        console.error('反应身份组功能出错:', err)
    }
}

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

相关产品推荐
方舟 Agent Plan

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

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