{"repo":"NousResearch/hermes-agent","public_id":"11349","display_label":"Discord docs corrections and voice slash UI fixes","summary":"A cluster of issues and pull requests addressing multiple documentation inaccuracies in Discord integration, including Echo Prevention mechanics, Server Members Intent behavior, SSRC mapping, and a missing `/voice join` option in the slash command UI.","subsystem":"docs","counts":{"members":5,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":3},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":20411},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-05-05T20:50:43+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.4},"fix_edges":[{"issue_number":11349,"pr_number":20411,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":11349,"title":"docs(discord): six documentation drifts vs actual behavior + `/voice join` missing from slash UI","url":null,"state":"closed"},{"kind":"pr","number":11350,"title":"docs(discord): correct six documentation drifts + add /voice join slash choice","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#11416","number":11416},{"kind":"pr","value":"#11349","number":11349}],"category":"uncategorized","implication":"needs_llm"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":11416,"title":"fix(discord): align voice docs and slash UI","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#11350","number":11350},{"kind":"pr","value":"#20411","number":20411}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":20411,"title":"docs(discord): fix Server Members Intent + SSRC-mapping drift + /voice join slash Choice (salvage #11350)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["gateway/platforms/discord.py","website/docs/user-guide/features/voice-mode.md"],"fix_hunks":[{"file":"gateway/platforms/discord.py","hunks":["@@ -2654,9 +2654,14 @@ async def slash_reload_skills(interaction: discord.Interaction):\n             await self._run_simple_slash(interaction, \"/reload-skills\")\n \n         @tree.command(name=\"voice\", description=\"Toggle voice reply mode\")\n-        @discord.app_commands.describe(mode=\"Voice mode: on, off, tts, channel, leave, or status\")\n+        @discord.app_commands.describe(mode=\"Voice mode: join, channel, leave, on, tts, off, or status\")\n         @discord.app_commands.choices(mode=[\n-            discord.app_commands.Choice(name=\"channel — join your voice channel\", value=\"channel\"),\n+            # `join` and `channel` both route to _handle_voice_channel_join in\n+            # gateway/run.py — expose both in the slash UI so autocomplete\n+            # matches what the docs advertise and what the runner accepts when\n+            # the command is typed as plain text.\n+            discord.app_commands.Choice(name=\"join — join your voice channel\", value=\"join\"),\n+            discord.app_commands.Choice(name=\"channel — join your voice channel (alias)\", value=\"channel\"),\n             discord.app_commands.Choice(name=\"leave — leave voice channel\", value=\"leave\"),\n             discord.app_commands.Choice(name=\"on — voice reply to voice messages\", value=\"on\"),\n             discord.app_commands.Choice(name=\"tts — voice reply to all messages\", value=\"tts\"),"]},{"file":"website/docs/user-guide/features/voice-mode.md","hunks":["@@ -281,10 +281,10 @@ In the [Developer Portal](https://discord.com/developers/applications) → your\n | Intent | Purpose |\n |--------|---------|\n | **Presence Intent** | Detect user online/offline status |\n-| **Server Members Intent** | Map voice SSRC identifiers to Discord user IDs |\n+| **Server Members Intent** | Resolve usernames in `DISCORD_ALLOWED_USERS` to numeric IDs (conditional) |\n | **Message Content Intent** | Read text message content in channels |\n \n-All three are required for full voice channel functionality. **Server Members Intent** is especially critical — without it, the bot cannot identify who is speaking in the voice channel.\n+**Message Content Intent** is required. **Server Members Intent** is only needed if your `DISCORD_ALLOWED_USERS` list uses usernames — if you use numeric user IDs, you can leave it OFF. Voice-channel SSRC → user_id mapping comes from Discord's SPEAKING opcode on the voice websocket and does **not** require the Server Members Intent.\n \n #### 3. Opus Codec\n \n"]}]},{"kind":"pr","number":78164,"title":"docs(discord): correct Echo Prevention mechanics + Server Members Intent conditional + close env-var docs class (resolves #11349)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"1cf156ed42","number":0}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false}],"trust":{"default_tier":"verified","includes_suggested":false}}