This commit is contained in:
Leifer Mendez
2022-11-10 21:16:22 +01:00
parent 4216cdd1e5
commit 228530a454
14 changed files with 1891 additions and 3136 deletions

View File

@@ -0,0 +1,62 @@
const { Client, LocalAuth } = require('whatsapp-web.js')
const { ProviderClass } = require('@bot-whatsapp/core')
const { cleanNumber, generateImage } = require('./utils')
const WebWhatsappVendor = new Client({
authStrategy: new LocalAuth(),
})
class WebWhatsappProvider extends ProviderClass {
vendor
constructor(_vendor) {
super()
this.vendor = _vendor
for (const { event, func } of this.busEvents()) {
this.vendor.on(event, func)
}
this.vendor.initialize()
}
/**
* Mapeamos los eventos nativos de whatsapp-web.js a los que la clase Provider espera
* para tener un standar de eventos
* @returns
*/
busEvents = () => [
{
event: 'qr',
func: (qr) => {
this.emit('require_action', {
instructions: `Debes escanear el QR Code para iniciar session reivsa qr.svg`,
})
generateImage(qr)
},
},
{
event: 'ready',
func: () => this.emit('ready', true),
},
{
event: 'auth_failure',
func: (payload) => this.emit('error', payload),
},
{
event: 'authenticated',
func: () => this.emit('ready', true),
},
{
event: 'message',
func: (payload) => this.emit('message', payload),
},
]
sendMessage = async (userId, message) => {
const number = cleanNumber(userId)
return this.vendor.sendMessage(number, message)
}
}
module.exports = new WebWhatsappProvider(WebWhatsappVendor)

View File

@@ -0,0 +1,17 @@
const { createWriteStream } = require('fs')
const qr = require('qr-image')
const cleanNumber = (number) => {
number = number.replace('@c.us', '')
number = `${number}@c.us`
return number
}
const generateImage = (base64) => {
let qr_svg = qr.image(base64, { type: 'svg', margin: 4 })
qr_svg.pipe(createWriteStream(`${process.cwd()}/qr.svg`))
console.log(`⚡ Recuerda que el QR se actualiza cada minuto ⚡'`)
console.log(`⚡ Actualiza F5 el navegador para mantener el mejor QR⚡`)
}
module.exports = { cleanNumber, generateImage }