fix: search WhatsApp account subdirs for LID mapping files

When jidToE164() is called without opts.authDir (e.g., from extract.ts),
the LID reverse mapping lookup fails because it only searches the
top-level credentials directory, not the whatsapp/<accountId>/ subdirs
where the mapping files are actually stored.

This causes the reply-to-bot trigger in groups to fail when the bot's
JID uses the WhatsApp LID format, as the implicit mention comparison
can't resolve the LID to an E164 phone number.

Fixes #2771
This commit is contained in:
Rayo (via Clawdbot) 2026-01-27 13:40:02 +00:00
parent 3f83afe4a6
commit 7a5732b098

View File

@ -89,7 +89,28 @@ function resolveLidMappingDirs(opts?: JidToE164Options): string[] {
addDir(opts?.authDir); addDir(opts?.authDir);
for (const dir of opts?.lidMappingDirs ?? []) addDir(dir); for (const dir of opts?.lidMappingDirs ?? []) addDir(dir);
addDir(resolveOAuthDir()); addDir(resolveOAuthDir());
addDir(path.join(CONFIG_DIR, "credentials")); const credentialsDir = path.join(CONFIG_DIR, "credentials");
addDir(credentialsDir);
// Also search WhatsApp account subdirectories for LID mappings
const waDir = path.join(credentialsDir, "whatsapp");
try {
if (fs.existsSync(waDir) && fs.statSync(waDir).isDirectory()) {
for (const account of fs.readdirSync(waDir)) {
const accountDir = path.join(waDir, account);
try {
if (fs.statSync(accountDir).isDirectory()) {
dirs.add(accountDir);
}
} catch {
// Skip if can't stat
}
}
}
} catch {
// Skip if whatsapp dir doesn't exist or can't be read
}
return [...dirs]; return [...dirs];
} }