What it does
A Discord music bot for playing music from YouTube and Spotify1 in voice channels. Full player controls — play, pause, skip, queue management — built for my friends and me.
Why I built it
My friends and I wanted seamless music playback during our D&D sessions in Discord. The existing bots either lacked features we wanted or locked them behind premium tiers.
I saw it as a chance to learn Java, work with real-time audio streaming, and build something we’d actually use regularly.
Tech stack
- Language: Java
- Discord API: JDA (Java Discord API)
- Audio: Lavalink (standalone audio node)
- Integrations: YouTube, Spotify, SoundCloud
- CI/CD: GitHub Actions (49 automated releases)
What I learned
- Working with Discord’s audio system and voice connections
- Lavalink architecture for scalable audio streaming
- Setting up CI/CD pipelines with GitHub Actions
- The Google Cloud Console and Spotify API
- Dealing with constantly changing APIs (Discord kept evolving features…)
Why it’s paused
After 168 commits and 49 releases, I’ve paused active development.
The problem: YouTube continuously updates their anti-bot mechanisms, specifically around signature decryption for audio streams. Keeping up requires constant adaptation.
The tradeoff: The maintenance burden of fighting YouTube’s protections outweighs the benefit for a personal project. Even major projects like youtube-dl face this ongoing battle.
What would be needed to continue:
- Proxy rotation infrastructure
- Regular monitoring of YouTube API changes
- Potentially switching to alternative audio sources
- Or a convoluted workaround: running Spotify/YouTube in a VM, controlling playback via automation, and routing audio through a virtual device
My decision: Rather than sink more time into an arms race, I paused the project. The bot worked well for years and the codebase demonstrates solid engineering — that’s a success.
-
Spotify’s API doesn’t allow direct playback — only metadata access and playback control for logged-in users. So I grabbed song metadata from Spotify links and used it to search YouTube instead. ↩︎