web-whatsapp work

This commit is contained in:
Leifer Mendez
2022-11-10 20:17:07 +01:00
parent 8410309e38
commit 6afb019f9d
14 changed files with 2374 additions and 554 deletions

View File

@@ -1,5 +1,24 @@
const { EventEmitter } = require('node:events')
const ProviderClass = require('../../core/classes/provider.class')
class MockProvider extends EventEmitter {}
class MockSetting {
enviar = async (number, msg) => {
return Promise.resolve('1')
}
}
const mock = new MockSetting()
class MockProvider extends ProviderClass {
vendor
constructor() {
super()
this.vendor = mock
}
sendMessage = async (userId, message) => {
const status = await this.vendor.enviar(userId, message)
return { userId, message, status }
}
}
module.exports = MockProvider

View File

@@ -1 +1,19 @@
class TwilioProvider {}
const twilio = require('twilio')
const ProviderClass = require('../classes/provider.class')
const TwilioVendor = new twilio(accountSid, authToken)
class TwilioProvider extends ProviderClass {
constructor() {
super(TwilioVendor)
}
sendMessage = (message) =>
this.vendor.messages.create({
body: message,
to: '+12345678901', // Text this number
from: '+12345678901', // From a valid Twilio number
})
}
module.exports = TwilioProvider

View File

@@ -0,0 +1,71 @@
const { createWriteStream } = require('fs')
const qr = require('qr-image')
const { Client, LocalAuth } = require('whatsapp-web.js')
//TODO: Acoplamiento OJO
const { ProviderClass } = require('../../index').botcore
const WebWhatsappVendor = new Client({
authStrategy: new LocalAuth(),
})
/**
* TODO esto se debe mover a un utils.js
* @param {*} number
* @returns
*/
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⚡`)
}
//////////////////////////////////////////////////////
class WebWhatsappProvider extends ProviderClass {
vendor
constructor(_vendor) {
super()
this.vendor = _vendor
this.vendor.on('qr', (qr) => {
this.emit('require_action', {
eventName: 'require_action',
instructions: `Debes escanear el QR Code para iniciar session reivsa qr.svg`,
})
generateImage(qr)
})
this.vendor.on('ready', (ready) =>
this.emit('ready', { eventName: 'ready', ...ready })
)
this.vendor.on('auth_failure', (error) =>
this.emit('error', { eventName: 'error', ...error })
)
this.vendor.on('authenticated', (authenticated) =>
this.emit('ready', { eventName: 'authenticated', ...authenticated })
)
this.vendor.on('message', (message) =>
this.emit('message', { eventName: 'message', ...message })
)
this.vendor.initialize()
}
sendMessage = async (userId, message) => {
const number = cleanNumber(userId)
return this.vendor.sendMessage(number, message)
}
}
/**
* Injectamos!
*/
module.exports = new WebWhatsappProvider(WebWhatsappVendor)