From 0f150cd8e29da2399090edab7776a5bdb9ce6354 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-sync[bot]" Date: Sat, 25 Apr 2026 11:51:16 +0000 Subject: [PATCH] chore(sync): mirror docs from openclaw/openclaw@6eec38ad5a18fbd23001d19aac19c54a60a43127 --- .openclaw-sync/source.json | 4 ++-- docs/channels/discord.md | 36 ++++++++++++++++++++++++++------- docs/gateway/config-channels.md | 3 ++- docs/tools/slash-commands.md | 2 +- 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/.openclaw-sync/source.json b/.openclaw-sync/source.json index 0089de629..5afa02579 100644 --- a/.openclaw-sync/source.json +++ b/.openclaw-sync/source.json @@ -1,5 +1,5 @@ { "repository": "openclaw/openclaw", - "sha": "3507efa4ec1e8b7c22889ab5e2c6c9283adeb768", - "syncedAt": "2026-04-25T11:42:58.030Z" + "sha": "6eec38ad5a18fbd23001d19aac19c54a60a43127", + "syncedAt": "2026-04-25T11:49:53.122Z" } diff --git a/docs/channels/discord.md b/docs/channels/discord.md index 7b61c82e7..f07cdec04 100644 --- a/docs/channels/discord.md +++ b/docs/channels/discord.md @@ -961,14 +961,23 @@ Discord has two distinct voice surfaces: realtime **voice channels** (continuous ### Voice channels -Requirements: +Setup checklist: -- Enable native commands (`commands.native` or `channels.discord.commands.native`). -- Configure `channels.discord.voice`. -- The bot needs Connect + Speak permissions in the target voice channel. +1. Enable Message Content Intent in the Discord Developer Portal. +2. Enable Server Members Intent when role/user allowlists are used. +3. Invite the bot with `bot` and `applications.commands` scopes. +4. Grant Connect, Speak, Send Messages, and Read Message History in the target voice channel. +5. Enable native commands (`commands.native` or `channels.discord.commands.native`). +6. Configure `channels.discord.voice`. Use `/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. +```bash +/vc join channel: +/vc status +/vc leave +``` + Auto-join example: ```json5 @@ -977,6 +986,7 @@ Auto-join example: discord: { voice: { enabled: true, + model: "openai/gpt-5.4-mini", autoJoin: [ { guildId: "123456789012345678", @@ -987,7 +997,7 @@ Auto-join example: decryptionFailureTolerance: 24, tts: { provider: "openai", - openai: { voice: "alloy" }, + openai: { voice: "onyx" }, }, }, }, @@ -998,12 +1008,24 @@ Auto-join example: Notes: - `voice.tts` overrides `messages.tts` for voice playback only. +- `voice.model` overrides the LLM used for Discord voice channel responses only. Leave it unset to inherit the routed agent model. +- STT uses `tools.media.audio`; `voice.model` does not affect transcription. - 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`). - Voice is enabled by default; set `channels.discord.voice.enabled=false` to disable it. - `voice.daveEncryption` and `voice.decryptionFailureTolerance` pass through to `@discordjs/voice` join options. - `@discordjs/voice` defaults are `daveEncryption=true` and `decryptionFailureTolerance=24` if unset. - OpenClaw also watches receive decrypt failures and auto-recovers by leaving/rejoining the voice channel after repeated failures in a short window. -- 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). +- 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. + +Voice channel pipeline: + +- Discord PCM capture is converted to a WAV temp file. +- `tools.media.audio` handles STT, for example `openai/gpt-4o-mini-transcribe`. +- The transcript is sent through normal Discord ingress and routing. +- `voice.model`, when set, overrides only the response LLM for this voice-channel turn. +- `voice.tts` is merged over `messages.tts`; the resulting audio is played in the joined channel. + +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`. ### Voice messages @@ -1130,7 +1152,7 @@ openclaw logs --follow - watch logs for: - `discord voice: DAVE decrypt failures detected` - `discord voice: repeated decrypt failures; attempting rejoin` - - if failures continue after automatic rejoin, collect logs and compare against [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) + - 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) diff --git a/docs/gateway/config-channels.md b/docs/gateway/config-channels.md index 6490fdef1..1fec24ca7 100644 --- a/docs/gateway/config-channels.md +++ b/docs/gateway/config-channels.md @@ -327,7 +327,8 @@ WhatsApp runs through the gateway's web channel (Baileys Web). It starts automat - `spawnSubagentSessions`: opt-in switch for `sessions_spawn({ thread: true })` auto thread creation/binding - Top-level `bindings[]` entries with `type: "acp"` configure persistent ACP bindings for channels and threads (use channel/thread id in `match.peer.id`). Field semantics are shared in [ACP Agents](/tools/acp-agents#channel-specific-settings). - `channels.discord.ui.components.accentColor` sets the accent color for Discord components v2 containers. -- `channels.discord.voice` enables Discord voice channel conversations and optional auto-join + TTS overrides. +- `channels.discord.voice` enables Discord voice channel conversations and optional auto-join + LLM + TTS overrides. +- `channels.discord.voice.model` optionally overrides the LLM model used for Discord voice channel responses. - `channels.discord.voice.daveEncryption` and `channels.discord.voice.decryptionFailureTolerance` pass through to `@discordjs/voice` DAVE options (`true` and `24` by default). - OpenClaw additionally attempts voice receive recovery by leaving/rejoining a voice session after repeated decrypt failures. - `channels.discord.streaming` is the canonical stream mode key. Legacy `streamMode` and boolean `streaming` values are auto-migrated. diff --git a/docs/tools/slash-commands.md b/docs/tools/slash-commands.md index 2dd44f9bf..41610f507 100644 --- a/docs/tools/slash-commands.md +++ b/docs/tools/slash-commands.md @@ -182,7 +182,7 @@ Notes: - `/restart` is enabled by default; set `commands.restart: false` to disable it. - `/plugins install ` accepts the same plugin specs as `openclaw plugins install`: local path/archive, npm package, or `clawhub:`. - `/plugins enable|disable` updates plugin config and may prompt for a restart. -- Discord-only native command: `/vc join|leave|status` controls voice channels (requires `channels.discord.voice` and native commands; not available as text). +- Discord-only native command: `/vc join|leave|status` controls voice channels (not available as text). `join` requires a guild and selected voice/stage channel. Requires `channels.discord.voice` and native commands. - Discord thread-binding commands (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) require effective thread bindings to be enabled (`session.threadBindings.enabled` and/or `channels.discord.threadBindings.enabled`). - ACP command reference and runtime behavior: [ACP Agents](/tools/acp-agents). - `/verbose` is meant for debugging and extra visibility; keep it **off** in normal use.