feat: 🔥 bailey add media

This commit is contained in:
Leifer Mendez
2023-01-24 16:54:31 +01:00
parent cebfed0382
commit eab39e4ac0
6 changed files with 149 additions and 23 deletions

View File

@@ -80,7 +80,9 @@
"eslint-config-prettier": "^8.5.0", "eslint-config-prettier": "^8.5.0",
"fs-extra": "^11.1.0", "fs-extra": "^11.1.0",
"git-cz": "^4.9.0", "git-cz": "^4.9.0",
"got": "11.8.3",
"husky": "^8.0.2", "husky": "^8.0.2",
"mime-types": "^2.1.35",
"only-allow": "^1.1.1", "only-allow": "^1.1.1",
"prettier": "^2.8.0", "prettier": "^2.8.0",
"pretty-quick": "^3.1.3", "pretty-quick": "^3.1.3",

View File

@@ -0,0 +1,16 @@
const mimeDep = require('mime-types')
/**
* Extrar el mimetype from buffer
* @param {string} response
* @returns
*/
const fileTypeFromFile = async (response) => {
const type = response.headers['content-type'] ?? null
const ext = mimeDep.extension(type)
return {
type,
ext,
}
}
module.exports = { fileTypeFromFile }

View File

@@ -170,12 +170,51 @@ class BaileysProvider extends ProviderClass {
sendMedia = async (number, imageUrl, text) => { sendMedia = async (number, imageUrl, text) => {
const fileDownloaded = await baileyDownloadMedia(imageUrl) const fileDownloaded = await baileyDownloadMedia(imageUrl)
const mimeType = mime.lookup(fileDownloaded)
if (mimeType.includes('image'))
return this.sendImage(number, fileDownloaded, text)
if (mimeType.includes('video'))
return this.sendVideo(number, fileDownloaded, text)
if (mimeType.includes('audio'))
return this.sendAudio(number, fileDownloaded, text)
console.log(mimeType)
return this.vendor.sendMessage(number, { return this.vendor.sendMessage(number, {
image: readFileSync(fileDownloaded), image: readFileSync(fileDownloaded),
caption: text, caption: text,
}) })
} }
/**
*
* @param {*} number
* @param {*} imageUrl
* @param {*} text
* @returns
*/
sendImage = async (number, filePath, text) => {
return this.vendor.sendMessage(number, {
image: readFileSync(filePath),
caption: text,
})
}
/**
*
* @param {*} number
* @param {*} imageUrl
* @param {*} text
* @returns
*/
sendVideo = async (number, filePath, text) => {
return this.vendor.sendMessage(number, {
video: readFileSync(filePath),
caption: text,
gifPlayback: true,
})
}
/** /**
* @alpha * @alpha
* @param {string} number * @param {string} number
@@ -185,8 +224,7 @@ class BaileysProvider extends ProviderClass {
*/ */
sendAudio = async (number, audioUrl, voiceNote = false) => { sendAudio = async (number, audioUrl, voiceNote = false) => {
const numberClean = number.replace('+', '') await this.vendor.sendMessage(number, {
await this.vendor.sendMessage(`${numberClean}@c.us`, {
audio: { url: audioUrl }, audio: { url: audioUrl },
ptt: voiceNote, ptt: voiceNote,
}) })

View File

@@ -1,7 +1,6 @@
{ {
"dependencies": { "dependencies": {
"@adiwajshing/baileys": "4.4.0", "@adiwajshing/baileys": "4.4.0",
"mime-types": "2.1.35",
"wa-sticker-formatter": "4.3.2" "wa-sticker-formatter": "4.3.2"
} }
} }

View File

@@ -1,10 +1,12 @@
const { createWriteStream } = require('fs') const { createWriteStream, rename } = require('fs')
const combineImage = require('combine-image') const combineImage = require('combine-image')
const qr = require('qr-image') const qr = require('qr-image')
const { tmpdir } = require('os') const { tmpdir } = require('os')
const http = require('http') const http = require('http')
const https = require('https') const https = require('https')
const { fileTypeFromFile } = require('../../common/fileType')
const baileyCleanNumber = (number, full = false) => { const baileyCleanNumber = (number, full = false) => {
number = number.replace('@s.whatsapp.net', '') number = number.replace('@s.whatsapp.net', '')
number = !full ? `${number}@s.whatsapp.net` : `${number}` number = !full ? `${number}@s.whatsapp.net` : `${number}`
@@ -47,27 +49,43 @@ const baileyIsValidNumber = (rawNumber) => {
* @param {*} url * @param {*} url
* @returns * @returns
*/ */
const baileyDownloadMedia = (url) => { const baileyDownloadMedia = async (url) => {
return new Promise((resolve, reject) => { const handleDownload = () => {
const ext = url.split('.').pop()
const checkProtocol = url.includes('https:') const checkProtocol = url.includes('https:')
const handleHttp = checkProtocol ? https : http const handleHttp = checkProtocol ? https : http
const name = `tmp-${Date.now()}.${ext}` const name = `tmp-${Date.now()}-dat`
const fullPath = `${tmpdir()}/${name}` const fullPath = `${tmpdir()}/${name}`
const file = createWriteStream(fullPath) const file = createWriteStream(fullPath)
handleHttp.get(url, function (response) {
response.pipe(file) return new Promise((res, rej) => {
file.on('finish', function () { handleHttp.get(url, function (response) {
file.close() response.pipe(file)
resolve(fullPath) file.on('finish', async function () {
}) file.close()
file.on('error', function () { res({ response, fullPath })
console.log('errro') })
file.close() file.on('error', function () {
reject(null) file.close()
rej(null)
})
}) })
}) })
}) }
const handleFile = (pathInput, ext) =>
new Promise((resolve, reject) => {
const fullPath = `${pathInput}.${ext}`
rename(pathInput, fullPath, (err) => {
if (err) reject(null)
resolve(fullPath)
})
})
const httpResponse = await handleDownload()
const { ext } = await fileTypeFromFile(httpResponse.response)
const getPath = await handleFile(httpResponse.fullPath, ext)
return getPath
} }
module.exports = { module.exports = {

View File

@@ -1112,7 +1112,10 @@ __metadata:
eslint-config-prettier: ^8.5.0 eslint-config-prettier: ^8.5.0
fs-extra: ^11.1.0 fs-extra: ^11.1.0
git-cz: ^4.9.0 git-cz: ^4.9.0
got: 11.8.3
husky: ^8.0.2 husky: ^8.0.2
mime-types: ^2.1.35
name2mime: ^1.0.1
only-allow: ^1.1.1 only-allow: ^1.1.1
prettier: ^2.8.0 prettier: ^2.8.0
pretty-quick: ^3.1.3 pretty-quick: ^3.1.3
@@ -2933,6 +2936,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@sindresorhus/is@npm:^4.0.0":
version: 4.6.0
resolution: "@sindresorhus/is@npm:4.6.0"
checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2
languageName: node
linkType: hard
"@sindresorhus/is@npm:^5.2.0": "@sindresorhus/is@npm:^5.2.0":
version: 5.3.0 version: 5.3.0
resolution: "@sindresorhus/is@npm:5.3.0" resolution: "@sindresorhus/is@npm:5.3.0"
@@ -2977,7 +2987,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@szmarczak/http-timer@npm:^4.0.0": "@szmarczak/http-timer@npm:^4.0.0, @szmarczak/http-timer@npm:^4.0.5":
version: 4.0.6 version: 4.0.6
resolution: "@szmarczak/http-timer@npm:4.0.6" resolution: "@szmarczak/http-timer@npm:4.0.6"
dependencies: dependencies:
@@ -5073,6 +5083,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"cacheable-lookup@npm:^5.0.3":
version: 5.0.4
resolution: "cacheable-lookup@npm:5.0.4"
checksum: 763e02cf9196bc9afccacd8c418d942fc2677f22261969a4c2c2e760fa44a2351a81557bd908291c3921fe9beb10b976ba8fa50c5ca837c5a0dd945f16468f2d
languageName: node
linkType: hard
"cacheable-lookup@npm:^7.0.0": "cacheable-lookup@npm:^7.0.0":
version: 7.0.0 version: 7.0.0
resolution: "cacheable-lookup@npm:7.0.0" resolution: "cacheable-lookup@npm:7.0.0"
@@ -5125,7 +5142,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"cacheable-request@npm:^7.0.1": "cacheable-request@npm:^7.0.1, cacheable-request@npm:^7.0.2":
version: 7.0.2 version: 7.0.2
resolution: "cacheable-request@npm:7.0.2" resolution: "cacheable-request@npm:7.0.2"
dependencies: dependencies:
@@ -9899,6 +9916,25 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"got@npm:11.8.3":
version: 11.8.3
resolution: "got@npm:11.8.3"
dependencies:
"@sindresorhus/is": ^4.0.0
"@szmarczak/http-timer": ^4.0.5
"@types/cacheable-request": ^6.0.1
"@types/responselike": ^1.0.0
cacheable-lookup: ^5.0.3
cacheable-request: ^7.0.2
decompress-response: ^6.0.0
http2-wrapper: ^1.0.0-beta.5.2
lowercase-keys: ^2.0.0
p-cancelable: ^2.0.0
responselike: ^2.0.0
checksum: 3b6db107d9765470b18e4cb22f7c7400381be7425b9be5823f0168d6c21b5d6b28b023c0b3ee208f73f6638c3ce251948ca9b54a1e8f936d3691139ac202d01b
languageName: node
linkType: hard
"got@npm:^10.0.0, got@npm:^10.7.0": "got@npm:^10.0.0, got@npm:^10.7.0":
version: 10.7.0 version: 10.7.0
resolution: "got@npm:10.7.0" resolution: "got@npm:10.7.0"
@@ -10446,6 +10482,16 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"http2-wrapper@npm:^1.0.0-beta.5.2":
version: 1.0.3
resolution: "http2-wrapper@npm:1.0.3"
dependencies:
quick-lru: ^5.1.1
resolve-alpn: ^1.0.0
checksum: 74160b862ec699e3f859739101ff592d52ce1cb207b7950295bf7962e4aa1597ef709b4292c673bece9c9b300efad0559fc86c71b1409c7a1e02b7229456003e
languageName: node
linkType: hard
"http2-wrapper@npm:^2.1.10": "http2-wrapper@npm:^2.1.10":
version: 2.2.0 version: 2.2.0
resolution: "http2-wrapper@npm:2.2.0" resolution: "http2-wrapper@npm:2.2.0"
@@ -13443,7 +13489,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": "mime-types@npm:^2.1.12, mime-types@npm:^2.1.35, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
version: 2.1.35 version: 2.1.35
resolution: "mime-types@npm:2.1.35" resolution: "mime-types@npm:2.1.35"
dependencies: dependencies:
@@ -13839,6 +13885,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"name2mime@npm:^1.0.1":
version: 1.0.1
resolution: "name2mime@npm:1.0.1"
checksum: 46630096d2a5c381231f5e5025d3aaef824b5db29677971b8a93f565e63979524d6f43457dd4b93591341c26af2abb44ef7aa87943c51d2eed60b94519815880
languageName: node
linkType: hard
"named-placeholders@npm:^1.1.2": "named-placeholders@npm:^1.1.2":
version: 1.1.2 version: 1.1.2
resolution: "named-placeholders@npm:1.1.2" resolution: "named-placeholders@npm:1.1.2"
@@ -16820,7 +16873,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"resolve-alpn@npm:^1.2.0": "resolve-alpn@npm:^1.0.0, resolve-alpn@npm:^1.2.0":
version: 1.2.1 version: 1.2.1
resolution: "resolve-alpn@npm:1.2.1" resolution: "resolve-alpn@npm:1.2.1"
checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0 checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0