Files
bot-whatsapp/packages/provider/web-whatsapp/index.js
2022-11-16 23:16:54 +01:00

90 lines
2.5 KiB
JavaScript

const { Client, LocalAuth } = require('whatsapp-web.js')
const { ProviderClass } = require('@bot-whatsapp/bot')
const { Console } = require('console')
const { createWriteStream } = require('fs')
const { cleanNumber, generateImage, isValidNumber } = require('./utils')
const logger = new Console({
stdout: createWriteStream('./log'),
})
class WebWhatsappProvider extends ProviderClass {
vendor
constructor() {
super()
this.vendor = new Client({
authStrategy: new LocalAuth(),
})
const listEvents = this.busEvents()
for (const { event, func } of listEvents) {
this.vendor.on(event, func)
}
this.vendor.initialize().catch((e) => {
logger.log(e)
this.emit('require_action', {
instructions: [
`Debes eliminar la carpeta .wwebjs_auth`,
`y reiniciar nuevamente el bot `,
],
})
})
}
/**
* Mapeamos los eventos nativos de whatsapp-web.js a los que la clase Provider espera
* para tener un standar de eventos
* @returns
*/
busEvents = () => [
{
event: 'auth_failure',
func: (payload) => this.emit('error', payload),
},
{
event: 'qr',
func: (qr) => {
this.emit('require_action', {
instructions: [
`Debes escanear el QR Code para iniciar session reivsa qr.svg`,
`Recuerda que el QR se actualiza cada minuto `,
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
],
})
generateImage(qr)
},
},
{
event: 'ready',
func: () => this.emit('ready', true),
},
{
event: 'authenticated',
func: () => this.emit('ready', true),
},
{
event: 'message',
func: (payload) => {
if (payload.from === 'status@broadcast') {
return
}
if (!isValidNumber(payload.from)) {
return
}
payload.from = cleanNumber(payload.from, true)
this.emit('message', payload)
},
},
]
sendMessage = async (userId, message) => {
const number = cleanNumber(userId)
return this.vendor.sendMessage(number, message)
}
}
module.exports = WebWhatsappProvider