@@ -99,6 +99,7 @@ import makeWASocket, {
9999 Contact ,
100100 delay ,
101101 DisconnectReason ,
102+ downloadContentFromMessage ,
102103 downloadMediaMessage ,
103104 generateWAMessageFromContent ,
104105 getAggregateVotesInPollMessage ,
@@ -1035,6 +1036,16 @@ export class BaileysStartupService extends ChannelStartupService {
10351036 ) => {
10361037 try {
10371038 for ( const received of messages ) {
1039+ if (
1040+ received ?. messageStubParameters ?. some ?.( ( param ) =>
1041+ [ 'No matching sessions found for message' , 'Bad MAC' , 'failed to decrypt message' , 'SessionError' ] . some (
1042+ ( err ) => param ?. includes ?.( err ) ,
1043+ ) ,
1044+ )
1045+ ) {
1046+ this . logger . warn ( `Message ignored with messageStubParameters: ${ JSON . stringify ( received , null , 2 ) } ` ) ;
1047+ continue ;
1048+ }
10381049 if ( received . message ?. conversation || received . message ?. extendedTextMessage ?. text ) {
10391050 const text = received . message ?. conversation || received . message ?. extendedTextMessage ?. text ;
10401051
@@ -3242,8 +3253,8 @@ export class BaileysStartupService extends ChannelStartupService {
32423253 typeof numberVerified ?. lid === 'string'
32433254 ? numberVerified . lid
32443255 : numberJid . includes ( '@lid' )
3245- ? numberJid . split ( '@' ) [ 1 ]
3246- : undefined ;
3256+ ? numberJid . split ( '@' ) [ 1 ]
3257+ : undefined ;
32473258 return new OnWhatsAppDto (
32483259 numberJid ,
32493260 ! ! numberVerified ?. exists ,
@@ -3429,7 +3440,19 @@ export class BaileysStartupService extends ChannelStartupService {
34293440 }
34303441 }
34313442
3432- public async getBase64FromMediaMessage ( data : getBase64FromMediaMessageDto , getBuffer = false ) {
3443+ public async mapMediaType ( mediaType ) {
3444+ const map = {
3445+ imageMessage : 'image' ,
3446+ videoMessage : 'video' ,
3447+ documentMessage : 'document' ,
3448+ stickerMessage : 'sticker' ,
3449+ audioMessage : 'audio' ,
3450+ ptvMessage : 'video' ,
3451+ } ;
3452+ return map [ mediaType ] || null ;
3453+ }
3454+
3455+ public async getBase64FromMediaMessage ( data : getBase64FromMediaMessageDto , getBuffer = false ) {
34333456 try {
34343457 const m = data ?. message ;
34353458 const convertToMp4 = data ?. convertToMp4 ?? false ;
@@ -3469,12 +3492,39 @@ export class BaileysStartupService extends ChannelStartupService {
34693492 msg . message = JSON . parse ( JSON . stringify ( msg . message ) ) ;
34703493 }
34713494
3472- const buffer = await downloadMediaMessage (
3473- { key : msg ?. key , message : msg ?. message } ,
3474- 'buffer' ,
3475- { } ,
3476- { logger : P ( { level : 'error' } ) as any , reuploadRequest : this . client . updateMediaMessage } ,
3477- ) ;
3495+ let buffer : Buffer ;
3496+
3497+ try {
3498+ buffer = await downloadMediaMessage (
3499+ { key : msg ?. key , message : msg ?. message } ,
3500+ 'buffer' ,
3501+ { } ,
3502+ { logger : P ( { level : 'error' } ) as any , reuploadRequest : this . client . updateMediaMessage } ,
3503+ ) ;
3504+ } catch ( err ) {
3505+ this . logger . error ( 'Download Media failed, trying to retry in 5 seconds...' ) ;
3506+ await new Promise ( ( resolve ) => setTimeout ( resolve , 5000 ) ) ;
3507+ const mediaType = Object . keys ( msg . message ) . find ( ( key ) => key . endsWith ( 'Message' ) ) ;
3508+ try {
3509+ const media = await downloadContentFromMessage (
3510+ {
3511+ mediaKey : msg . message ?. [ mediaType ] ?. mediaKey ,
3512+ directPath : msg . message ?. [ mediaType ] ?. directPath ,
3513+ url : `https://mmg.whatsapp.net${ msg ?. message ?. [ mediaType ] ?. directPath } ` ,
3514+ } ,
3515+ await this . mapMediaType ( mediaType ) ,
3516+ { } ,
3517+ ) ;
3518+ const chunks = [ ] ;
3519+ for await ( const chunk of media ) {
3520+ chunks . push ( chunk ) ;
3521+ }
3522+ buffer = Buffer . concat ( chunks ) ;
3523+ this . logger . info ( 'Download Media with downloadContentFromMessage was successful!' ) ;
3524+ } catch ( fallbackErr ) {
3525+ this . logger . error ( 'Download Media with downloadContentFromMessage also failed!' ) ;
3526+ }
3527+ }
34783528 const typeMessage = getContentType ( msg . message ) ;
34793529
34803530 const ext = mimeTypes . extension ( mediaMessage ?. [ 'mimetype' ] ) ;
0 commit comments