Bug
The message tool requires components for Discord sends, but Discord voice messages (asVoice: true) cannot have components. This makes it impossible to send pre-recorded audio as inline playable voice messages in Discord.
Steps to Reproduce
-
Try sending a voice message with pre-recorded audio:
asVoice: true + media: /path/to/audio.ogg (no components) → Validation error: components: must have required property components
asVoice: true + media + components: {} → API error: Discord components cannot be sent as voice messages.
-
Try sending audio without asVoice:
media + components: { blocks: [{ type: "file", file: "attachment://file.ogg" }] } → File attaches as download card, NOT inline playable
media + components: { text: "..." } → Attachment silently stripped (attachments: [])
Expected Behavior
Sending asVoice: true with media and no components should work. Discord voice messages need duration_secs and waveform metadata on the attachment — the tool should either:
- Skip
components validation when asVoice: true
- Auto-generate waveform data from the audio file (like Discord clients do)
Actual Behavior
Caught between two constraints: components is required but voice messages cannot have components.
Workaround
The tts tool can send inline playable audio, but it uses the bot's own TTS voice — not custom/cloned audio. There is no way to send pre-recorded custom audio as a playable voice message through the current tool.
Environment
- OpenClaw 2026.3.14
- Discord channel
- macOS arm64
Bug
The
messagetool requirescomponentsfor Discord sends, but Discord voice messages (asVoice: true) cannot have components. This makes it impossible to send pre-recorded audio as inline playable voice messages in Discord.Steps to Reproduce
Try sending a voice message with pre-recorded audio:
asVoice: true+media: /path/to/audio.ogg(no components) → Validation error:components: must have required property componentsasVoice: true+media+components: {}→ API error:Discord components cannot be sent as voice messages.Try sending audio without asVoice:
media+components: { blocks: [{ type: "file", file: "attachment://file.ogg" }] }→ File attaches as download card, NOT inline playablemedia+components: { text: "..." }→ Attachment silently stripped (attachments: [])Expected Behavior
Sending
asVoice: truewithmediaand nocomponentsshould work. Discord voice messages needduration_secsandwaveformmetadata on the attachment — the tool should either:componentsvalidation whenasVoice: trueActual Behavior
Caught between two constraints: components is required but voice messages cannot have components.
Workaround
The
ttstool can send inline playable audio, but it uses the bot's own TTS voice — not custom/cloned audio. There is no way to send pre-recorded custom audio as a playable voice message through the current tool.Environment