@@ -41,7 +41,6 @@ import axios from 'axios';
4141import { exec } from 'child_process' ;
4242import { arrayUnique , isBase64 , isURL } from 'class-validator' ;
4343import EventEmitter2 from 'eventemitter2' ;
44- import levenshtein from 'fast-levenshtein' ;
4544import fs , { existsSync , readFileSync } from 'fs' ;
4645import Long from 'long' ;
4746import NodeCache from 'node-cache' ;
@@ -2455,24 +2454,58 @@ export class BaileysStartupService extends WAStartupService {
24552454 owner : this . instance . name ,
24562455 ids : jids . users . map ( ( { jid } ) => ( jid . startsWith ( '+' ) ? jid . substring ( 1 ) : jid ) ) ,
24572456 } ) ;
2458- const verify = await this . client . onWhatsApp (
2459- ...jids . users . map ( ( { jid } ) => ( ! jid . startsWith ( '+' ) ? `+${ jid } ` : jid ) ) ,
2460- ) ;
2457+ const numbersToVerify = jids . users . map ( ( { jid } ) => jid . replace ( '+' , '' ) ) ;
2458+ const verify = await this . client . onWhatsApp ( ...numbersToVerify ) ;
24612459 const users : OnWhatsAppDto [ ] = await Promise . all (
24622460 jids . users . map ( async ( user ) => {
2463- const MAX_SIMILARITY_THRESHOLD = 0.01 ;
2464- const isBrWithDigit = user . jid . startsWith ( '55' ) && user . jid . slice ( 4 , 5 ) === '9' && user . jid . length === 28 ;
2465- const jid = isBrWithDigit ? user . jid . slice ( 0 , 4 ) + user . jid . slice ( 5 ) : user . jid ;
2466-
2467- const numberVerified = verify . find ( ( v ) => {
2468- const mainJidSimilarity = levenshtein . get ( user . jid , v . jid ) / Math . max ( user . jid . length , v . jid . length ) ;
2469- const jidSimilarity = levenshtein . get ( jid , v . jid ) / Math . max ( jid . length , v . jid . length ) ;
2470- return mainJidSimilarity <= MAX_SIMILARITY_THRESHOLD || jidSimilarity <= MAX_SIMILARITY_THRESHOLD ;
2471- } ) ;
2461+ let numberVerified : ( typeof verify ) [ 0 ] | null = null ;
2462+
2463+ // Brazilian numbers
2464+ if ( user . number . startsWith ( '55' ) ) {
2465+ const numberWithDigit =
2466+ user . number . slice ( 4 , 5 ) === '9' && user . number . length === 13
2467+ ? user . number
2468+ : `${ user . number . slice ( 0 , 4 ) } 9${ user . number . slice ( 4 ) } ` ;
2469+ const numberWithoutDigit =
2470+ user . number . length === 12 ? user . number : user . number . slice ( 0 , 4 ) + user . number . slice ( 5 ) ;
2471+
2472+ numberVerified = verify . find (
2473+ ( v ) => v . jid === `${ numberWithDigit } @s.whatsapp.net` || v . jid === `${ numberWithoutDigit } @s.whatsapp.net` ,
2474+ ) ;
2475+ }
2476+
2477+ // Mexican/Argentina numbers
2478+ // Ref: https://faq.whatsapp.com/1294841057948784
2479+ if ( ! numberVerified && ( user . number . startsWith ( '52' ) || user . number . startsWith ( '54' ) ) ) {
2480+ let prefix = '' ;
2481+ if ( user . number . startsWith ( '52' ) ) {
2482+ prefix = '1' ;
2483+ }
2484+ if ( user . number . startsWith ( '54' ) ) {
2485+ prefix = '9' ;
2486+ }
2487+
2488+ const numberWithDigit =
2489+ user . number . slice ( 2 , 3 ) === prefix && user . number . length === 13
2490+ ? user . number
2491+ : `${ user . number . slice ( 0 , 2 ) } ${ prefix } ${ user . number . slice ( 2 ) } ` ;
2492+ const numberWithoutDigit =
2493+ user . number . length === 12 ? user . number : user . number . slice ( 0 , 2 ) + user . number . slice ( 3 ) ;
2494+
2495+ numberVerified = verify . find (
2496+ ( v ) => v . jid === `${ numberWithDigit } @s.whatsapp.net` || v . jid === `${ numberWithoutDigit } @s.whatsapp.net` ,
2497+ ) ;
2498+ }
2499+
2500+ if ( ! numberVerified ) {
2501+ numberVerified = verify . find ( ( v ) => v . jid === user . jid ) ;
2502+ }
2503+
2504+ const numberJid = numberVerified ?. jid || user . jid ;
24722505 return {
24732506 exists : ! ! numberVerified ?. exists ,
2474- jid : numberVerified ?. jid || user . jid ,
2475- name : contacts . find ( ( c ) => c . id === jid ) ?. pushName ,
2507+ jid : numberJid ,
2508+ name : contacts . find ( ( c ) => c . id === numberJid ) ?. pushName ,
24762509 number : user . number ,
24772510 } ;
24782511 } ) ,
0 commit comments