This page covers the most common problems people run into when self-hosting JoBot and how to fix them. Work through the checklist for whichever issue applies to you. If nothing here resolves your problem, check the FAQ for additional context.Documentation Index
Fetch the complete documentation index at: https://docs.jobot.jeppdev.com/llms.txt
Use this file to discover all available pages before exploring further.
Bot doesn't respond to mentions
Bot doesn't respond to mentions
JoBot is not responding when you mention it in a channel. Work through these checks in order:
-
Is the bot online? Check that the Docker container is running:
The
jobotservice should show a status ofUp. If it’s not, start it withdocker compose up -d. - Does the bot have channel permissions? Open the channel settings in Discord and confirm the bot’s role has both Read Messages / View Channel and Send Messages permissions. Without these, the bot can see nothing and respond to nothing.
- Is the Message Content privileged intent enabled? JoBot needs to read the content of messages to respond to mentions. Go to the Discord Developer Portal, open your bot application, navigate to Bot, and confirm that Message Content Intent is toggled on under Privileged Gateway Intents.
Music doesn't play / bot won't join voice
Music doesn't play / bot won't join voice
JoBot joins the voice channel but plays nothing, or refuses to join at all. Check the following:
-
Is the Lavalink container running? JoBot depends on Lavalink for audio playback. Verify it’s up:
The
lavalinkservice must showUp. Restart it withdocker compose restart lavalinkif needed. -
Do the passphrases match? The
LAVALINK_PASSPHRASEenvironment variable must be identical in both thejobotcontainer and thelavalinkcontainer. A mismatch causes a silent authentication failure. Check both values in yourdocker-compose.ymlor.envfile. - Does the bot have voice channel permissions? In the voice channel settings, confirm the bot’s role has the Connect and Speak permissions. Without them, the bot cannot join or transmit audio.
TTS isn't working
TTS isn't working
The bot won’t speak in voice even when triggered. Check the following:
-
Are the ElevenLabs credentials set? Both
ElevenLabs__ApiKeyandElevenLabs__VoiceIdmust be set in your environment. If either is missing or blank, TTS is silently disabled. - Is the bot already in a voice channel? The bot must join a voice channel before it can speak. Use the appropriate join command first, then trigger TTS again.
- Is your ElevenLabs plan active with available characters? Check your ElevenLabs account to confirm your subscription is active and you have remaining character quota for the current billing period. Exhausted quotas cause TTS requests to fail silently.
Settings changes aren't taking effect
Settings changes aren't taking effect
You ran a
/settings set command and it confirmed success, but the bot still behaves the same way.- Settings apply immediately — no bot restart is required. If the bot confirmed the change with an ephemeral message, the setting was saved.
- Check your permissions. If the command appeared to succeed but nothing changed, verify you have the correct Discord permission for the command you used. See the permissions summary for the full list.
- Run
/settings viewto confirm the current stored values match what you set.
Bot shows 'Failed to join voice channel'
Bot shows 'Failed to join voice channel'
JoBot attempted to join a voice channel but returned an error. Check the following:
- Open the voice channel’s permission settings in Discord and confirm the bot’s role has both Connect and Speak permissions in that specific channel.
- Channel-level permission overrides can block a role even if the server-level permissions are correct. Check for any explicit Deny overrides on the bot’s role for that channel.
Subsonic music search returns no results
Subsonic music search returns no results
You searched for a song and the bot returned nothing, or an error, when Subsonic is your configured source.
-
Is
SUBSONIC_BASE_URLcorrect? Verify the URL in your environment config is the full base URL of your Subsonic server (e.g.,https://music.example.com) and that it is reachable from inside the bot container: - Are the Subsonic credentials correct? Double-check the username and password (or token) you have configured. An authentication failure returns an empty result set rather than an error in some Subsonic implementations.
- Has your Subsonic library been indexed? Log in to your Subsonic web UI and trigger a library scan under Settings → Media Folders if your library is new or has not been scanned recently.
Database errors on startup
Database errors on startup
JoBot fails to start and the logs show SQLite or migration errors.
-
Is
ConnectionStrings__JoBotpointing to a writable path? The path must be accessible and writable by the process running inside the container. Example: -
Is the volume mounted correctly? The directory containing the database file must be mounted as a Docker volume so data persists between restarts and the container can write to it. Check your
docker-compose.yml:
docker compose up -d again.If none of the above resolves your issue, visit the FAQ for answers to broader questions about JoBot’s configuration and capabilities.