Problem
Voice is transcribed and logged but never forwarded to the agent as an inbound message until the user explicitly runs /voice join. The _voice_input_callback is only set in _handle_voice_channel_join, not at adapter connect time. This affects any path where the bot joins voice without using the slash command.
Fix
In gateway/run.py, after _sync_voice_mode_state_to_adapter(adapter), also set:
if hasattr(adapter, "_voice_input_callback"):
adapter._voice_input_callback = self._handle_voice_channel_input
Impact
Voice transcripts from auto-joined or programmatically-joined channels are silently dropped. Users hear themselves but get no response.
Environment
Windows 10, Hermes v0.18.1, DeepSeek V4 Pro
Problem
Voice is transcribed and logged but never forwarded to the agent as an inbound message until the user explicitly runs /voice join. The _voice_input_callback is only set in _handle_voice_channel_join, not at adapter connect time. This affects any path where the bot joins voice without using the slash command.
Fix
In gateway/run.py, after _sync_voice_mode_state_to_adapter(adapter), also set:
Impact
Voice transcripts from auto-joined or programmatically-joined channels are silently dropped. Users hear themselves but get no response.
Environment
Windows 10, Hermes v0.18.1, DeepSeek V4 Pro