Home > Software engineering >  Discord.js not registering new slash commands because application names must be unique
Discord.js not registering new slash commands because application names must be unique

Time:06-12

Discord.js won't register my commands again, despite the fact they don't exist. I've verified that the commands don't exist by running:

rest.get(Routes.applicationCommands(clientId))
    .then(data => console.log(data));

with the only response being []

The error I get is this:

DiscordAPIError[50035]: Invalid Form Body
  method: 'PUT',
  url: 'https://discord.com/api/v9/applications/985234455717363762/commands',
  requestBody: {
    files: undefined,
    json: [
      [Object], [Object],
      [Object], [Object],
      [Object], [Object],
      [Object], [Object]
    ]
  }
}

The code (deploy-commands.js) looks like this:

const fs = require('node:fs');
const path = require('node:path');
const { REST } = require('@discordjs/rest');
const { Routes } = require('discord-api-types/v9');
const { clientId, token } = require('./config.json');

const commands = [];
const commandsPath = path.join(__dirname, 'commands');
const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js'));

for (const file of commandFiles) {
    const filePath = path.join(commandsPath, file);
    const command = require(filePath);
    commands.push(command.data.toJSON());
}

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

rest.put(Routes.applicationCommands(clientId), { body: commands })
    .then(() => console.log('Successfully registered application commands.'))
    .catch(console.error);

With this filetree:

discord-bot/
|-- Commands/
    |-- avatar.js
    |-- beep.js
    |-- kick.js
    |-- options-info.js
    |-- ping.js
    |-- prune.js
    |-- server.js
    |-- user-info.js
|-- node_modules
|-- config.json
|-- deploy-commands.js
|-- index.js
|-- package-lock.json
|-- package.json

HELP!

CodePudding user response:

This error comes if you have 2 application commands with the same name, double check your command names and make sure every command has a unique name.

  • Related