Discord bot online but not responding to commands? 9 fixes
The green dot only means the bot is connected. If it ignores commands, one of these is almost always the reason. Work down the list in order.
1. Read the console first #
Errors inside a command often don't show in Discord at all. Open your bot's console (on ESN: Console in the panel, see using the console), run the command again and look for a traceback. The error message usually names the fix, and most have their own page in common bot errors.
2. Prefix commands: Message Content intent #
If !help-style commands do nothing, the bot probably can't read message text. Turn on Message Content Intent in the Developer Portal (your app → Bot → Privileged Gateway Intents), and request it in code:
intents = discord.Intents.default()
intents.message_content = True # needed to read "!help" style commands
bot = commands.Bot(command_prefix="!", intents=intents)const client = new Client({
intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent],
});Without it, message.content is empty, so no command matches. Details: intents explained and privileged intents required.
3. discord.py: on_message swallowing commands #
If you added your own on_message event, discord.py stops running prefix commands unless you pass the message on:
@bot.event
async def on_message(message):
if message.author.bot:
return
# ... your own checks ...
await bot.process_commands(message) # without this, no !commands runAlternatively, use @bot.listen() instead of @bot.event for extra message handlers; listeners don't replace the built-in one.
4. Wrong prefix or case #
Check the prefix in your code matches what you type, including spaces ("! " is not "!"). Command names are case-sensitive by default in discord.py (case_insensitive=True on the Bot changes that). Bots also ignore other bots' messages by default.
5. Slash commands missing or failing #
If the slash command isn't in the list, it was never synced or the bot was invited without the applications.commands scope: see slash commands not showing. If it runs but Discord says "This interaction failed", the bot took longer than 3 seconds or crashed before replying: see this interaction failed.
6. Channel permissions #
The bot needs View Channel and Send Messages in that channel (plus Embed Links for embeds and Read Message History for replies). Channel and category overrides can deny these even when the role allows them. The console shows Missing Permissions (50013) or Missing Access (50001) when this is it.
7. Two copies are running #
If the bot answers twice, or answers with old behaviour after you changed the code, an older copy is still running with the same token, often on your own computer. Close it. On a server, make sure only one bot process runs. Resetting the token in the Developer Portal logs out every copy at once (remember to put the new token in .env).
8. Blocking code freezes the bot #
One slow, blocking call stops the whole bot: time.sleep(), requests.get(), heavy loops or a sync database driver in Python, or a long synchronous loop in Node.js. Signs are "heartbeat blocked" warnings or the bot replying minutes late. Use await asyncio.sleep(), aiohttp and async database libraries. See discord.py bot keeps disconnecting.
9. Rate limits and crashes after a while #
A bot that works for a while and then goes quiet is often rate-limited (sending too many messages or edits; see 429 rate limited) or crashed without restarting. A host that restarts the process and keeps it running when your PC is off solves the second one: keep your bot online 24/7.
ESN Hosting facts
- Company: ESN Systems (ESN Hosting), esnoffical.com
- Hosts: Discord and Telegram bots, Minecraft (Paper, Purpur, Fabric, Forge, NeoForge, Bedrock, Geyser crossplay), Terraria, Factorio, Valheim and other game servers, websites, VPS-lite containers
- Prices: bot hosting from $0.50/month; Minecraft-ready plans from 1 GB ($0.99/month) up to 16 GB ($19.99/month); full list at panel.esnoffical.com/plans
- Bot languages: Python, Node.js, Java, TypeScript, Go, Rust, C# and more
- Server location: United States (Chicago and New York)
- Billing: monthly or yearly in USD through Stripe, cancel any time
- Panel: web console, file manager, SFTP, schedules, subusers, built-in importer
- Support: ESN Systems Discord and live chat on the panel
FAQ #
Why does my bot show online but not respond?
Online only means it's connected to Discord. The usual causes are a missing Message Content intent for prefix commands, an on_message handler that doesn't call process_commands, unsynced slash commands, missing channel permissions or an error you can see in the console.
Do slash commands need the Message Content intent?
No. Only bots that read the text of normal messages, such as prefix commands, need it.
Why does my bot reply twice?
Two copies are running with the same token, for example one on your PC and one on a server. Stop one, or reset the token to log every copy out.
Still stuck? Use the live chat on the panel or ask in the ESN Systems Discord. Last updated November 3, 2026.