Skip to content

Commit 07ce09d

Browse files
Merge pull request #1322 from marceloapd/fix/animated-stickers
Fix/animated stickers
2 parents 0d2a7ad + 9710fbd commit 07ce09d

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2754,15 +2754,35 @@ export class BaileysStartupService extends ChannelStartupService {
27542754
imageBuffer = Buffer.from(response.data, 'binary');
27552755
}
27562756

2757-
const webpBuffer = await sharp(imageBuffer).webp().toBuffer();
2757+
const isAnimated = this.isAnimated(image, imageBuffer);
27582758

2759-
return webpBuffer;
2759+
if (isAnimated) {
2760+
return await sharp(imageBuffer, { animated: true }).webp({ quality: 80 }).toBuffer();
2761+
} else {
2762+
return await sharp(imageBuffer).webp().toBuffer();
2763+
}
27602764
} catch (error) {
27612765
console.error('Erro ao converter a imagem para WebP:', error);
27622766
throw error;
27632767
}
27642768
}
27652769

2770+
private isAnimatedWebp(buffer: Buffer): boolean {
2771+
if (buffer.length < 12) return false;
2772+
2773+
return buffer.indexOf(Buffer.from('ANIM')) !== -1;
2774+
}
2775+
2776+
private isAnimated(image: string, buffer: Buffer): boolean {
2777+
const lowerCaseImage = image.toLowerCase();
2778+
2779+
if (lowerCaseImage.includes('.gif')) return true;
2780+
2781+
if (lowerCaseImage.includes('.webp')) return this.isAnimatedWebp(buffer);
2782+
2783+
return false;
2784+
}
2785+
27662786
public async mediaSticker(data: SendStickerDto, file?: any) {
27672787
const mediaData: SendStickerDto = { ...data };
27682788

0 commit comments

Comments
 (0)