Free, Self-Hosted Discord Shot Caller & Voice Relay Bot¶
go-discord-caller captures your shot caller's voice and broadcasts it live to multiple speaker bots — across one or many Discord servers at once. It supports single-caller broadcast, hub-and-spoke, and full multi-channel conference modes with mix-minus audio mixing and Discord's DAVE end-to-end encryption.
Try the hosted bot (demo) View on GitHub
The hosted demo is for evaluation and has a limited number of speakers. Self-host for unlimited speakers and servers.
Why use it¶
Free vs paid shot-caller bots →
- Free & open source (Apache-2.0) — no monthly fee, no trial wall.
- Unlimited servers & speakers — inter-guild relay across any number of Discord servers; one speaker bot per voice channel, as many as you want.
- Three caller modes — one-caller broadcast, hub-and-spoke, or full conference with mix-minus echo prevention.
- End-to-end encrypted audio — uses Discord's DAVE E2EE voice protocol via godave / libdave.
- Self-hosted & private — runs in Docker; bindings persist in a YAML store you control.
- Localized — slash commands and setup UI in 7 languages (English, Español, Deutsch, Français, Português, Polski, Русский).
How it works¶
One owner / caller bot listens in a voice channel and captures audio from users with a configured role, then fans it out to a pool of speaker bots, each playing back in its own channel — in the same server or in allied servers via a relay code.
graph TB
subgraph Discord Guild
CR["🎙️ Capture Role - 'caller'"]
subgraph Owner Bot
OB["🤖 Owner / Caller Bot"]
OCH["🔊 Owner Voice Channel"]
end
subgraph Speaker Bots
SP1["📢 Speaker Bot 1"]
SP2["📢 Speaker Bot 2"]
SP3["📢 Speaker Bot N"]
SCH1["🔉 Speaker Channel 1"]
SCH2["🔉 Speaker Channel 2"]
SCH3["🔉 Speaker Channel N"]
end
end
CR -- "🗣️ user with role speaks" --> OCH
OB -- "👂 listens & captures audio" --> OCH
OB -- "📡 relays audio frames" --> SP1
OB -- "📡 relays audio frames" --> SP2
OB -- "📡 relays audio frames" --> SP3
SP1 -- "▶️ plays back" --> SCH1
SP2 -- "▶️ plays back" --> SCH2
SP3 -- "▶️ plays back" --> SCH3
See the detailed voice flow and end-to-end latency breakdown.
Caller modes¶
Who hears who depends on the mode (🟢 solid = can hear, 🔇 red dashed = cannot hear).
flowchart TB
subgraph M1["1️⃣ One caller — /start mode:one"]
direction LR
O1["🎙️ Owner"] -->|"🟢 hears"| A1["🔊 Speaker 1"]
O1 -->|"🟢 hears"| B1["🔊 Speaker 2"]
A1 -.->|"🔇 can't"| O1
B1 -.->|"🔇 can't"| O1
A1 -.->|"🔇 can't"| B1
end
subgraph M2["2️⃣ Many callers — /start mode:many"]
direction LR
O2["🎙️ Owner"] <-->|"🟢"| A2["🔊 Speaker 1"]
O2 <-->|"🟢"| B2["🔊 Speaker 2"]
A2 <-->|"🟢"| B2
end
subgraph M3["3️⃣ One ↔ many / star — /start mode:one-many"]
direction LR
O3["🎙️ Owner ⭐ hub"] -->|"🟢 owner → all"| A3["🔊 Speaker 1"]
O3 -->|"🟢 owner → all"| B3["🔊 Speaker 2"]
A3 -->|"🟢 → owner"| O3
B3 -->|"🟢 → owner"| O3
A3 -.->|"🔇 can't"| B3
B3 -.->|"🔇 can't"| A3
end
M1 ~~~ M2
M2 ~~~ M3
linkStyle 0,1,5,6,7,8,9,10,11 stroke:#22c55e,stroke-width:3px
linkStyle 2,3,4,12,13 stroke:#ef4444,stroke-width:1.5px,stroke-dasharray:4
- 1️⃣ One caller — the owner talks, speakers only listen and can't talk back.
- 2️⃣ Many callers — full conference: everyone hears everyone (mix-minus echo prevention).
- 3️⃣ One ↔ many / star — the owner is the hub: it hears all speakers, but each speaker only hears the owner, not each other.
Quick start (Docker)¶
docker run -d \
-e DISCORD_OWNER_BOT_TOKEN=your-owner-token \
-e DISCORD_SPEAKER_BOT_TOKEN_1=your-speaker-1-token \
-e STORE_PATH=/data/store.yaml \
-v $(pwd)/data:/data \
sealbro/go-discord-caller
Then run /setup in your server to bind the capture role, manager role, owner channel, and speaker bots — no config files needed. Full instructions are in the README on GitHub.
Built for gaming guilds¶
Your shot caller speaks once and every squad hears the call instantly — no repeating yourself across channels. It's tactical voice communication and multi-squad coordination for PvP battles, guild wars, sieges, node wars, and competitive raids, with cross-server voice relay to unite allied guilds under a single command.
Works with your favorite games¶
A game-agnostic Discord voice command system — it works for any guild on any title, including Throne and Liberty, World of Warcraft, Guild Wars 2, Black Desert Online, Albion Online, New World, and EVE Online.
Use cases¶
- Gaming guilds & alliances — a shot caller's voice reaches every squad channel across allied servers during raids, sieges, node wars, and PvP.
- Events & town halls — broadcast one speaker to many listening rooms.
- Cross-community relays — link two or more Discord servers under a single voice command with a shared relay code.