File tree Expand file tree Collapse file tree
src/api/integrations/channel/whatsapp Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -2703,15 +2703,36 @@ export class BaileysStartupService extends ChannelStartupService {
27032703 imageBuffer = Buffer . from ( response . data , 'binary' ) ;
27042704 }
27052705
2706- const webpBuffer = await sharp ( imageBuffer ) . webp ( ) . toBuffer ( ) ;
2707-
2708- return webpBuffer ;
2706+ const isAnimated = image . includes ( '.gif' ) ||
2707+ ( image . includes ( '.webp' ) && this . isAnimatedWebp ( imageBuffer ) ) ;
2708+
2709+ if ( isAnimated ) {
2710+ return await sharp ( imageBuffer , { animated : true } )
2711+ . webp ( { quality : 80 , animated : true } )
2712+ . toBuffer ( ) ;
2713+ } else {
2714+ return await sharp ( imageBuffer ) . webp ( ) . toBuffer ( ) ;
2715+ }
27092716 } catch ( error ) {
27102717 console . error ( 'Erro ao converter a imagem para WebP:' , error ) ;
27112718 throw error ;
27122719 }
27132720 }
27142721
2722+ private isAnimatedWebp ( buffer : Buffer ) : boolean {
2723+ if ( buffer . length < 12 ) return false ;
2724+
2725+ for ( let i = 0 ; i < buffer . length - 4 ; i ++ ) {
2726+ if ( buffer [ i ] === 0x41 && // 'A'
2727+ buffer [ i + 1 ] === 0x4E && // 'N'
2728+ buffer [ i + 2 ] === 0x49 && // 'I'
2729+ buffer [ i + 3 ] === 0x4D ) { // 'M'
2730+ return true ;
2731+ }
2732+ }
2733+ return false ;
2734+ }
2735+
27152736 public async mediaSticker ( data : SendStickerDto , file ?: any ) {
27162737 const mediaData : SendStickerDto = { ...data } ;
27172738
You can’t perform that action at this time.
0 commit comments