Discord Bot报错DiscordAPIError[50035]:表单主体无效求助
解决Discord.js工单机器人的
name[BASE_TYPE_REQUIRED]错误 错误原因
你遇到的DiscordAPIError[50035]: Invalid Form Body name[BASE_TYPE_REQUIRED]: This field is required错误,本质是频道类型参数格式不符合Discord API要求,导致API无法正确解析请求参数,进而误判为缺少name字段。
在Discord.js v14及以上版本中,创建频道时的type字段必须使用ChannelType枚举值,而不是字符串(比如"GUILD_TEXT")。你的代码中使用了字符串类型的频道标识,触发了API参数验证错误。
修复步骤
1. 导入ChannelType枚举
在ticket_system.js文件的顶部导入语句中,添加ChannelType:
const { Client, MessageEmbed, MessageActionRow, MessageButton, Modal, TextInputComponent, ChannelType // 新增此行 } = require("discord.js");
2. 修改频道创建的type参数
找到创建工单频道的代码段,将type: "GUILD_TEXT"替换为type: ChannelType.GuildText:
await interaction.guild.channels .create(ticketname, { type: ChannelType.GuildText, // 替换原有的"GUILD_TEXT" topic: `ticket of ${interaction.user.tag}`, parent: settings.ticketCategory || interaction.channel.parentId, permissionOverwrites: [ // ... 原有权限配置 ], })
3. 额外检查(可选但建议)
- 确认
settings.js中的所有ID(频道ID、角色ID、服务器ID)都是有效且存在的,示例中的超长ID(如54654646472135798721)不符合Discord ID的长度规范,需要替换为你服务器的真实ID。 - 确保你的Discord.js版本与教程一致,如果教程使用的是v13,而你安装了v14,也会出现参数不兼容问题(v13支持字符串类型的频道标识,但v14强制要求枚举)。
验证修复
修改完成后重启机器人,尝试创建工单,此时应该能正常生成频道,不会再触发name字段缺失的错误。
内容的提问来源于stack exchange,提问作者M9k
相关产品推荐
相关产品推荐

