diff --git a/packages/provider/src/baileys/index.js b/packages/provider/src/baileys/index.js index a0c8a84..0b14afe 100644 --- a/packages/provider/src/baileys/index.js +++ b/packages/provider/src/baileys/index.js @@ -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 diff --git a/packages/provider/src/venom/index.js b/packages/provider/src/venom/index.js index 8780e84..645e809 100644 --- a/packages/provider/src/venom/index.js +++ b/packages/provider/src/venom/index.js @@ -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) } } diff --git a/packages/provider/src/venom/utils.js b/packages/provider/src/venom/utils.js index ff1d733..cf1dc5f 100644 --- a/packages/provider/src/venom/utils.js +++ b/packages/provider/src/venom/utils.js @@ -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, +}