diff --git a/.gitignore b/.gitignore index 8d37436..c264642 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /node_modules +/packages/*/node_modules session.json chats/* !chats/.gitkeep diff --git a/packages/COMMON_MISTAKE.md b/packages/COMMON_MISTAKE.md new file mode 100644 index 0000000..77d9ee2 --- /dev/null +++ b/packages/COMMON_MISTAKE.md @@ -0,0 +1,9 @@ +``` + throw new Error('Evaluation failed: ' + helper_js_1.helper.getExceptionMessage(exceptionDetails)); +``` + +Problema sucede cuando usas la misma sesion luego de reiniciar el bot más de 3 veces lo mejor es seguir los pasos + +- Eliminar **.wwebjs_auth** +- Eliminar **node_modules** +- **yarn** diff --git a/packages/cli/node_modules/.bin/cross-env b/packages/cli/node_modules/.bin/cross-env deleted file mode 100644 index 2dfe676..0000000 --- a/packages/cli/node_modules/.bin/cross-env +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../../node_modules/cross-env/src/bin/cross-env.js" "$@" - ret=$? -else - node "$basedir/../../../../node_modules/cross-env/src/bin/cross-env.js" "$@" - ret=$? -fi -exit $ret diff --git a/packages/cli/node_modules/.bin/cross-env-shell b/packages/cli/node_modules/.bin/cross-env-shell deleted file mode 100644 index 43d4fc7..0000000 --- a/packages/cli/node_modules/.bin/cross-env-shell +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - "$basedir/node" "$basedir/../../../../node_modules/cross-env/src/bin/cross-env-shell.js" "$@" - ret=$? -else - node "$basedir/../../../../node_modules/cross-env/src/bin/cross-env-shell.js" "$@" - ret=$? -fi -exit $ret diff --git a/packages/cli/node_modules/.bin/cross-env-shell.cmd b/packages/cli/node_modules/.bin/cross-env-shell.cmd deleted file mode 100644 index 02eab1a..0000000 --- a/packages/cli/node_modules/.bin/cross-env-shell.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\..\node_modules\cross-env\src\bin\cross-env-shell.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\..\node_modules\cross-env\src\bin\cross-env-shell.js" %* -) \ No newline at end of file diff --git a/packages/cli/node_modules/.bin/cross-env.cmd b/packages/cli/node_modules/.bin/cross-env.cmd deleted file mode 100644 index df3e019..0000000 --- a/packages/cli/node_modules/.bin/cross-env.cmd +++ /dev/null @@ -1,7 +0,0 @@ -@IF EXIST "%~dp0\node.exe" ( - "%~dp0\node.exe" "%~dp0\..\..\..\..\node_modules\cross-env\src\bin\cross-env.js" %* -) ELSE ( - @SETLOCAL - @SET PATHEXT=%PATHEXT:;.JS;=;% - node "%~dp0\..\..\..\..\node_modules\cross-env\src\bin\cross-env.js" %* -) \ No newline at end of file diff --git a/packages/core/LIST_EVENTS.md b/packages/core/LIST_EVENTS.md new file mode 100644 index 0000000..7a25d0f --- /dev/null +++ b/packages/core/LIST_EVENTS.md @@ -0,0 +1,32 @@ +- **require_action**: Indica que accion se necesita por parte del usuario y debe contener `instructions` obligatorio + +```json +{ + "instructions": `Debes escanear el QR Code para iniciar session reivsa qr.svg`, + ... otros argumentos +} +``` + +- **ready**: Indica que todo los procesos para usar el provider han pasado correctamente. Ejemplo validacion de token credenciales etc + +retorna: `true` + +- **auth_failure**: Indica que un problema ocurrio en el inicio del provider `instructions` obligatorio + +```json +{ + "instructions": `Debes escanear el QR Code para iniciar session reivsa qr.svg`, + ... otros argumentos +} +``` + +- **message**: Indica que mensaje a entrado se debe contemplar la siguiente estructura + +```json +{ + "from": 'Numero de telefono o id que identifique al usuario', + "body": 'Mensaje en string que esta entrando', + "hasMedia": 'boolean true o false indicando is tiene un archivo multimedia', + ... otros argumentos +} +``` diff --git a/packages/core/classes/bot.class.js b/packages/core/classes/bot.class.js index 1614d8a..bf0882b 100644 --- a/packages/core/classes/bot.class.js +++ b/packages/core/classes/bot.class.js @@ -1,3 +1,5 @@ +const { printer } = require('../utils/interactive') + /** * [ ] Escuchar eventos del provider asegurarte que los provider emitan eventos * [ ] Guardar historial en db @@ -13,32 +15,45 @@ class BotClass { this.databaseClass = _database this.providerClass = _provider - this.providerClass.on('require_action', (a) => console.log('here??', a)) - this.providerClass.on('ready', (a) => console.log('ready??', a)) - this.providerClass.on('auth_failure', (a) => - console.log('auth_failure??', a) - ) - this.providerClass.on('authenticated', (a) => - console.log('authenticated??', a) - ) + for (const { event, func } of this.listenerBusEvents()) { + this.providerClass.on(event, func) + } + this.providerClass.on('message', (message) => console.log('message?', message) ) } + listenerBusEvents = () => [ + { + event: 'require_action', + func: ({ instructions }) => + printer(instructions, '⚡⚡ ACCION REQUERIDA ⚡⚡'), + }, + { + event: 'ready', + func: () => printer('Provider conectado y listo'), + }, + { + event: 'auth_failure', + func: ({ instructions }) => + printer(instructions, '⚡⚡ ERROR AUTH ⚡⚡'), + }, + + { + event: 'message', + func: (msg) => this.handleMsg(msg), + }, + ] + /** * @private * @param {*} ctxMessage */ - handleOnMessage = (ctxMessage) => { - this.databaseClass.saveLog(ctxMessage) - this.continue(ctxMessage) - } - - handleEvents = (eventName) => { - if (eventName === 'message') return - if (eventName === 'auth_success') return - if (eventName === 'auth_error') return + handleMsg = ({ body }) => { + this.databaseClass.saveLog(body) + const a = this.flowClass.find(body) + console.log(a) } /** diff --git a/packages/core/package.json b/packages/core/package.json index 997cf69..d07219c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -17,5 +17,7 @@ "keywords": [], "author": "", "license": "ISC", - "devDependencies": {} + "devDependencies": { + "kleur": "^4.1.5" + } } diff --git a/packages/core/utils/interactive.js b/packages/core/utils/interactive.js new file mode 100644 index 0000000..d626025 --- /dev/null +++ b/packages/core/utils/interactive.js @@ -0,0 +1,10 @@ +const { yellow, red, bgRed } = require('kleur') + +const printer = (message, title) => { + console.clear() + if (title) console.log(bgRed(`${title}`)) + console.log(yellow(Array.isArray(message) ? message.join('\n') : message)) + console.log(``) +} + +module.exports = { printer } diff --git a/packages/database/adapters/mock.js b/packages/database/adapters/mock.js index b3f0f6a..5400ed3 100644 --- a/packages/database/adapters/mock.js +++ b/packages/database/adapters/mock.js @@ -4,6 +4,7 @@ class MockDatabase { constructor() {} save = (ctx) => { + console.log('Guardando DB...', ctx) this.listHistory.push(ctx) } } diff --git a/packages/provider/adapters/web-whatsapp/index.js b/packages/provider/adapters/web-whatsapp/index.js index 34142ad..3f9ab5c 100644 --- a/packages/provider/adapters/web-whatsapp/index.js +++ b/packages/provider/adapters/web-whatsapp/index.js @@ -30,7 +30,11 @@ class WebWhatsappProvider extends ProviderClass { event: 'qr', func: (qr) => { this.emit('require_action', { - instructions: `Debes escanear el QR Code para iniciar session reivsa qr.svg`, + instructions: [ + `Debes escanear el QR Code para iniciar session reivsa qr.svg`, + `Recuerda que el QR se actualiza cada minuto `, + `Necesitas ayuda: https://link.codigoencasa.com/DISCORD`, + ], }) generateImage(qr) }, diff --git a/packages/provider/adapters/web-whatsapp/utils.js b/packages/provider/adapters/web-whatsapp/utils.js index 2a62b96..7cdc020 100644 --- a/packages/provider/adapters/web-whatsapp/utils.js +++ b/packages/provider/adapters/web-whatsapp/utils.js @@ -10,8 +10,6 @@ const cleanNumber = (number) => { const generateImage = (base64) => { let qr_svg = qr.image(base64, { type: 'svg', margin: 4 }) qr_svg.pipe(createWriteStream(`${process.cwd()}/qr.svg`)) - console.log(`⚡ Recuerda que el QR se actualiza cada minuto ⚡'`) - console.log(`⚡ Actualiza F5 el navegador para mantener el mejor QR⚡`) } module.exports = { cleanNumber, generateImage }