Discord ad-hoc radio streams never auto-dismiss when the voice channel empties #214

Open
opened 2026-10-04 18:10:01 -04:00 by logan · 0 comments
Owner

Follow-up left open by the feat/discord-system PR (server-26#203/#204, node-26#25).

discord_streams has mode: adhoc|persistent. Today the only difference is in the reconciler: when its node goes away an ad-hoc stream is stopped, a persistent one is re-placed. The design (design-canvas/discord-system-notes.md, Permissions & abuse) also says ad-hoc streams auto-dismiss after N minutes with no humans in the voice channel. Not built: nothing watches on_voice_state_update in the server bot, so an ad-hoc /join left in an empty channel holds a radio bot token and ~64 kbps of the node's uplink until someone runs /leave.

Fix direction: server bot tracks human member count per streamed channel (needs the voice_states intent, already in Intents.default()), and after idle_minutes with zero humans calls POST /discord/guilds/{id}/stop with that channel. Persistent streams are exempt.

Follow-up left open by the feat/discord-system PR (server-26#203/#204, node-26#25). `discord_streams` has `mode: adhoc|persistent`. Today the only difference is in the reconciler: when its node goes away an ad-hoc stream is stopped, a persistent one is re-placed. The design (design-canvas/discord-system-notes.md, Permissions & abuse) also says ad-hoc streams auto-dismiss after N minutes with no humans in the voice channel. Not built: nothing watches `on_voice_state_update` in the server bot, so an ad-hoc `/join` left in an empty channel holds a radio bot token and ~64 kbps of the node's uplink until someone runs `/leave`. Fix direction: server bot tracks human member count per streamed channel (needs the `voice_states` intent, already in `Intents.default()`), and after `idle_minutes` with zero humans calls `POST /discord/guilds/{id}/stop` with that channel. Persistent streams are exempt.
logan added the area/discord
priority
p3
type
feature
labels 2026-10-05 02:05:04 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: logan/server-26#214