projeto-hit/backend/src/services/WbotServices/wbotMonitor.ts

81 lines
2.0 KiB
TypeScript

import * as Sentry from "@sentry/node";
import { Client } from "whatsapp-web.js";
import { getIO } from "../../libs/socket";
import Whatsapp from "../../models/Whatsapp";
import { logger } from "../../utils/logger";
import { StartWhatsAppSession } from "./StartWhatsAppSession";
interface Session extends Client {
id?: number;
}
const wbotMonitor = async (
wbot: Session,
whatsapp: Whatsapp
): Promise<void> => {
const io = getIO();
const sessionName = whatsapp.name;
try {
wbot.on("change_state", async newState => {
logger.info(`Monitor session: ${sessionName}, ${newState}`);
// console.log('>>>>>>>>>>>>>> change_state wbotMonitor.ts MOBILE NUMBER: ', wbot.info["wid"]["user"])
try {
await whatsapp.update({ status: newState });
} catch (err) {
Sentry.captureException(err);
logger.error(err);
}
io.emit("whatsappSession", {
action: "update",
session: whatsapp
});
});
wbot.on("change_battery", async batteryInfo => {
const { battery, plugged } = batteryInfo;
logger.info(
`Battery session: ${sessionName} ${battery}% - Charging? ${plugged}`
);
try {
await whatsapp.update({ battery, plugged });
} catch (err) {
Sentry.captureException(err);
logger.error(err);
}
io.emit("whatsappSession", {
action: "update",
session: whatsapp
});
});
wbot.on("disconnected", async reason => {
logger.info(`Disconnected session: ${sessionName}, reason: ${reason}`);
try {
await whatsapp.update({ status: "OPENING", session: "" });
} catch (err) {
Sentry.captureException(err);
logger.error(err);
}
io.emit("whatsappSession", {
action: "update",
session: whatsapp
});
setTimeout(() => StartWhatsAppSession(whatsapp), 2000);
});
} catch (err) {
Sentry.captureException(err);
logger.error(err);
}
};
export default wbotMonitor;