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

Discord.js编辑消息时出现内部服务器错误的解决办法

解决Discord.js编辑回复添加Action Row时的Internal Server Error问题

可能的原因及修复步骤

1. 组件构造不符合Discord.js版本规范

如果使用Discord.js v14及以上版本,必须用ActionRowBuilder和ButtonBuilder构造组件,不能直接用普通对象。错误的构造方式会导致Discord服务器解析失败,抛出内部错误。

正确的组件构造示例:

const { ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');

// 构造第一行按钮(5个)
const row = new ActionRowBuilder()
  .addComponents(
    new ButtonBuilder().setCustomId('btn_1').setLabel('按钮1').setStyle(ButtonStyle.Primary),
    new ButtonBuilder().setCustomId('btn_2').setLabel('按钮2').setStyle(ButtonStyle.Primary),
    new ButtonBuilder().setCustomId('btn_3').setLabel('按钮3').setStyle(ButtonStyle.Primary),
    new ButtonBuilder().setCustomId('btn_4').setLabel('按钮4').setStyle(ButtonStyle.Primary),
    new ButtonBuilder().setCustomId('btn_5').setLabel('按钮5').setStyle(ButtonStyle.Primary)
  );

// 构造第二行按钮(5个)
const row2 = new ActionRowBuilder()
  .addComponents(
    new ButtonBuilder().setCustomId('btn_6').setLabel('按钮6').setStyle(ButtonStyle.Secondary),
    new ButtonBuilder().setCustomId('btn_7').setLabel('按钮7').setStyle(ButtonStyle.Secondary),
    new ButtonBuilder().setCustomId('btn_8').setLabel('按钮8').setStyle(ButtonStyle.Secondary),
    new ButtonBuilder().setCustomId('btn_9').setLabel('按钮9').setStyle(ButtonStyle.Secondary),
    new ButtonBuilder().setCustomId('btn_10').setLabel('按钮10').setStyle(ButtonStyle.Secondary)
  );

2. 按钮自定义ID重复

Discord不允许同一条消息内存在自定义ID(customId)相同的组件,这会直接触发内部服务器错误。检查所有按钮的customId,确保每个值都是唯一的。

3. 语法或参数格式错误

检查代码是否有语法问题,比如你提供的示例代码第一行await interaction.reply({embeds:[embed]})缺少闭合括号(虽然你说单独更新embed正常,但实际代码中这类错误也可能影响后续操作)。另外,编辑回复时的components数组必须只包含有效的ActionRow实例,不能混入其他类型的对象。

4. 确认Discord组件限制

Discord的组件限制是:

  • 每条消息最多5个ActionRow(你只用了2个,符合要求)
  • 每个ActionRow最多5个组件(你的每行都是5个按钮,符合要求)
    所以行数不是问题,排除这个怀疑方向。

完整修复后的代码示例

const { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } = require('discord.js');

// 初始embed
const embed = new EmbedBuilder()
  .setTitle('初始消息')
  .setDescription('等待5秒后更新...');

// 更新后的embed
const embed2 = new EmbedBuilder()
  .setTitle('更新后的消息')
  .setDescription('已添加按钮行');

// 构造按钮行
const row = new ActionRowBuilder()
  .addComponents(
    new ButtonBuilder().setCustomId('btn_1').setLabel('按钮1').setStyle(ButtonStyle.Primary),
    new ButtonBuilder().setCustomId('btn_2').setLabel('按钮2').setStyle(ButtonStyle.Primary),
    new ButtonBuilder().setCustomId('btn_3').setLabel('按钮3').setStyle(ButtonStyle.Primary),
    new ButtonBuilder().setCustomId('btn_4').setLabel('按钮4').setStyle(ButtonStyle.Primary),
    new ButtonBuilder().setCustomId('btn_5').setLabel('按钮5').setStyle(ButtonStyle.Primary)
  );

const row2 = new ActionRowBuilder()
  .addComponents(
    new ButtonBuilder().setCustomId('btn_6').setLabel('按钮6').setStyle(ButtonStyle.Secondary),
    new ButtonBuilder().setCustomId('btn_7').setLabel('按钮7').setStyle(ButtonStyle.Secondary),
    new ButtonBuilder().setCustomId('btn_8').setLabel('按钮8').setStyle(ButtonStyle.Secondary),
    new ButtonBuilder().setCustomId('btn_9').setLabel('按钮9').setStyle(ButtonStyle.Secondary),
    new ButtonBuilder().setCustomId('btn_10').setLabel('按钮10').setStyle(ButtonStyle.Secondary)
  );

// 执行逻辑
await interaction.reply({ embeds: [embed] });
await new Promise(r => setTimeout(r, 5000));
await interaction.editReply({ components: [row, row2], embeds: [embed2] });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:35:23