@@ -1170,7 +1170,7 @@ export class BaileysStartupService extends ChannelStartupService {
11701170 ) {
11711171 const chatwootSentMessage = await this . chatwootService . eventWhatsapp (
11721172 Events . MESSAGES_UPSERT ,
1173- { instanceName : this . instance . name , instanceId : this . instance . id } ,
1173+ { instanceName : this . instance . name , instanceId : this . instanceId } ,
11741174 messageRaw ,
11751175 ) ;
11761176
@@ -3131,10 +3131,10 @@ export class BaileysStartupService extends ChannelStartupService {
31313131 const group = await this . findGroup ( { groupJid : jid } , 'inner' ) ;
31323132
31333133 if ( ! group ) {
3134- new OnWhatsAppDto ( jid , false , number ) ;
3134+ return new OnWhatsAppDto ( jid , false , number ) ;
31353135 }
31363136
3137- return new OnWhatsAppDto ( group . id , ! ! group ?. id , number , group ?. subject ) ;
3137+ return new OnWhatsAppDto ( group . id , true , number , group ?. subject ) ;
31383138 } ) ,
31393139 ) ;
31403140 onWhatsapp . push ( ...groups ) ;
@@ -3144,83 +3144,125 @@ export class BaileysStartupService extends ChannelStartupService {
31443144 where : { instanceId : this . instanceId , remoteJid : { in : jids . users . map ( ( { jid } ) => jid ) } } ,
31453145 } ) ;
31463146
3147- const numbersToVerify = jids . users . map ( ( { jid } ) => jid . replace ( '+' , '' ) ) ;
3147+ // Separate @lid numbers from normal numbers
3148+ const lidUsers = jids . users . filter ( ( { jid } ) => jid . includes ( '@lid' ) ) ;
3149+ const normalUsers = jids . users . filter ( ( { jid } ) => ! jid . includes ( '@lid' ) ) ;
31483150
3149- const cachedNumbers = await getOnWhatsappCache ( numbersToVerify ) ;
3150- const filteredNumbers = numbersToVerify . filter (
3151- ( jid ) => ! cachedNumbers . some ( ( cached ) => cached . jidOptions . includes ( jid ) ) ,
3152- ) ;
3151+ // For normal numbers, use traditional Baileys verification
3152+ let normalVerifiedUsers : OnWhatsAppDto [ ] = [ ] ;
3153+ if ( normalUsers . length > 0 ) {
3154+ console . log ( 'normalUsers' , normalUsers ) ;
3155+ const numbersToVerify = normalUsers . map ( ( { jid } ) => jid . replace ( '+' , '' ) ) ;
3156+ console . log ( 'numbersToVerify' , numbersToVerify ) ;
31533157
3154- const verify = await this . client . onWhatsApp ( ...filteredNumbers ) ;
3155- const users : OnWhatsAppDto [ ] = await Promise . all (
3156- jids . users . map ( async ( user ) => {
3157- let numberVerified : ( typeof verify ) [ 0 ] | null = null ;
3158+ const cachedNumbers = await getOnWhatsappCache ( numbersToVerify ) ;
3159+ console . log ( 'cachedNumbers' , cachedNumbers ) ;
31583160
3159- const cached = cachedNumbers . find ( ( cached ) => cached . jidOptions . includes ( user . jid . replace ( '+' , '' ) ) ) ;
3160- if ( cached ) {
3161- return {
3162- exists : true ,
3163- jid : cached . remoteJid ,
3164- name : contacts . find ( ( c ) => c . remoteJid === cached . remoteJid ) ?. pushName ,
3165- number : user . number ,
3166- } ;
3167- }
3168-
3169- // Brazilian numbers
3170- if ( user . number . startsWith ( '55' ) ) {
3171- const numberWithDigit =
3172- user . number . slice ( 4 , 5 ) === '9' && user . number . length === 13
3173- ? user . number
3174- : `${ user . number . slice ( 0 , 4 ) } 9${ user . number . slice ( 4 ) } ` ;
3175- const numberWithoutDigit =
3176- user . number . length === 12 ? user . number : user . number . slice ( 0 , 4 ) + user . number . slice ( 5 ) ;
3177-
3178- numberVerified = verify . find (
3179- ( v ) => v . jid === `${ numberWithDigit } @s.whatsapp.net` || v . jid === `${ numberWithoutDigit } @s.whatsapp.net` ,
3180- ) ;
3181- }
3182-
3183- // Mexican/Argentina numbers
3184- // Ref: https://faq.whatsapp.com/1294841057948784
3185- if ( ! numberVerified && ( user . number . startsWith ( '52' ) || user . number . startsWith ( '54' ) ) ) {
3186- let prefix = '' ;
3187- if ( user . number . startsWith ( '52' ) ) {
3188- prefix = '' ;
3161+ const filteredNumbers = numbersToVerify . filter (
3162+ ( jid ) => ! cachedNumbers . some ( ( cached ) => cached . jidOptions . includes ( jid ) ) ,
3163+ ) ;
3164+ console . log ( 'filteredNumbers' , filteredNumbers ) ;
3165+
3166+ const verify = await this . client . onWhatsApp ( ...filteredNumbers ) ;
3167+ console . log ( 'verify' , verify ) ;
3168+ normalVerifiedUsers = await Promise . all (
3169+ normalUsers . map ( async ( user ) => {
3170+ let numberVerified : ( typeof verify ) [ 0 ] | null = null ;
3171+
3172+ const cached = cachedNumbers . find ( ( cached ) => cached . jidOptions . includes ( user . jid . replace ( '+' , '' ) ) ) ;
3173+ if ( cached ) {
3174+ return new OnWhatsAppDto (
3175+ cached . remoteJid ,
3176+ true ,
3177+ user . number ,
3178+ contacts . find ( ( c ) => c . remoteJid === cached . remoteJid ) ?. pushName ,
3179+ cached . lid || ( cached . remoteJid . includes ( '@lid' ) ? cached . remoteJid . split ( '@' ) [ 1 ] : undefined ) ,
3180+ ) ;
31893181 }
3190- if ( user . number . startsWith ( '54' ) ) {
3191- prefix = '9' ;
3182+
3183+ // Brazilian numbers
3184+ if ( user . number . startsWith ( '55' ) ) {
3185+ const numberWithDigit =
3186+ user . number . slice ( 4 , 5 ) === '9' && user . number . length === 13
3187+ ? user . number
3188+ : `${ user . number . slice ( 0 , 4 ) } 9${ user . number . slice ( 4 ) } ` ;
3189+ const numberWithoutDigit =
3190+ user . number . length === 12 ? user . number : user . number . slice ( 0 , 4 ) + user . number . slice ( 5 ) ;
3191+
3192+ numberVerified = verify . find (
3193+ ( v ) => v . jid === `${ numberWithDigit } @s.whatsapp.net` || v . jid === `${ numberWithoutDigit } @s.whatsapp.net` ,
3194+ ) ;
31923195 }
31933196
3194- const numberWithDigit =
3195- user . number . slice ( 2 , 3 ) === prefix && user . number . length === 13
3196- ? user . number
3197- : `${ user . number . slice ( 0 , 2 ) } ${ prefix } ${ user . number . slice ( 2 ) } ` ;
3198- const numberWithoutDigit =
3199- user . number . length === 12 ? user . number : user . number . slice ( 0 , 2 ) + user . number . slice ( 3 ) ;
3197+ // Mexican/Argentina numbers
3198+ // Ref: https://faq.whatsapp.com/1294841057948784
3199+ if ( ! numberVerified && ( user . number . startsWith ( '52' ) || user . number . startsWith ( '54' ) ) ) {
3200+ let prefix = '' ;
3201+ if ( user . number . startsWith ( '52' ) ) {
3202+ prefix = '1' ;
3203+ }
3204+ if ( user . number . startsWith ( '54' ) ) {
3205+ prefix = '9' ;
3206+ }
32003207
3201- numberVerified = verify . find (
3202- ( v ) => v . jid === `${ numberWithDigit } @s.whatsapp.net` || v . jid === `${ numberWithoutDigit } @s.whatsapp.net` ,
3203- ) ;
3204- }
3208+ const numberWithDigit =
3209+ user . number . slice ( 2 , 3 ) === prefix && user . number . length === 13
3210+ ? user . number
3211+ : `${ user . number . slice ( 0 , 2 ) } ${ prefix } ${ user . number . slice ( 2 ) } ` ;
3212+ const numberWithoutDigit =
3213+ user . number . length === 12 ? user . number : user . number . slice ( 0 , 2 ) + user . number . slice ( 3 ) ;
32053214
3206- if ( ! numberVerified ) {
3207- numberVerified = verify . find ( ( v ) => v . jid === user . jid ) ;
3208- }
3215+ numberVerified = verify . find (
3216+ ( v ) => v . jid === `${ numberWithDigit } @s.whatsapp.net` || v . jid === `${ numberWithoutDigit } @s.whatsapp.net` ,
3217+ ) ;
3218+ }
32093219
3210- const numberJid = numberVerified ?. jid || user . jid ;
3220+ if ( ! numberVerified ) {
3221+ numberVerified = verify . find ( ( v ) => v . jid === user . jid ) ;
3222+ }
32113223
3212- return {
3213- exists : ! ! numberVerified ?. exists ,
3214- jid : numberJid ,
3215- name : contacts . find ( ( c ) => c . remoteJid === numberJid ) ?. pushName ,
3216- number : user . number ,
3217- } ;
3218- } ) ,
3219- ) ;
3224+ const numberJid = numberVerified ?. jid || user . jid ;
3225+ const lid =
3226+ typeof numberVerified ?. lid === 'string'
3227+ ? numberVerified . lid
3228+ : numberJid . includes ( '@lid' )
3229+ ? numberJid . split ( '@' ) [ 1 ]
3230+ : undefined ;
3231+ return new OnWhatsAppDto (
3232+ numberJid ,
3233+ ! ! numberVerified ?. exists ,
3234+ user . number ,
3235+ contacts . find ( ( c ) => c . remoteJid === numberJid ) ?. pushName ,
3236+ lid ,
3237+ ) ;
3238+ } ) ,
3239+ ) ;
3240+ }
32203241
3221- await saveOnWhatsappCache ( users . filter ( ( user ) => user . exists ) . map ( ( user ) => ( { remoteJid : user . jid } ) ) ) ;
3242+ // For @lid numbers, always consider them as valid
3243+ const lidVerifiedUsers : OnWhatsAppDto [ ] = lidUsers . map ( ( user ) => {
3244+ return new OnWhatsAppDto (
3245+ user . jid ,
3246+ true ,
3247+ user . number ,
3248+ contacts . find ( ( c ) => c . remoteJid === user . jid ) ?. pushName ,
3249+ user . jid . split ( '@' ) [ 1 ] ,
3250+ ) ;
3251+ } ) ;
32223252
3223- onWhatsapp . push ( ...users ) ;
3253+ // Combine results
3254+ onWhatsapp . push ( ...normalVerifiedUsers , ...lidVerifiedUsers ) ;
3255+
3256+ // Save to cache only valid numbers
3257+ await saveOnWhatsappCache (
3258+ onWhatsapp
3259+ . filter ( ( user ) => user . exists )
3260+ . map ( ( user ) => ( {
3261+ remoteJid : user . jid ,
3262+ jidOptions : user . jid . replace ( '+' , '' ) ,
3263+ lid : user . lid ,
3264+ } ) ) ,
3265+ ) ;
32243266
32253267 return onWhatsapp ;
32263268 }
0 commit comments