Spaces:
Building
Building
File size: 2,474 Bytes
ba5c923 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
import makeWASocket, {
DisconnectReason,
useMultiFileAuthState
} from "@whiskeysockets/baileys";
import { Boom } from "@hapi/boom";
import * as fs from "fs";
import { connectDB } from "./db";
import { useMongoDBAuthState } from "mongo-baileys";
async function connectToWhatsApp(onStart?: () => void) {
const { state, saveCreds } = process.env.MONGO_URL
? await useMongoDBAuthState((await connectDB()).collection as any)
: await useMultiFileAuthState("auth_info_baileys");
const sock = makeWASocket({
// can provide additional config here
printQRInTerminal: true,
mobile: false,
keepAliveIntervalMs: 10000,
syncFullHistory: false,
markOnlineOnConnect: true,
defaultQueryTimeoutMs: undefined,
auth: state
});
sock.ev.on("creds.update", saveCreds);
const setupAuth = new Promise(async (resolve, rej) => {
sock.ev.on("connection.update", (update) => {
const { connection, lastDisconnect, qr } = update;
global.waQrCode = qr || null;
try {
if (connection === "close" && lastDisconnect) {
const statusCode = (lastDisconnect.error as Boom)?.output?.statusCode;
const shouldReconnect =
(lastDisconnect.error as Boom)?.output?.statusCode !==
DisconnectReason.loggedOut;
console.log(
"connection closed due to ",
lastDisconnect.error,
", status code: ",
statusCode,
", reconnecting ",
shouldReconnect
);
// reconnect if not logged out
if (shouldReconnect) {
connectToWhatsApp();
} else {
// clear credentials
if (lastDisconnect.error) {
if (fs.existsSync("./auth_info_baileys")) {
fs.rmSync("./auth_info_baileys", {
force: true,
recursive: true
});
}
}
}
} else if (connection === "open") {
console.log("\n ✔ opened connection \n");
resolve(null);
}
} catch (err) {
console.log(err);
}
});
});
const FIVE_MIN_IN_MS = 1000 * 60 * 5;
await Promise.race([
setupAuth,
new Promise((_, rej) =>
setTimeout(
() => rej("Timeout while setting up connection to whatsapp"),
FIVE_MIN_IN_MS
)
)
]);
global.waSock = sock;
}
// run in main file
export { connectToWhatsApp };
|