Open source · Free

Open Music

Your server's playlist, on autopilot.

Watches the channels you point it at, picks up Spotify and YouTube links, and quietly builds a shared Spotify playlist from what your server is actually listening to. Dedupes, handles albums and playlists, asks before iffy matches.

#listening · added to Spotify
Boys of Summer
Don Henley
Added
Heart of Gold
Neil Young
Already on list
YouTube — Live at Wembley...
YouTube · low confidence match
Review
Why a music link bot

Servers have shared taste.

Every Discord community ends up with a #listening or #music-recs channel. People drop links, people listen, the links scroll away. OpenMusic catches them and turns them into a real Spotify playlist your members can actually follow.

Watches what's already there
Point it at a channel and it picks up music links from regular conversation. No commands, no /addsong, no extra workflow.
Resolves YouTube to Spotify
YouTube link drops get matched to Spotify tracks via title cleanup and confidence scoring. High-confidence matches auto-add. Low-confidence ones go to a review queue.
Dedupes per playlist
Knows what's already on the playlist and won't re-add. Tracks processed messages so a restart doesn't re-import the last week of links.
Inside the bot

What it actually catches.

OpenMusic parses link types from message content and resolves them all to Spotify tracks. Bot messages and webhooks are ignored.

Spotify track links
Direct adds. The simplest case.
Spotify album links
Adds every track from the album.
Spotify playlist links
Imports every track from the source playlist.
YouTube video links
Extracts the title via oEmbed, cleans noise tokens (official video, lyrics, HD, remaster…), searches Spotify, and scores candidate matches.
Confidence threshold
High-confidence matches auto-add. Below threshold, the link goes to an unmatched queue for a human to approve or reject.
Unmatched review queue
/unmatched list shows pending matches. /unmatched approve and /unmatched reject resolve them.
History sync
/sync history backfills processing on the latest N messages per watched channel. Useful when first setting up.
Pause / resume
/pause and /resume toggle processing without removing watch channels.
Per-guild playlist
Each server has its own target playlist. Set it with /playlist set; show it with /playlist show.
OAuth token persistence
Spotify auth stays valid across restarts. Refresh tokens are stored and rotated; access tokens are never logged.
Commands

Commands

Slash commands only — no prefix, no message-content shenanigans beyond what's needed to read the watched channels.

/watch add
Add a channel to the watch list.
Mod
/watch remove
Remove a channel from the watch list.
Mod
/watch list
Show all currently watched channels.
Anyone
/playlist set
Set the Spotify playlist this guild adds to.
Mod
/playlist show
Show the current target playlist.
Anyone
/sync history
Process the latest N messages per watched channel.
Mod
/sync channel
Process the latest N messages from a specific channel.
Mod
/unmatched list
Show pending unmatched candidates.
Mod
/unmatched approve
Approve an unmatched candidate by ID.
Mod
/unmatched reject
Reject an unmatched candidate by ID.
Mod
/pause
Pause processing in this guild.
Mod
/resume
Resume processing in this guild.
Mod
/status
Show bot status — watched channels, playlist, processing state.
Anyone
/spotify auth_url
Generate the Spotify authorization URL.
Admin
/spotify auth_finish
Complete the OAuth flow and store the guild token.
Admin
FAQ

Quick questions.

Do I need a Spotify Premium account?
You need a Spotify account for the OAuth flow, but the playlist itself is just a regular Spotify playlist. Anyone can follow it from any tier — they just won't be able to listen offline without Premium.
Does it need privileged intents?
Yes — Message Content Intent is required so the bot can read music links from regular messages in watched channels. Enable it in the Discord Developer Portal under Bot → Privileged Gateway Intents.
Will it process every channel on my server?
No. Only channels added via /watch add are processed. Everything else is ignored.
What happens if YouTube → Spotify matching is wrong?
Below the confidence threshold, links go to an unmatched review queue instead of getting added. A mod can approve or reject pending candidates with /unmatched approve or /unmatched reject.
Is OpenMusic a module of Dungeon Keeper?
Yes — bundled inside Dungeon Keeper, where it shares config with the rest of the suite. As a standalone, it's the whole bot.
Can I run it myself?
Yep. Python 3.12+, discord.py, SQLite, and Spotify app credentials. The repo has the full setup including how to generate an initial refresh token.
Get the code

Self-host, or bundle.

OpenMusic is a Python bot with a SQLite store and Spotify OAuth. The repo walks through the Spotify app setup.

PYTHON 3.12+ · DISCORD.PY · SQLITE · SPOTIFY OAUTH
Also from Billybots

Other open-source modules.