Music 🎵
Type a song name, and BMO joins your voice channel and plays it — with a shared queue everyone can add to.
What it does
The music module turns any voice channel into a shared jukebox. A member types
!play followed by a song name or a YouTube link, BMO hops into their voice
channel, and the song plays for everyone in it. More requests stack up in a queue and play
one after another, so a movie night or hangout can have a soundtrack without anyone
screen-sharing a browser tab.
Unlike most BMO modules, music has no dashboard page and nothing to configure — it works entirely through chat commands. If the module is active on your server, members can start playing music immediately.
Music is an optional module that the bot's operator switches on when the bot is set up (it needs extra software on the machine running the bot). If the commands below get no response while the rest of BMO works, the module isn't enabled — ask in the support server, or if you host BMO yourself, setENABLE_MUSIC_COG=1 in the
bot's .env file.
Before you start
- Join a voice channel first. Every music command works from a normal text
channel, but
!playonly works if you are sitting in a voice channel — that's how BMO knows where to go. If you're not in one, it replies "Join a voice channel first." - BMO needs to be able to join and speak in that voice channel — check the channel's permission overrides if it never shows up.
- Music uses BMO's classic prefix commands: type them in chat starting with
!(orz!if another bot on your server also uses!).
Commands
| Command | Also works as | What it does |
|---|---|---|
!play <song or link> |
!p |
Searches YouTube for your text (or uses your link), adds the top result to the queue, and starts playing if nothing is on. BMO joins — or moves to — your voice channel. |
!skip |
— | Ends the current song immediately; the next queued song starts on its own. If nothing is playing, BMO says so. |
!queue |
!q |
Shows what's playing now and the next songs waiting (up to 10 are listed). |
!stop |
— | Stops the music, wipes the whole queue, and disconnects BMO from the voice channel. |
!stop is the "everyone's done" button — it throws away every
queued song, not just the current one. If you only want the next track, use !skip.
Requesting songs
Both of these work with !play:
- Just type what you want:
!play lofi hip hop radio— BMO searches YouTube and queues the first result. When the song starts, a "Now Playing" card shows the exact video it picked (with a link) and who requested it, so it's easy to tell if the search grabbed the wrong thing — just!skipand search with more words. - Paste a YouTube link:
!play https://www.youtube.com/watch?v=...— plays that exact video's audio.
YouTube is the supported source. Links from other sites may sometimes work (the downloader BMO uses understands many sites), but only YouTube gets the fallbacks and error handling described on this page, so stick to it for reliable results.
Playlist links queue one song, not the whole playlist. Playlist support is deliberately switched off in the player, so pasting a playlist URL adds a single track. To build a set, add songs one!play at a time — they stack in the
queue in the order people request them.
How the queue behaves
- One queue per server. Everyone in the server shares it, and anyone can add to it — there are no DJ roles or per-user limits.
- First come, first played. New requests go to the end of the line. Every
!playgets an "Added to queue" confirmation. - Songs advance automatically. When one ends (or is skipped), the next starts on its own and posts a fresh "Now Playing" card.
- The queue lives in memory. If the bot restarts or is stopped with
!stop, the queue is gone — there is no saved history to restore. !queueshows the next 10. Longer queues keep playing fine; the display just lists the first ten upcoming tracks.
!play from a
different voice channel, the bot moves to their channel and the music
moves with it. Agree on one hangout channel to avoid tug-of-war.
Sound quality
You don't have to do anything for this — it's automatic — but it explains a couple of things you might notice:
- Bitrate boost. When BMO joins, it tries to raise the voice channel's bitrate to the maximum (384 kbps) for cleaner audio, and puts the original value back when it leaves. This needs the Manage Channels permission — without it, music still plays at the channel's normal quality. How high the bitrate can actually go depends on your server's boost level, since Discord caps it.
- Loudness normalization. Songs are automatically evened out to a consistent volume, so a quiet acoustic track and a loud remix don't force everyone to ride their volume sliders.
- Stream repair. If the connection to the audio source hiccups, the player reconnects on its own rather than cutting the song short.
Troubleshooting
| What you see | What it means |
|---|---|
| "Join a voice channel first." | You ran !play while not in a voice channel. Join one and try again. |
| "YouTube blocked playback from this server (bot check)." | YouTube is refusing requests from the machine the bot runs on — common for bots on
hosting providers. Only the bot's operator can fix this, by pointing
YTDLP_COOKIES in the bot's .env at a cookies.txt
file exported from a logged-in browser. Cookies expire after a while, so this can come
back and need a fresh export. |
| "Could not start audio (ffmpeg)." | The machine running the bot is missing FFmpeg (the audio engine). A self-hoster needs to install it and make sure it's on the system PATH. |
| "Voice connection failed." / "Voice connection timed out." | BMO couldn't complete the voice handshake. Usually temporary — try again; if it persists, check that BMO can Connect to that channel. |
| Music commands get no reply at all | The music module isn't enabled on this bot — see the note at the top of this page. |
Current limitations
The music module is intentionally simple. Things it does not have yet:
- No pause or resume — a song plays through unless you
!skipor!stop. - No volume command — playback volume is fixed (use Discord's per-user volume slider on the bot: right-click BMO in the voice channel).
- No shuffle, loop, or repeat.
- No way to remove or reorder a single queued song —
!skipwhen it comes up, or!stopand rebuild. - No seeking to a timestamp within a song.
- No playlist import — playlist links queue only one track.