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.


  1. 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. ↩︎