fix(provider): 🔥 send message togther with media

This commit is contained in:
Leifer Mendez
2022-12-19 12:16:20 +01:00
parent d9aa97c781
commit b6bf43d70f
3 changed files with 75 additions and 20 deletions

View File

@@ -33,7 +33,7 @@ class BaileysProvider extends ProviderClass {
/**
* Iniciar todo Bailey
*/
async initBailey() {
initBailey = async () => {
const { state, saveCreds } = await useMultiFileAuthState('sessions')
try {
@@ -135,9 +135,10 @@ class BaileysProvider extends ProviderClass {
* @example await sendMessage('+XXXXXXXXXXX', 'https://dominio.com/imagen.jpg' | 'img/imagen.jpg')
*/
sendMedia = async (number, imageUrl) => {
sendMedia = async (number, imageUrl, text) => {
await this.vendor.sendMessage(number, {
image: { url: imageUrl },
text,
})
}
@@ -166,21 +167,6 @@ class BaileysProvider extends ProviderClass {
sendText = async (number, message) => {
return this.vendor.sendMessage(number, { text: message })
}
/**
* TODO: Necesita terminar de implementar el sendMedia y sendButton guiarse:
* https://github.com/leifermendez/bot-whatsapp/blob/4e0fcbd8347f8a430adb43351b5415098a5d10df/packages/provider/src/web-whatsapp/index.js#L165
* @param {string} number
* @param {string} message
* @example await sendMessage('+XXXXXXXXXXX', 'Hello World')
*/
sendMessage = async (numberIn, message, { options }) => {
const number = baileyCleanNumber(numberIn)
// if (options?.buttons?.length)
// return this.sendButtons(number, message, options.buttons)
if (options?.media) return this.sendMedia(number, options.media)
return this.sendText(number, message)
}
/**
*
@@ -224,6 +210,23 @@ class BaileysProvider extends ProviderClass {
await this.vendor.sendMessage(`${numberClean}@c.us`, buttonMessage)
}
/**
* TODO: Necesita terminar de implementar el sendMedia y sendButton guiarse:
* https://github.com/leifermendez/bot-whatsapp/blob/4e0fcbd8347f8a430adb43351b5415098a5d10df/packages/provider/src/web-whatsapp/index.js#L165
* @param {string} number
* @param {string} message
* @example await sendMessage('+XXXXXXXXXXX', 'Hello World')
*/
sendMessage = async (numberIn, message, { options }) => {
const number = baileyCleanNumber(numberIn)
// if (options?.buttons?.length)
// return this.sendButtons(number, message, options.buttons)
if (options?.media)
return this.sendMedia(number, options.media, message)
return this.sendText(number, message)
}
}
module.exports = BaileysProvider

View File

@@ -7,6 +7,7 @@ const {
venomCleanNumber,
venomGenerateImage,
venomisValidNumber,
venomDownloadMedia,
} = require('./utils')
const logger = new Console({
@@ -104,6 +105,19 @@ class VenomProvider extends ProviderClass {
}
}
/**
* Enviar imagen o multimedia
* @param {*} number
* @param {*} mediaInput
* @param {*} message
* @returns
*/
sendMedia = async (number, mediaInput, message) => {
if (!mediaInput) throw new Error(`NO_SE_ENCONTRO: ${mediaInput}`)
const fileDownloaded = await venomDownloadMedia(mediaInput)
return this.vendor.sendImage(number, fileDownloaded, '.', message)
}
/**
* Enviar mensaje al usuario
* @param {*} userId
@@ -115,7 +129,8 @@ class VenomProvider extends ProviderClass {
const number = venomCleanNumber(userId)
if (options?.buttons?.length)
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, message)
return this.vendor.sendText(number, message)
}
}

View File

@@ -1,4 +1,7 @@
const { writeFile } = require('fs')
const { writeFile, createWriteStream } = require('fs')
const { tmpdir } = require('os')
const http = require('http')
const https = require('https')
const combineImage = require('combine-image')
const venomCleanNumber = (number, full = false) => {
@@ -35,9 +38,43 @@ const venomGenerateImage = async (base) => {
cleanImage.write(PATH_QR)
}
/**
* Incompleta
* Descargar archivo multimedia para enviar
* @param {*} url
* @returns
*/
const venomDownloadMedia = (url) => {
return new Promise((resolve, reject) => {
const ext = url.split('.').pop()
const checkProtocol = url.includes('https:')
const handleHttp = checkProtocol ? https : http
const name = `tmp-${Date.now()}.${ext}`
const fullPath = `${tmpdir()}/${name}`
const file = createWriteStream(fullPath)
handleHttp.get(url, function (response) {
response.pipe(file)
file.on('finish', function () {
file.close()
resolve(fullPath)
})
file.on('error', function () {
console.log('errro')
file.close()
reject(null)
})
})
})
}
const venomisValidNumber = (rawNumber) => {
const regexGroup = /\@g.us\b/gm
const exist = rawNumber.match(regexGroup)
return !exist
}
module.exports = { venomCleanNumber, venomGenerateImage, venomisValidNumber }
module.exports = {
venomCleanNumber,
venomGenerateImage,
venomisValidNumber,
venomDownloadMedia,
}