Discord slash commands not showing up? How to register and sync them
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 #
- Re-invite the bot with the
applications.commandsscope (see add a bot to your server). - Make sure your code registers the commands when it starts, and watch the Console for errors while it does.
- For testing, register to one server (guild commands); they update right away.
- Fully restart Discord (or press Ctrl+R on desktop) so it reloads the command list.
- 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 commands | Global commands | |
|---|---|---|
| Where they show | One server | Every server the bot is in, and DMs |
| Best for | Testing | Your 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.