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

Discord.js斜杠命令注册报错50035:name字段必填问题排查

故障原因

报错DiscordAPIError[50035]: Invalid Form Body且提示name[BASE_TYPE_REQUIRED]字段缺失,核心问题出在部署脚本的命令收集逻辑,和help.ts的命令定义本身无关:

  • 你在deploy-commands.ts中向commands数组压入的是整个命令模块对象(包含data、execute两个属性),但Discord注册接口要求数组元素直接是斜杠命令的定义结构,需要读取每个元素顶层的name、description等字段。你提交的对象顶层没有这些字段(字段都嵌套在data属性下),接口校验自然不通过。
  • 额外注意:SlashCommandBuilder生成的是类实例对象,不能直接传给接口,需要调用toJSON()方法转换为接口可识别的纯JSON结构。
修复方案

只需要修改deploy-commands.ts中的命令收集逻辑,同时补全正确的TypeScript类型定义即可:

  1. 修正Command类型定义,替换原有错误的类型声明:
import { SlashCommandBuilder, CommandInteraction, Client } from 'discord.js';

type Command = {
  data: SlashCommandBuilder;
  execute: (interaction: CommandInteraction, client: Client) => Promise<void>;
};
  1. 修改循环收集命令的逻辑,压入序列化后的命令定义数据,替换原有错误的push逻辑:
const commands = [];

for (const module of Object.values<Command>(commandModules)) {
  // 只传入命令的data部分,且序列化为API支持的JSON格式
  commands.push(module.data.toJSON());
}

修改完成后重新运行deploy-commands.ts,即可正常完成所有斜杠命令的注册,不会再触发格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:33:18