feat(discord): add voice message support

Adds support for sending Discord voice messages via the message tool
with asVoice: true parameter.

Voice messages require:
- OGG/Opus format (auto-converted if needed via ffmpeg)
- Waveform data (generated from audio samples)
- Duration in seconds
- Message flag 8192 (IS_VOICE_MESSAGE)

Implementation:
- New voice-message.ts with audio processing utilities
- getAudioDuration() using ffprobe
- generateWaveform() samples audio and creates base64 waveform
- ensureOggOpus() converts audio to required format
- sendDiscordVoiceMessage() handles 3-step Discord upload process

Usage:
message(action='send', channel='discord', target='...',
        path='/path/to/audio.mp3', asVoice=true)

Note: Voice messages cannot include text content (Discord limitation)
This commit is contained in:
nyanjou
2026-02-02 17:00:19 +01:00
committed by Shadow
parent aec3221391
commit a09e4fac3f
5 changed files with 444 additions and 1 deletions

View File

@@ -41,6 +41,7 @@ export async function handleDiscordMessageAction(
const mediaUrl = readStringParam(params, "media", { trim: false });
const replyTo = readStringParam(params, "replyTo");
const embeds = Array.isArray(params.embeds) ? params.embeds : undefined;
const asVoice = params.asVoice === true;
return await handleDiscordAction(
{
action: "sendMessage",
@@ -50,6 +51,7 @@ export async function handleDiscordMessageAction(
mediaUrl: mediaUrl ?? undefined,
replyTo: replyTo ?? undefined,
embeds,
asVoice,
},
cfg,
);