Files
botGuna/initBailey.js
2023-02-17 06:22:36 -06:00

125 lines
4.0 KiB
JavaScript

const baileysReq = require ('@adiwajshing/baileys')
var pino = require('pino');
const { createWriteStream } = require('fs')
var combineImage = require('combine-image');
const {
default: makeWASocket,
useMultiFileAuthState,
Browsers,
DisconnectReason,
} = baileysReq
const globalVendorArgs = { name: `bot` }
var qr = require('qr-image');
/**
* Hace promesa el write
* @param {*} base64
*/
const baileyGenerateImage = async (base64, name = 'qr.png') => {
const PATH_QR = `${process.cwd()}/${name}`;
let qr_svg = qr.image(base64, { type: 'png', margin: 4 });
const writeFilePromise = () =>
new Promise((resolve, reject) => {
const file = qr_svg.pipe(createWriteStream(PATH_QR));
file.on('finish', () => resolve(true));
file.on('error', reject);
});
await writeFilePromise();
const cleanImage = await combineImage([PATH_QR], {
margin: 15,
color: 0xffffffff,
});
cleanImage.write(PATH_QR);
};
function listenMessage(client){
client.ev.on('messages.upsert', async msg => {
console.log('M=', msg)
console.log('replying to', msg.messages[0])
// await sock.sendMessage(m.messages[0].key.remoteJid, { text: 'hola como estas' })
})
}
/**
* Iniciar todo Bailey
*/
initBailey = async () => {
const NAME_DIR_SESSION = `baileys_sessions`;
const { state, saveCreds } = await useMultiFileAuthState(
NAME_DIR_SESSION
);
saveCredsGlobal = saveCreds;
const sock = makeWASocket({
// can provide additional config here
printQRInTerminal: true,
auth: state,
browser: Browsers.macOS('Desktop'),
syncFullHistory: false,
logger: pino({ level: 'error' }),
})
try {
sock.ev.on('connection.update', async (update) => {
const { connection, lastDisconnect, qr } = update;
const statusCode = lastDisconnect?.error?.output?.statusCode;
if(connection === 'close') {
if (statusCode !== DisconnectReason.loggedOut) {
initBailey();
}
if (statusCode === DisconnectReason.loggedOut) {
const PATH_BASE = join(process.cwd(), NAME_DIR_SESSION);
rimraf(PATH_BASE, (err) => {
if (err) return
});
initBailey();
}
}
/** Conexion abierta correctamente */
if (connection === 'open') {
console.log('ready', true);
// initBusEvents(sock);
}
/** QR Code */
if (qr) {
console.log('require_action', {
instructions: [
`Debes escanear el QR Code para iniciar ${globalVendorArgs.name}.qr.png`,
`Recuerda que el QR se actualiza cada minuto `,
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
],
});
await baileyGenerateImage(
qr,
`${globalVendorArgs.name}.qr.png`
);
}
});
sock.ev.on('creds.update', async () => {
await saveCreds();
});
} catch (e) {
// logger.log(e);
console.log('auth_failure', [
`Algo inesperado ha ocurrido NO entres en pánico`,
`Reinicia el BOT`,
`Tambien puedes mirar un log que se ha creado baileys.log`,
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
`(Puedes abrir un ISSUE) https://github.com/codigoencasa/bot-whatsapp/issues/new/choose`,
]);
}
listenMessage(sock)
// sock.ev.on('messages.upsert', async (m) => {
// console.log('M=', m)
// console.log('replying to', m.messages[0])
// // await sock.sendMessage(m.messages[0].key.remoteJid, { text: 'hola como estas' })
// })
}
// run in main file
initBailey()
module.exports = { initBailey, listenMessage, baileyGenerateImage }