mirror of
https://github.com/EvolutionAPI/evolution-api.git
synced 2025-07-14 01:41:24 -06:00
Change the way numbers are validated on whatsapp
This commit is contained in:
parent
499bd4328a
commit
bab58054f7
@ -60,7 +60,6 @@
|
||||
"exiftool-vendored": "^22.0.0",
|
||||
"express": "^4.18.2",
|
||||
"express-async-errors": "^3.1.1",
|
||||
"fast-levenshtein": "^3.0.0",
|
||||
"form-data": "^4.0.0",
|
||||
"hbs": "^4.2.0",
|
||||
"https-proxy-agent": "^7.0.2",
|
||||
@ -94,7 +93,6 @@
|
||||
"@types/compression": "^1.7.2",
|
||||
"@types/cors": "^2.8.13",
|
||||
"@types/express": "^4.17.17",
|
||||
"@types/fast-levenshtein": "^0.0.4",
|
||||
"@types/js-yaml": "^4.0.5",
|
||||
"@types/jsonwebtoken": "^8.5.9",
|
||||
"@types/mime-types": "^2.1.1",
|
||||
|
@ -41,7 +41,6 @@ import axios from 'axios';
|
||||
import { exec } from 'child_process';
|
||||
import { arrayUnique, isBase64, isURL } from 'class-validator';
|
||||
import EventEmitter2 from 'eventemitter2';
|
||||
import levenshtein from 'fast-levenshtein';
|
||||
import fs, { existsSync, readFileSync } from 'fs';
|
||||
import Long from 'long';
|
||||
import NodeCache from 'node-cache';
|
||||
@ -2455,24 +2454,58 @@ export class BaileysStartupService extends WAStartupService {
|
||||
owner: this.instance.name,
|
||||
ids: jids.users.map(({ jid }) => (jid.startsWith('+') ? jid.substring(1) : jid)),
|
||||
});
|
||||
const verify = await this.client.onWhatsApp(
|
||||
...jids.users.map(({ jid }) => (!jid.startsWith('+') ? `+${jid}` : jid)),
|
||||
);
|
||||
const numbersToVerify = jids.users.map(({ jid }) => jid.replace('+', ''));
|
||||
const verify = await this.client.onWhatsApp(...numbersToVerify);
|
||||
const users: OnWhatsAppDto[] = await Promise.all(
|
||||
jids.users.map(async (user) => {
|
||||
const MAX_SIMILARITY_THRESHOLD = 0.01;
|
||||
const isBrWithDigit = user.jid.startsWith('55') && user.jid.slice(4, 5) === '9' && user.jid.length === 28;
|
||||
const jid = isBrWithDigit ? user.jid.slice(0, 4) + user.jid.slice(5) : user.jid;
|
||||
let numberVerified: (typeof verify)[0] | null = null;
|
||||
|
||||
const numberVerified = verify.find((v) => {
|
||||
const mainJidSimilarity = levenshtein.get(user.jid, v.jid) / Math.max(user.jid.length, v.jid.length);
|
||||
const jidSimilarity = levenshtein.get(jid, v.jid) / Math.max(jid.length, v.jid.length);
|
||||
return mainJidSimilarity <= MAX_SIMILARITY_THRESHOLD || jidSimilarity <= MAX_SIMILARITY_THRESHOLD;
|
||||
});
|
||||
// Brazilian numbers
|
||||
if (user.number.startsWith('55')) {
|
||||
const numberWithDigit =
|
||||
user.number.slice(4, 5) === '9' && user.number.length === 13
|
||||
? user.number
|
||||
: `${user.number.slice(0, 4)}9${user.number.slice(4)}`;
|
||||
const numberWithoutDigit =
|
||||
user.number.length === 12 ? user.number : user.number.slice(0, 4) + user.number.slice(5);
|
||||
|
||||
numberVerified = verify.find(
|
||||
(v) => v.jid === `${numberWithDigit}@s.whatsapp.net` || v.jid === `${numberWithoutDigit}@s.whatsapp.net`,
|
||||
);
|
||||
}
|
||||
|
||||
// Mexican/Argentina numbers
|
||||
// Ref: https://faq.whatsapp.com/1294841057948784
|
||||
if (!numberVerified && (user.number.startsWith('52') || user.number.startsWith('54'))) {
|
||||
let prefix = '';
|
||||
if (user.number.startsWith('52')) {
|
||||
prefix = '1';
|
||||
}
|
||||
if (user.number.startsWith('54')) {
|
||||
prefix = '9';
|
||||
}
|
||||
|
||||
const numberWithDigit =
|
||||
user.number.slice(2, 3) === prefix && user.number.length === 13
|
||||
? user.number
|
||||
: `${user.number.slice(0, 2)}${prefix}${user.number.slice(2)}`;
|
||||
const numberWithoutDigit =
|
||||
user.number.length === 12 ? user.number : user.number.slice(0, 2) + user.number.slice(3);
|
||||
|
||||
numberVerified = verify.find(
|
||||
(v) => v.jid === `${numberWithDigit}@s.whatsapp.net` || v.jid === `${numberWithoutDigit}@s.whatsapp.net`,
|
||||
);
|
||||
}
|
||||
|
||||
if (!numberVerified) {
|
||||
numberVerified = verify.find((v) => v.jid === user.jid);
|
||||
}
|
||||
|
||||
const numberJid = numberVerified?.jid || user.jid;
|
||||
return {
|
||||
exists: !!numberVerified?.exists,
|
||||
jid: numberVerified?.jid || user.jid,
|
||||
name: contacts.find((c) => c.id === jid)?.pushName,
|
||||
jid: numberJid,
|
||||
name: contacts.find((c) => c.id === numberJid)?.pushName,
|
||||
number: user.number,
|
||||
};
|
||||
}),
|
||||
|
Loading…
Reference in New Issue
Block a user