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

Discord.js V14 模态框开发报错求助

排查Discord.js V14模态框两类常见错误

一、DiscordAPIError[50035]:组件类型不合法

  • 确认组件类型枚举使用正确:必须使用Discord.js V14提供的ComponentType枚举指定组件类型,禁止手动传入数字或错误字符串。比如文本输入框对应ComponentType.TextInput,不要自行定义类型值。
  • 严格遵循模态框组件结构:模态框仅允许包含由ActionRowBuilder包裹的TextInputBuilder组件,不能直接添加按钮、选择菜单等其他类型组件到模态框内。正确结构示例:
const { ModalBuilder, ActionRowBuilder, TextInputBuilder, TextInputStyle } = require('discord.js');

const applicationModal = new ModalBuilder()
  .setCustomId('apply-modal')
  .setTitle('申请信息填写')
  .addComponents(
    new ActionRowBuilder().addComponents(
      new TextInputBuilder()
        .setCustomId('apply-reason')
        .setLabel('申请理由')
        .setStyle(TextInputStyle.Paragraph)
        .setRequired(true)
    ),
    new ActionRowBuilder().addComponents(
      new TextInputBuilder()
        .setCustomId('apply-contact')
        .setLabel('联系方式')
        .setStyle(TextInputStyle.Short)
        .setRequired(true)
    )
  );
  • 检查组件嵌套层级:每个TextInputBuilder必须单独被ActionRowBuilder包裹,同一ActionRow内不能放置多个文本输入框(Discord官方限制)。

二、InteractionAlreadyReplied:交互已回复

  • 避免重复响应交互:排查代码中是否对同一交互多次调用reply()、deferReply()、showModal()等响应方法。比如触发模态框的命令中如果已调用interaction.reply(),后续处理模态框提交时又重复响应原交互。
  • 增加回复状态判断:在回复前通过interaction.isReplied()或interaction.deferred判断交互状态,选择合适的响应方式:
// 处理模态框提交逻辑
async function handleModalSubmit(interaction) {
  if (interaction.customId === 'apply-modal') {
    const reason = interaction.fields.getTextInputValue('apply-reason');
    // 根据交互状态选择回复方式
    if (!interaction.isReplied() && !interaction.deferred) {
      await interaction.reply({ content: `申请已收到:${reason}`, ephemeral: true });
    } else {
      await interaction.followUp({ content: `申请已收到:${reason}`, ephemeral: true });
    }
  }
}
  • 正确触发模态框:触发模态框时直接调用interaction.showModal(modal)即可,无需额外调用interaction.reply(),因为showModal本身就是对交互的合法响应。错误示例及修正:
// 错误写法:重复响应
await interaction.reply({ content: '即将打开申请表单' });
await interaction.showModal(applicationModal);

// 正确写法:直接展示模态框
await interaction.showModal(applicationModal);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:32:48