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

Discord.js Slash Command注册代码报错,如何修复?

修正Discord.js斜线命令注册的「Invalid Form Body」错误

错误原因

你的代码错误地将SlashCommandBuilder实例用JSON.stringify()转成了字符串,而Discord API要求接收原生JavaScript对象而非字符串化的JSON,这直接触发了格式校验失败。

具体修正步骤

  1. 修改部署脚本的命令收集逻辑:
    将循环里的这一行:

    commands.push(JSON.stringify(command.data));
    

    替换为:

    commands.push(command.data.toJSON());
    

    (SlashCommandBuilder自带的.toJSON()方法会生成完全符合Discord API规范的结构对象)

  2. 验证命令文件格式
    确保./commands目录下的每个命令文件都正确导出SlashCommandBuilder实例,示例格式如下:

    const { SlashCommandBuilder } = require('discord.js');
    
    module.exports = {
        data: new SlashCommandBuilder()
            .setName('命令名') // 命令名不能含空格,长度1-32字符
            .setDescription('命令的简短描述') // 不能为空,长度1-100字符
            // 可添加其他命令选项
        ,
        async execute(interaction) {
            // 命令执行逻辑
        },
    };
    
  3. 额外检查项

    • 确认config.json中的clientId、token与机器人后台信息完全一致
    • 命令的name和description必须严格符合Discord的规则(无空格、长度合规)

修正后的完整部署脚本

const { REST, Routes } = require('discord.js');
const { clientId, token } = require('./config.json');
const fs = require('node:fs');

const commands = [];
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));

for (const file of commandFiles) {
    const command = require(`./commands/${file}`);
    commands.push(command.data.toJSON()); // 修正后的代码
}

const rest = new REST({ version: '10' }).setToken(token);

(async () => {
    try {
        console.log(`开始刷新 ${commands.length} 个应用(/)命令`);

        const data = await rest.put(
            Routes.applicationCommands(clientId),
            { body: commands },
        );

        console.log(`成功重载 ${data.length} 个应用(/)命令`);
    } catch (error) {
        console.error(error);
    }
})();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:20:28