Skip to content

Commit bab5805

Browse files
committed
Change the way numbers are validated on whatsapp
1 parent 499bd43 commit bab5805

File tree

2 files changed

+48
-17
lines changed

2 files changed

+48
-17
lines changed

package.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@
6060
"exiftool-vendored": "^22.0.0",
6161
"express": "^4.18.2",
6262
"express-async-errors": "^3.1.1",
63-
"fast-levenshtein": "^3.0.0",
6463
"form-data": "^4.0.0",
6564
"hbs": "^4.2.0",
6665
"https-proxy-agent": "^7.0.2",
@@ -94,7 +93,6 @@
9493
"@types/compression": "^1.7.2",
9594
"@types/cors": "^2.8.13",
9695
"@types/express": "^4.17.17",
97-
"@types/fast-levenshtein": "^0.0.4",
9896
"@types/js-yaml": "^4.0.5",
9997
"@types/jsonwebtoken": "^8.5.9",
10098
"@types/mime-types": "^2.1.1",

src/whatsapp/services/whatsapp.baileys.service.ts

Lines changed: 48 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ import axios from 'axios';
4141
import { exec } from 'child_process';
4242
import { arrayUnique, isBase64, isURL } from 'class-validator';
4343
import EventEmitter2 from 'eventemitter2';
44-
import levenshtein from 'fast-levenshtein';
4544
import fs, { existsSync, readFileSync } from 'fs';
4645
import Long from 'long';
4746
import 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

Comments
 (0)