/** * Discord Voice Message Support * * Implements sending voice messages via Discord's API. * Voice messages require: * - OGG/Opus format audio * - Waveform data (base64 encoded, up to 256 samples, 0-255 values) * - Duration in seconds * - Message flag 8192 (IS_VOICE_MESSAGE) * - No other content (text, embeds, etc.) */ import { type RequestClient } from "@buape/carbon"; import type { RetryRunner } from "../infra/retry-policy.js"; export type VoiceMessageMetadata = { durationSecs: number; waveform: string; }; /** * Get audio duration using ffprobe */ export declare function getAudioDuration(filePath: string): Promise; /** * Generate waveform data from audio file using ffmpeg * Returns base64 encoded byte array of amplitude samples (0-255) */ export declare function generateWaveform(filePath: string): Promise; /** * Convert audio file to OGG/Opus format if needed * Returns path to the OGG file (may be same as input if already OGG/Opus) */ export declare function ensureOggOpus(filePath: string): Promise<{ path: string; cleanup: boolean; }>; /** * Get voice message metadata (duration and waveform) */ export declare function getVoiceMessageMetadata(filePath: string): Promise; /** * Send a voice message to Discord * * This follows Discord's voice message protocol: * 1. Request upload URL from Discord * 2. Upload the OGG file to the provided URL * 3. Send the message with flag 8192 and attachment metadata */ export declare function sendDiscordVoiceMessage(rest: RequestClient, channelId: string, audioBuffer: Buffer, metadata: VoiceMessageMetadata, replyTo: string | undefined, request: RetryRunner, silent?: boolean, token?: string): Promise<{ id: string; channel_id: string; }>;