fix(whatsapp): use stream mode for media download to fix empty audio buffer
Fixes #4636 ## Problem WhatsApp voice messages (audio/ogg) were being saved as 0-byte files while image downloads worked correctly. The issue is that Baileys 7.x `downloadMediaMessage` with "buffer" mode returns empty data for audio messages. ## Solution - Changed from "buffer" mode to "stream" mode in `downloadInboundMedia()` - Manually collect stream chunks and concatenate into buffer - Added validation to detect and handle empty buffers ## Testing - Voice messages now download correctly with actual audio data - Image downloads continue to work as before - Tested with WhatsApp voice notes (ogg/opus format) Before fix: 0 bytes After fix: 11488 bytes (actual audio data)
This commit is contained in:
parent
da71eaebd2
commit
9d73a63487
@ -31,15 +31,30 @@ export async function downloadInboundMedia(
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const buffer = (await downloadMediaMessage(
|
// Use stream mode instead of buffer mode to fix audio download issue
|
||||||
|
// where buffer mode returns empty data for audio messages in Baileys 7.x
|
||||||
|
const stream = await downloadMediaMessage(
|
||||||
msg as WAMessage,
|
msg as WAMessage,
|
||||||
"buffer",
|
"stream",
|
||||||
{},
|
{},
|
||||||
{
|
{
|
||||||
reuploadRequest: sock.updateMediaMessage,
|
reuploadRequest: sock.updateMediaMessage,
|
||||||
logger: sock.logger,
|
logger: sock.logger,
|
||||||
},
|
},
|
||||||
)) as Buffer;
|
);
|
||||||
|
|
||||||
|
const chunks: Buffer[] = [];
|
||||||
|
for await (const chunk of stream) {
|
||||||
|
chunks.push(chunk as Buffer);
|
||||||
|
}
|
||||||
|
const buffer = Buffer.concat(chunks);
|
||||||
|
|
||||||
|
// Validate buffer is not empty
|
||||||
|
if (!buffer || buffer.length === 0) {
|
||||||
|
logVerbose(`downloadMediaMessage returned empty buffer for ${mimetype}`);
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
return { buffer, mimetype };
|
return { buffer, mimetype };
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logVerbose(`downloadMediaMessage failed: ${String(err)}`);
|
logVerbose(`downloadMediaMessage failed: ${String(err)}`);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user