mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-20 12:39:24 +00:00
web-whatsapp work
This commit is contained in:
71
packages/provider/adapters/web-whatsapp.js
Normal file
71
packages/provider/adapters/web-whatsapp.js
Normal 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)
|
||||
Reference in New Issue
Block a user