mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-20 04:29:16 +00:00
fix(adapter): 🚀 venom update - cli - qr iamge
fix(adapter): 🚀 venom update - cli - qr iamge
This commit is contained in:
@@ -34,6 +34,7 @@ const startInteractive = async () => {
|
|||||||
choices: [
|
choices: [
|
||||||
{ title: 'whatsapp-web.js (gratis)', value: 'wweb' },
|
{ title: 'whatsapp-web.js (gratis)', value: 'wweb' },
|
||||||
{ title: 'Twilio', value: 'twilio' },
|
{ title: 'Twilio', value: 'twilio' },
|
||||||
|
{ title: 'Venom (gratis)', value: 'venom' },
|
||||||
{ title: 'Baileys (gratis)', value: 'bailey', disabled: true },
|
{ title: 'Baileys (gratis)', value: 'bailey', disabled: true },
|
||||||
{ title: 'API Oficial (Meta)', value: 'meta', disabled: true },
|
{ title: 'API Oficial (Meta)', value: 'meta', disabled: true },
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -1,49 +1,112 @@
|
|||||||
const { ProviderClass } = require('@bot-whatsapp/bot')
|
const { ProviderClass } = require('@bot-whatsapp/bot')
|
||||||
const venom = require('venom-bot')
|
const venom = require('venom-bot')
|
||||||
const { cleanNumber } = require('./utils/utils')
|
const {
|
||||||
|
venomCleanNumber,
|
||||||
|
venomGenerateImage,
|
||||||
|
venomisValidNumber,
|
||||||
|
} = require('./utils/utils')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ⚙️ VenomProvider: Es una clase tipo adaptor
|
||||||
|
* que extiende clases de ProviderClass (la cual es como interfaz para sber que funciones rqueridas)
|
||||||
|
* https://github.com/orkestral/venom
|
||||||
|
*/
|
||||||
class VenomProvider extends ProviderClass {
|
class VenomProvider extends ProviderClass {
|
||||||
|
vendor
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super()
|
super()
|
||||||
this.vendor
|
this.init().then(() => this.initBusEvents())
|
||||||
venom
|
|
||||||
.create(
|
|
||||||
{
|
|
||||||
session: 'session-1', //nombre de la sesion o id
|
|
||||||
multidevice: true,
|
|
||||||
},
|
|
||||||
(base64Qrimg) => this.generateQr(base64Qrimg)
|
|
||||||
)
|
|
||||||
.then((client) => {
|
|
||||||
this.vendor = client
|
|
||||||
this.start()
|
|
||||||
})
|
|
||||||
.catch((erro) => {
|
|
||||||
console.log(erro)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
generateQr = () => {
|
/**
|
||||||
|
* Iniciamos el Proveedor Venom
|
||||||
|
*/
|
||||||
|
init = async () => {
|
||||||
|
try {
|
||||||
|
const client = await venom.create(
|
||||||
|
{
|
||||||
|
session: 'session-base',
|
||||||
|
multidevice: true,
|
||||||
|
},
|
||||||
|
(base) => this.generateQr(base),
|
||||||
|
undefined,
|
||||||
|
{ logQR: false }
|
||||||
|
)
|
||||||
|
this.vendor = client
|
||||||
|
} catch (e) {
|
||||||
|
this.emit('auth_failure', {
|
||||||
|
instructions: [
|
||||||
|
`Ocurrio un error con la inicializacion de venom`,
|
||||||
|
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
|
||||||
|
`(Puedes abrir un ISSUE) https://github.com/leifermendez/bot-whatsapp/issues/new/choose`,
|
||||||
|
``,
|
||||||
|
`${e?.message}`,
|
||||||
|
],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generamos QR Code pra escanear con el Whatsapp
|
||||||
|
*/
|
||||||
|
generateQr = (qr) => {
|
||||||
|
console.clear()
|
||||||
this.emit('require_action', {
|
this.emit('require_action', {
|
||||||
instructions: [
|
instructions: [
|
||||||
`Debes escanear el QR Code para iniciar session reivsa qr.svg`,
|
`Debes escanear el QR Code para iniciar session reivsa qr.png`,
|
||||||
`Recuerda que el QR se actualiza cada minuto `,
|
`Recuerda que el QR se actualiza cada minuto `,
|
||||||
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
|
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
//generateImage(qr)
|
venomGenerateImage(qr)
|
||||||
}
|
}
|
||||||
|
|
||||||
start = () => {
|
/**
|
||||||
this.vendor.onMessage((payload) => {
|
* Mapeamos los eventos nativos de https://docs.orkestral.io/venom/#/?id=events
|
||||||
payload.from = cleanNumber(payload.from, true)
|
* para tener un standar de eventos
|
||||||
this.emit('message', payload)
|
* @returns
|
||||||
})
|
*/
|
||||||
|
busEvents = () => [
|
||||||
|
{
|
||||||
|
event: 'onMessage',
|
||||||
|
func: (payload) => {
|
||||||
|
if (payload.from === 'status@broadcast') {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!venomisValidNumber(payload.from)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
payload.from = venomCleanNumber(payload.from, true)
|
||||||
|
this.emit('message', payload)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iniciamos y mapeamos el BusEvent
|
||||||
|
* Ejemplo:
|
||||||
|
* this.vendor.onMessage() 👉 this.vendor["onMessage"]()
|
||||||
|
*/
|
||||||
|
initBusEvents = () => {
|
||||||
|
const listEvents = this.busEvents()
|
||||||
|
|
||||||
|
for (const { event, func } of listEvents) {
|
||||||
|
if (this.vendor[event])
|
||||||
|
this.vendor[event]((payload) => func(payload))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enviar mensaje al usuario
|
||||||
|
* @param {*} userId
|
||||||
|
* @param {*} message
|
||||||
|
* @param {*} param2
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
sendMessage = async (userId, message, { options }) => {
|
sendMessage = async (userId, message, { options }) => {
|
||||||
console.log('entramos')
|
const number = venomCleanNumber(userId)
|
||||||
const number = cleanNumber(userId)
|
|
||||||
if (options?.buttons?.length)
|
if (options?.buttons?.length)
|
||||||
return this.sendButtons(number, message, options.buttons)
|
return this.sendButtons(number, message, options.buttons)
|
||||||
if (options?.media) return this.sendMedia(number, options.media)
|
if (options?.media) return this.sendMedia(number, options.media)
|
||||||
|
|||||||
@@ -1,15 +1,36 @@
|
|||||||
const qr = require('qr-image')
|
const { writeFile } = require('fs')
|
||||||
const { createWriteStream } = require('fs')
|
|
||||||
|
|
||||||
const cleanNumber = (number, full = false) => {
|
const venomCleanNumber = (number, full = false) => {
|
||||||
number = number.replace('@c.us', '')
|
number = number.replace('@c.us', '')
|
||||||
number = !full ? `${number}@c.us` : `${number}`
|
number = !full ? `${number}@c.us` : `${number}`
|
||||||
return number
|
return number
|
||||||
}
|
}
|
||||||
|
|
||||||
const generateImage = (base64) => {
|
const venomGenerateImage = (base) => {
|
||||||
let qr_svg = qr.image(base64, { type: 'svg', margin: 4 })
|
const matches = base.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/)
|
||||||
qr_svg.pipe(createWriteStream(`${process.cwd()}/qr.svg`))
|
if (matches.length !== 3) {
|
||||||
|
return new Error('Invalid input string')
|
||||||
|
}
|
||||||
|
|
||||||
|
let response = {}
|
||||||
|
response.type = matches[1]
|
||||||
|
response.data = new Buffer.from(matches[2], 'base64')
|
||||||
|
|
||||||
|
var imageBuffer = response
|
||||||
|
writeFile(
|
||||||
|
`${process.cwd()}/qr.png`,
|
||||||
|
imageBuffer['data'],
|
||||||
|
'binary',
|
||||||
|
(err) => {
|
||||||
|
if (err != null) throw new Error('ERROR_QR_GENERATE')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = { cleanNumber, generateImage }
|
const venomisValidNumber = (rawNumber) => {
|
||||||
|
const regexGroup = /\@g.us\b/gm
|
||||||
|
const exist = rawNumber.match(regexGroup)
|
||||||
|
return !exist
|
||||||
|
}
|
||||||
|
module.exports = { venomCleanNumber, venomGenerateImage, venomisValidNumber }
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ class WebWhatsappProvider extends ProviderClass {
|
|||||||
func: (qr) => {
|
func: (qr) => {
|
||||||
this.emit('require_action', {
|
this.emit('require_action', {
|
||||||
instructions: [
|
instructions: [
|
||||||
`Debes escanear el QR Code para iniciar session reivsa qr.svg`,
|
`Debes escanear el QR Code para iniciar session reivsa qr.png`,
|
||||||
`Recuerda que el QR se actualiza cada minuto `,
|
`Recuerda que el QR se actualiza cada minuto `,
|
||||||
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
|
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const cleanNumber = (number, full = false) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const generateImage = (base64) => {
|
const generateImage = (base64) => {
|
||||||
let qr_svg = qr.image(base64, { type: 'svg', margin: 4 })
|
let qr_svg = qr.image(base64, { type: 'png', margin: 4 })
|
||||||
qr_svg.pipe(createWriteStream(`${process.cwd()}/qr.svg`))
|
qr_svg.pipe(createWriteStream(`${process.cwd()}/qr.svg`))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"description": "",
|
"description": "",
|
||||||
"main": "app.js",
|
"main": "app.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"pre-copy": "cd .. && yarn run copy.lib base-venom-mysql",
|
"pre-copy": "cd .. && yarn run copy.lib base-venom-memory",
|
||||||
"start": "node app.js"
|
"start": "node app.js"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"description": "",
|
"description": "",
|
||||||
"main": "app.js",
|
"main": "app.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"pre-copy": "cd .. && yarn run copy.lib base-venom-mysql",
|
"pre-copy": "cd .. && yarn run copy.lib base-venom-mongo",
|
||||||
"start": "node app.js"
|
"start": "node app.js"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
|
|||||||
Reference in New Issue
Block a user