



























@@ -961,14 +961,23 @@ Discord has two distinct voice surfaces: realtime **voice channels** (continuous
961961962962### Voice channels
963963964-Requirements:
964+Setup checklist:
965965966-- Enable native commands (`commands.native` or `channels.discord.commands.native`).
967-- Configure `channels.discord.voice`.
968-- The bot needs Connect + Speak permissions in the target voice channel.
966+1. Enable Message Content Intent in the Discord Developer Portal.
967+2. Enable Server Members Intent when role/user allowlists are used.
968+3. Invite the bot with `bot` and `applications.commands` scopes.
969+4. Grant Connect, Speak, Send Messages, and Read Message History in the target voice channel.
970+5. Enable native commands (`commands.native` or `channels.discord.commands.native`).
971+6. Configure `channels.discord.voice`.
969972970973Use `/vc join|leave|status` to control sessions. The command uses the account default agent and follows the same allowlist and group policy rules as other Discord commands.
971974975+```bash
976+/vc join channel:<voice-channel-id>
977+/vc status
978+/vc leave
979+```
980+972981Auto-join example:
973982974983```json5
@@ -977,6 +986,7 @@ Auto-join example:
977986 discord: {
978987 voice: {
979988 enabled: true,
989+ model: "openai/gpt-5.4-mini",
980990 autoJoin: [
981991 {
982992 guildId: "123456789012345678",
@@ -987,7 +997,7 @@ Auto-join example:
987997 decryptionFailureTolerance: 24,
988998 tts: {
989999 provider: "openai",
990- openai: { voice: "alloy" },
1000+ openai: { voice: "onyx" },
9911001 },
9921002 },
9931003 },
@@ -998,12 +1008,24 @@ Auto-join example:
9981008Notes:
999100910001010- `voice.tts` overrides `messages.tts` for voice playback only.
1011+- `voice.model` overrides the LLM used for Discord voice channel responses only. Leave it unset to inherit the routed agent model.
1012+- STT uses `tools.media.audio`; `voice.model` does not affect transcription.
10011013- Voice transcript turns derive owner status from Discord `allowFrom` (or `dm.allowFrom`); non-owner speakers cannot access owner-only tools (for example `gateway` and `cron`).
10021014- Voice is enabled by default; set `channels.discord.voice.enabled=false` to disable it.
10031015- `voice.daveEncryption` and `voice.decryptionFailureTolerance` pass through to `@discordjs/voice` join options.
10041016- `@discordjs/voice` defaults are `daveEncryption=true` and `decryptionFailureTolerance=24` if unset.
10051017- OpenClaw also watches receive decrypt failures and auto-recovers by leaving/rejoining the voice channel after repeated failures in a short window.
1006-- If receive logs repeatedly show `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, this may be the upstream `@discordjs/voice` receive bug tracked in [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419).
1018+- If receive logs repeatedly show `DecryptionFailed(UnencryptedWhenPassthroughDisabled)` after updating, collect a dependency report and logs. The bundled `@discordjs/voice` line includes the upstream padding fix from discord.js PR #11449, which closed discord.js issue #11419.
1019+1020+Voice channel pipeline:
1021+1022+- Discord PCM capture is converted to a WAV temp file.
1023+- `tools.media.audio` handles STT, for example `openai/gpt-4o-mini-transcribe`.
1024+- The transcript is sent through normal Discord ingress and routing.
1025+- `voice.model`, when set, overrides only the response LLM for this voice-channel turn.
1026+- `voice.tts` is merged over `messages.tts`; the resulting audio is played in the joined channel.
1027+1028+Credentials are resolved per component: LLM route auth for `voice.model`, STT auth for `tools.media.audio`, and TTS auth for `messages.tts`/`voice.tts`.
1007102910081030### Voice messages
10091031@@ -1130,7 +1152,7 @@ openclaw logs --follow
11301152- watch logs for:
11311153 - `discord voice: DAVE decrypt failures detected`
11321154 - `discord voice: repeated decrypt failures; attempting rejoin`
1133-- if failures continue after automatic rejoin, collect logs and compare against [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419)
1155+- if failures continue after automatic rejoin, collect logs and compare against the upstream DAVE receive history in [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) and [discord.js #11449](https://github.com/discordjs/discord.js/pull/11449)
1134115611351157</Accordion>
11361158</AccordionGroup>
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。