mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-17 19:26:23 +00:00
feat: 🔥 bailey add media
This commit is contained in:
@@ -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",
|
||||||
|
|||||||
16
packages/provider/common/fileType.js
Normal file
16
packages/provider/common/fileType.js
Normal 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 }
|
||||||
@@ -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,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
61
yarn.lock
61
yarn.lock
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user