wip music bot for mumble
Find a file
2026-03-17 12:27:09 +01:00
commands feat: add websocket server for reverb interfacing 2026-03-16 16:34:22 +01:00
handlers feat: add FLAC download and shuffle queue 2026-03-12 15:52:49 +01:00
reverb_types feat: add websocket server for reverb interfacing 2026-03-16 16:34:22 +01:00
scrobbling feat: merge last.fm commands, add disconnecting account 2026-02-19 18:38:36 +01:00
.env.example feat: add websocket server for reverb interfacing 2026-03-16 16:34:22 +01:00
.gitignore feat: add websocket server for reverb interfacing 2026-03-16 16:34:22 +01:00
certificate.py feat: generate mumble certificate files 2026-02-20 20:33:42 +01:00
filter_rules.py fix: track cleanup 2026-03-11 18:11:09 +01:00
LICENSE chore: license 2026-02-18 21:49:52 +01:00
main.py feat: add websocket server for reverb interfacing 2026-03-16 16:34:22 +01:00
managers.py fix: double removal on websocket remove_song call 2026-03-17 12:27:09 +01:00
pyproject.toml feat: add websocket server for reverb interfacing 2026-03-16 16:34:22 +01:00
README.md add Windows compatibility disclaimer 2026-03-16 16:54:41 +01:00
utils.py Revert "revert 37c84f2b81" 2026-03-11 18:09:32 +01:00

reverb

mumble music bot

Features

  • Play music from YouTube and Spotify*
  • Queue management
  • Last.fm scrobbling
  • WebSocket API for externally controlling the queue

*uses YouTube for content

Setup

Prerequisites

  • uv
  • ffmpeg (with opus support)
  • a mumble server
  • Linux (Windows is not supported)

Installation

  1. Clone the repository
  2. Rename .env.example to .env and configure it

Running

uv run main.py

Commands

  • play <query> - Search YouTube and add songs to queue
  • queue - Show current queue
  • skip (tracks) - Skip current song
  • remove (track number) - Remove track from queue
  • pause/resume - Pause/resume playback
  • stop - Clear queue
  • loop - Toggle loop mode
  • lastfm - Configure scrobbling with last.fm

WebSocket API

Connect to the WebSocket server (configured via SOCKET_HOST, SOCKET_PORT, SOCKET_AUTH) to receive real-time updates and control the bot.

Authentication

Each WebSocket request requires the "auth" field to be set. You can check if the auth is correct by sending

{"type": "verify_auth", "auth": "YOUR_AUTH_KEY"}

This will send back valid auth or invalid auth.

The auth is defined by SOCKET_AUTH in the .env file.

State Updates

The server broadcasts state updates on queue changes:

{
  "type": "state",
  "value": {
    "paused": false,
    "song_queue": [Song, Song, Song], // these ones have the source field passed, stupid, i know
    "metadata_queue": [Song, Song, Song], // these ones don't and are waiting for the source to be downloaded and processed
    "current_song": Song,
    "loop": false,
    "time": 123.45 // how long the song has been playing for, in seconds
  }
}

Song Object

{
  "id": "uuid",
  "artist": "Artist Name",
  "title": "Song Title",
  "duration": 180,
  "url": "https://...",
  "source": "relative path to mp3 on host, irrelevant"
}

Notes

  • This project is under development
  • Last.fm scrobbling requires users to be authenticated and for API keys to be configured in .env
  • WebSocket server requires SOCKET_HOST, SOCKET_PORT, and SOCKET_AUTH to be configured