ESN Docs

Docs › Discord bots

Discord slash commands not showing up? How to register and sync them

2 min readUpdated Oct 31, 2026

Why your bot's slash commands don't appear and how to fix it: the applications.commands scope, syncing in discord.py, registering in discord.js, and global vs guild commands.

Slash commands live on Discord's side, not only in your code. Your bot has to register (sync) them with Discord, and the bot has to be invited with the right scope. If either step is missing, nothing shows when you type /.

Checklist #

  1. Re-invite the bot with the applications.commands scope (see add a bot to your server).
  2. Make sure your code registers the commands when it starts, and watch the Console for errors while it does.
  3. For testing, register to one server (guild commands); they update right away.
  4. Fully restart Discord (or press Ctrl+R on desktop) so it reloads the command list.
  5. Check that you have permission to use the command in that channel (Server Settings, Integrations).

discord.py #

Commands made with app_commands or @bot.tree.command are only sent to Discord when you call await bot.tree.sync(). A common place is setup_hook. To sync to one test server first, copy the global commands to it with bot.tree.copy_global_to(guild=discord.Object(id=YOUR_SERVER_ID)) and then sync with guild= the same object. Don't sync on every message or command; once per start is enough.

discord.js #

Register commands with the REST API, usually in a separate deploy script: rest.put(Routes.applicationGuildCommands(clientId, guildId), { body: commands }) for one server, or Routes.applicationCommands(clientId) for all servers. Run it again whenever you add or change a command. Handling the interaction in your bot is a separate step.

Global vs guild commands #

Guild commandsGlobal commands
Where they showOne serverEvery server the bot is in, and DMs
Best forTestingYour finished bot

If a command shows twice, you probably registered it both globally and to the server. Clear the guild copy by registering an empty list to that server.

Still nothing? #

Read the Console for errors such as missing access or an invalid form body (often a name with capitals or spaces; command names must be lowercase). More fixes: common bot errors.

FAQ #

Why are my slash commands not showing? #

Usually the commands were never synced or registered, or the bot was invited without the applications.commands scope.

How do I sync slash commands in discord.py? #

Call await bot.tree.sync() once when the bot starts, for example in setup_hook.

Why does my slash command show twice? #

It is registered both globally and to that server. Remove one of them.

Do I need to re-invite my bot for slash commands? #

Only if the original invite didn't include the applications.commands scope.

Still stuck? Use the live chat on the panel or ask in the ESN Systems Discord. Last updated October 31, 2026.