Skip to content

Commit

Permalink
Merge pull request #796 from codigoencasa/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
leifermendez authored Aug 6, 2023
2 parents 267b137 + f52815b commit 8657543
Show file tree
Hide file tree
Showing 8 changed files with 131 additions and 18 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/root",
"version": "0.1.28",
"version": "0.1.29",
"description": "Bot de wahtsapp open source para MVP o pequeños negocios",
"main": "app.js",
"private": true,
Expand Down
2 changes: 1 addition & 1 deletion packages/docs/src/routes/docs/install/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ Cada plantilla tiene sus dependencias necesarias basadas en tu previa selección
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
"@adiwajshing/baileys": "github:WhiskeySockets/Baileys",
"@whiskeysockets/baileys": "^6.4.0",
"mysql2": "^2.3.3", 👈
},
```
Expand Down
130 changes: 124 additions & 6 deletions packages/provider/src/baileys/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,19 @@ const pino = require('pino')
const rimraf = require('rimraf')
const mime = require('mime-types')
const { join } = require('path')
const { createWriteStream, readFileSync } = require('fs')
const { createWriteStream, readFileSync, existsSync } = require('fs')
const { Console } = require('console')

const { default: makeWASocket, useMultiFileAuthState, Browsers, DisconnectReason } = require('@adiwajshing/baileys')
const {
default: makeWASocket,
useMultiFileAuthState,
Browsers,
DisconnectReason,
proto,
makeInMemoryStore,
makeCacheableSignalKeyStore,
getAggregateVotesInPollMessage,
} = require('@whiskeysockets/baileys')

const { baileyGenerateImage, baileyCleanNumber, baileyIsValidNumber } = require('./utils')

Expand All @@ -25,11 +34,13 @@ const logger = new Console({
* https://github.com/whiskeysockets/Baileys
*/
class BaileysProvider extends ProviderClass {
globalVendorArgs = { name: `bot`, gifPlayback: false }
globalVendorArgs = { name: `bot`, gifPlayback: false, usePairingCode: false, phoneNumber: null }
vendor
store
saveCredsGlobal = null
constructor(args) {
super()
this.store = null
this.globalVendorArgs = { ...this.globalVendorArgs, ...args }
this.initBailey().then()
}
Expand All @@ -40,17 +51,57 @@ class BaileysProvider extends ProviderClass {
initBailey = async () => {
const NAME_DIR_SESSION = `${this.globalVendorArgs.name}_sessions`
const { state, saveCreds } = await useMultiFileAuthState(NAME_DIR_SESSION)
const loggerBaileys = pino({ level: 'fatal' })

this.saveCredsGlobal = saveCreds

this.store = makeInMemoryStore({ loggerBaileys })
this.store.readFromFile(`${NAME_DIR_SESSION}/baileys_store.json`)
setInterval(() => {
const path = `${this.NAME_DIR_SESSION}/baileys_store.json`
if (existsSync(path)) {
this.store.writeToFile(path)
}
}, 10_000)

try {
const sock = makeWASocket({
logger: loggerBaileys,
printQRInTerminal: false,
auth: state,
auth: {
creds: state.creds,
keys: makeCacheableSignalKeyStore(state.keys, loggerBaileys),
},
browser: Browsers.macOS('Desktop'),
syncFullHistory: false,
logger: pino({ level: 'fatal' }),
generateHighQualityLinkPreview: true,
getMessage: this.getMessage,
})

this.store?.bind(sock.ev)

if (this.globalVendorArgs.usePairingCode && !sock.authState.creds.registered) {
if (this.globalVendorArgs.phoneNumber) {
await sock.waitForConnectionUpdate((update) => !!update.qr)
const code = await sock.requestPairingCode(this.globalVendorArgs.phoneNumber)
this.emit('require_action', {
instructions: [
`Acepta la notificación del WhatsApp ${this.globalVendorArgs.phoneNumber} en tu celular 👌`,
`El token para la vinculación es: ${code}`,
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
],
})
} else {
this.emit('auth_failure', [
`No se ha definido el numero de telefono agregalo`,
`Reinicia el BOT`,
`Tambien puedes mirar un log que se ha creado baileys.log`,
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
`(Puedes abrir un ISSUE) https://github.com/codigoencasa/bot-whatsapp/issues/new/choose`,
])
}
}

sock.ev.on('connection.update', async (update) => {
const { connection, lastDisconnect, qr } = update

Expand Down Expand Up @@ -79,7 +130,7 @@ class BaileysProvider extends ProviderClass {
}

/** QR Code */
if (qr) {
if (qr && !this.globalVendorArgs.usePairingCode) {
this.emit('require_action', {
instructions: [
`Debes escanear el QR Code 👌 ${this.globalVendorArgs.name}.qr.png`,
Expand Down Expand Up @@ -165,6 +216,41 @@ class BaileysProvider extends ProviderClass {
this.emit('message', payload)
},
},
{
event: 'messages.update',
func: async (message) => {
for (const { key, update } of message) {
if (update.pollUpdates) {
const pollCreation = await this.getMessage(key)
if (pollCreation) {
const pollMessage = await getAggregateVotesInPollMessage({
message: pollCreation,
pollUpdates: update.pollUpdates,
})
const [messageCtx] = message

const messageOriginalKey = messageCtx?.update?.pollUpdates[0]?.pollUpdateMessageKey
const messageOriginal = await this.store.loadMessage(
messageOriginalKey.remoteJid,
messageOriginalKey.id
)

let payload = {
...messageCtx,
body: pollMessage.find((poll) => poll.voters.length > 0)?.name || '',
from: baileyCleanNumber(key.remoteJid),
pushName: messageOriginal?.pushName,
broadcast: messageOriginal?.broadcast,
messageTimestamp: messageOriginal?.messageTimestamp,
voters: pollCreation,
type: 'poll',
}
this.emit('message', payload)
}
}
}
},
},
]

initBusEvents = (_sock) => {
Expand All @@ -176,6 +262,15 @@ class BaileysProvider extends ProviderClass {
}
}

getMessage = async (key) => {
if (this.store) {
const msg = await this.store.loadMessage(key.remoteJid, key.id)
return msg?.message || undefined
}
// only if store is present
return proto.Message.fromObject({})
}

/**
* Funcion SendRaw envia opciones directamente del proveedor
* @example await sendMessage('+XXXXXXXXXXX', 'Hello World')
Expand Down Expand Up @@ -302,6 +397,29 @@ class BaileysProvider extends ProviderClass {
return this.vendor.sendMessage(numberClean, buttonMessage)
}

/**
*
* @param {string} number
* @param {string} text
* @param {string} footer
* @param {Array} poll
* @example await sendMessage("+XXXXXXXXXXX", { poll: { "name": "You accept terms", "values": [ "Yes", "Not"], "selectableCount": 1 })
*/

sendPoll = async (numberIn, text, poll) => {
const numberClean = baileyCleanNumber(numberIn)

if (poll.options.length < 2) return false

const pollMessage = {
name: text,
values: poll.options,
selectableCount: poll?.multiselect === undefined ? 1 : poll?.multiselect ? 1 : 0,
}

return this.vendor.sendMessage(numberClean, { poll: pollMessage })
}

/**
* 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
Expand Down
3 changes: 1 addition & 2 deletions packages/provider/src/baileys/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
{
"dependencies": {
"@adiwajshing/baileys": "github:WhiskeySockets/Baileys",
"@adiwajshing/keyed-db": "^0.2.4",
"@whiskeysockets/baileys": "^6.4.0",
"wa-sticker-formatter": "4.3.2"
}
}
3 changes: 1 addition & 2 deletions starters/apps/base-baileys-json/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@
"@bot-whatsapp/provider": "latest",
"@bot-whatsapp/portal": "latest",
"mime-types": "2.1.35",
"@adiwajshing/baileys": "github:WhiskeySockets/Baileys",
"@adiwajshing/keyed-db": "^0.2.4",
"@whiskeysockets/baileys": "^6.4.0",
"wa-sticker-formatter": "4.3.2"
},
"author": "",
Expand Down
3 changes: 1 addition & 2 deletions starters/apps/base-baileys-memory/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
"@bot-whatsapp/portal": "latest",
"@adiwajshing/baileys": "github:WhiskeySockets/Baileys",
"@adiwajshing/keyed-db": "^0.2.4",
"@whiskeysockets/baileys": "^6.4.0",
"wa-sticker-formatter": "4.3.2"
},
"author": "",
Expand Down
3 changes: 1 addition & 2 deletions starters/apps/base-baileys-mongo/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@
"@bot-whatsapp/portal": "latest",
"mime-types": "2.1.35",
"mongodb": "^4.12.1",
"@adiwajshing/baileys": "github:WhiskeySockets/Baileys",
"@adiwajshing/keyed-db": "^0.2.4",
"@whiskeysockets/baileys": "^6.4.0",
"wa-sticker-formatter": "4.3.2"
},
"author": "",
Expand Down
3 changes: 1 addition & 2 deletions starters/apps/base-baileys-mysql/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@
"@bot-whatsapp/provider": "latest",
"@bot-whatsapp/portal": "latest",
"mysql2": "^2.3.3",
"@adiwajshing/baileys": "github:WhiskeySockets/Baileys",
"@adiwajshing/keyed-db": "^0.2.4",
"@whiskeysockets/baileys": "^6.4.0",
"wa-sticker-formatter": "4.3.2"
},
"author": "",
Expand Down

0 comments on commit 8657543

Please sign in to comment.