diff --git a/packages/bot/core/core.class.js b/packages/bot/core/core.class.js index 011bbf1..cb22dca 100644 --- a/packages/bot/core/core.class.js +++ b/packages/bot/core/core.class.js @@ -1,3 +1,4 @@ +const { validateCtx } = require('../io/methods') const { printer } = require('../utils/interactive') /** @@ -46,9 +47,9 @@ class CoreClass { * @private * @param {*} ctxMessage */ - handleMsg = ({ body, from }) => { + handleMsg = async ({ body, from }) => { let msgToSend = [] - const prevMsg = [...this.databaseClass.listHistory].pop() + const prevMsg = await this.databaseClass.getPrevByNumber(from) if (prevMsg?.ref && prevMsg?.options?.capture) { msgToSend = this.flowClass.find(prevMsg.ref, true) || [] @@ -62,7 +63,7 @@ class CoreClass { const { answer } = ctxMessage return Promise.all([ this.providerClass.sendMessage(numberOrId, answer), - this.databaseClass.save(ctxMessage), + this.databaseClass.save({ ...ctxMessage, from: numberOrId }), ]) } diff --git a/packages/bot/io/methods/index.js b/packages/bot/io/methods/index.js index 8d53bf1..1fd497f 100644 --- a/packages/bot/io/methods/index.js +++ b/packages/bot/io/methods/index.js @@ -1,5 +1,6 @@ const { addAnswer } = require('./addAnswer') const { addKeyword } = require('./addKeyword') +const { validateCtx } = require('./validateCtx') const { toJson } = require('./toJson') -module.exports = { addAnswer, addKeyword, toJson } +module.exports = { addAnswer, addKeyword, validateCtx, toJson } diff --git a/packages/bot/io/methods/validateCtx.js b/packages/bot/io/methods/validateCtx.js new file mode 100644 index 0000000..5bc4670 --- /dev/null +++ b/packages/bot/io/methods/validateCtx.js @@ -0,0 +1,18 @@ +const { generateRef } = require('../../utils/hash') +/** + * + * @param answer string + * @param options {media:string, buttons:[], capture:true default false} + * @returns + */ +const validateCtx = ({ body, from }) => { + return { + ref: generateRef(), + keyword: null, + answer: body, + options: {}, + from, + } +} + +module.exports = { validateCtx } diff --git a/packages/database/mongo/index.js b/packages/database/mongo/index.js index cc97cac..21b7cf1 100644 --- a/packages/database/mongo/index.js +++ b/packages/database/mongo/index.js @@ -9,7 +9,6 @@ class MongoAdapter { listHistory = [] constructor() { - console.log({ DB_URI }) this.init().then() } @@ -17,7 +16,7 @@ class MongoAdapter { try { const client = new MongoClient(DB_URI, {}) await client.connect() - console.log('Connected successfully to server') + console.log('🆗 Conexión Correcta DB') const db = client.db(DB_NAME) this.db = db return true @@ -27,6 +26,16 @@ class MongoAdapter { } } + getPrevByNumber = async (from) => { + const result = await this.db + .collection('history') + .find({ from }) + .sort({ _id: -1 }) + .limit(1) + .toArray() + return result[0] + } + save = async (ctx) => { await this.db.collection('history').insert(ctx) console.log('Guardando DB...', ctx) diff --git a/packages/provider/web-whatsapp/index.js b/packages/provider/web-whatsapp/index.js index 1e3f4a3..293311e 100644 --- a/packages/provider/web-whatsapp/index.js +++ b/packages/provider/web-whatsapp/index.js @@ -2,13 +2,12 @@ const { Client, LocalAuth } = require('whatsapp-web.js') const { ProviderClass } = require('@bot-whatsapp/bot') const { Console } = require('console') const { createWriteStream } = require('fs') +const { cleanNumber, generateImage, isValidNumber } = require('./utils') const logger = new Console({ stdout: createWriteStream('./log'), }) -const { cleanNumber, generateImage, isValidNumber } = require('./utils') - class WebWhatsappProvider extends ProviderClass { vendor constructor() { @@ -75,7 +74,7 @@ class WebWhatsappProvider extends ProviderClass { if (!isValidNumber(payload.from)) { return } - + payload.from = cleanNumber(payload.from, true) this.emit('message', payload) }, }, diff --git a/packages/provider/web-whatsapp/utils.js b/packages/provider/web-whatsapp/utils.js index 0f307a5..aec861c 100644 --- a/packages/provider/web-whatsapp/utils.js +++ b/packages/provider/web-whatsapp/utils.js @@ -1,9 +1,9 @@ const { createWriteStream } = require('fs') const qr = require('qr-image') -const cleanNumber = (number) => { +const cleanNumber = (number, full = false) => { number = number.replace('@c.us', '') - number = `${number}@c.us` + number = !full ? `${number}@c.us` : `${number}` return number }