diff --git a/package-lock.json b/package-lock.json index 0d03297..4344f16 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1161,6 +1161,15 @@ "integrity": "sha512-/f6gpQuxDaqXu+1kwQYSckUglPaOrHdbIlBAu0YuW8/Cdb45XwXYNUBXg3r/9Mo6n540Kn/smKcZWko5x99KrQ==", "dev": true }, + "cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, "cross-fetch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", diff --git a/package.json b/package.json index 8f182a5..5fd4058 100644 --- a/package.json +++ b/package.json @@ -54,16 +54,17 @@ }, "devDependencies": { "@rollup/plugin-commonjs": "^23.0.2", + "cross-env": "^7.0.3", + "cross-spawn": "^7.0.3", + "detect-package-manager": "^2.0.1", "eslint": "^8.26.0", "eslint-config-prettier": "^8.5.0", + "kleur": "^4.1.5", "pm2": "^5.2.0", "prettier": "^2.7.1", - "rollup": "^3.2.3", - "cross-spawn": "^7.0.3", - "kleur": "^4.1.5", "prompts": "^2.4.2", "rimraf": "^3.0.2", - "detect-package-manager": "^2.0.1" + "rollup": "^3.2.3" }, "engines": { "node": "16.x" diff --git a/packages/cli/package.json b/packages/cli/package.json index cee6606..6c1cb19 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -3,9 +3,9 @@ "version": "0.0.1", "description": "", "main": "index.js", - "private":true, + "private": true, "scripts": { - "cli:dev": "NODE_ENV=dev node ./index.js", + "cli:dev": "cross-env NODE_ENV=dev node ./index.js", "cli:rollup": "rollup index.js --config ./rollup-cli.config.js", "format:check": "prettier --check .", "format:write": "prettier --write .", diff --git a/packages/io/TODO.md b/packages/io/TODO.md index 04567d1..3c8e433 100644 --- a/packages/io/TODO.md +++ b/packages/io/TODO.md @@ -1,15 +1,16 @@ # @bot-whatsapp/io - ### Caso de uso + > Una persona escribe `hola` -__addKeyword__ recibe `string | string[]` +**addKeyword** recibe `string | string[]` + > `sensitivy` false _default_ -- [] addKeyword -- [] addAnswer -- [] Si ha contactado previamente. Seguir continuida +- [ ] addKeyword +- [ ] addAnswer +- [ ] Si ha contactado previamente. Seguir continuida ```js // bootstrap.js Como iniciar el provider @@ -41,55 +42,57 @@ const bootstrap = async () => { // flow.js Como agregar keywords y respuestas const { inout, provider, database } = require('@bot-whatsapp') -await inout.addKeyword('hola') -.addAnswer('Bienvenido a tu tienda 🥲') -.addAnswer('escribe *catalogo* o *ofertas*') - -await inout.addKeyword(['catalogo','ofertas']) -.addAnswer('Este es nuestro CATALOGO mas reciente!',{buttons:[ - {"body":"Xiaomi"}, - {"body":"Samsung"} -]}) - -await inout.addKeyword('Xiaomi') -.addAnswer('Estos son nuestro productos XIAOMI ....',{media:'https://....'}) -.addAnswer('Si quieres mas info escrbie *info*') - +await inout + .addKeyword('hola') + .addAnswer('Bienvenido a tu tienda 🥲') + .addAnswer('escribe *catalogo* o *ofertas*') await inout -.addKeyword('chao!') -.addAnswer('bye!') -.addAnswer('Recuerda que tengo esta promo',{ - media:'https://media2.giphy.com/media/VQJu0IeULuAmCwf5SL/giphy.gif', -}) + .addKeyword(['catalogo', 'ofertas']) + .addAnswer('Este es nuestro CATALOGO mas reciente!', { + buttons: [{ body: 'Xiaomi' }, { body: 'Samsung' }], + }) -await inout.addKeyword('Modelo C',{sensitivy:false}) -.addAnswer('100USD', {media:'http//:...'}) +await inout + .addKeyword('Xiaomi') + .addAnswer('Estos son nuestro productos XIAOMI ....', { + media: 'https://....', + }) + .addAnswer('Si quieres mas info escrbie *info*') -await inout.addKeyword('hola!',{sensitivy:false}) -.addAnswer('Bievenido Escribe *productos*') +await inout + .addKeyword('chao!') + .addAnswer('bye!') + .addAnswer('Recuerda que tengo esta promo', { + media: 'https://media2.giphy.com/media/VQJu0IeULuAmCwf5SL/giphy.gif', + }) -await inout.addKeyword('productos',{sensitivy:false}) -.addAnswer('Esto son los mas vendidos') -.addAnswer('*PC1* Precio 10USD',{media:'https://....'}) -.addAnswer('*PC2* Precio 10USD',{media:'https://....'}) +await inout + .addKeyword('Modelo C', { sensitivy: false }) + .addAnswer('100USD', { media: 'http//:...' }) -await inout.addKeyword('PC1',{sensitivy:false}) -.addAnswer('Bievenido Escribe *productos*') +await inout + .addKeyword('hola!', { sensitivy: false }) + .addAnswer('Bievenido Escribe *productos*') +await inout + .addKeyword('productos', { sensitivy: false }) + .addAnswer('Esto son los mas vendidos') + .addAnswer('*PC1* Precio 10USD', { media: 'https://....' }) + .addAnswer('*PC2* Precio 10USD', { media: 'https://....' }) +await inout + .addKeyword('PC1', { sensitivy: false }) + .addAnswer('Bievenido Escribe *productos*') const answerOne = await inout.addAnswer({ - message:'Como estas!', - media:'https://media2.giphy.com/media/VQJu0IeULuAmCwf5SL/giphy.gif', + message: 'Como estas!', + media: 'https://media2.giphy.com/media/VQJu0IeULuAmCwf5SL/giphy.gif', }) - const otherAnswer = await inout.addAnswer('Aprovecho para decirte!') answerOne.push(otherAnswer) - -inout.addKeywords(['hola','hi','ola']) - +inout.addKeywords(['hola', 'hi', 'ola']) ``` diff --git a/packages/io/index.js b/packages/io/index.js index e69de29..fcf8510 100644 --- a/packages/io/index.js +++ b/packages/io/index.js @@ -0,0 +1,32 @@ +const { addKeyword, addAnswer } = require('./methods') + +const test = async () => { + const cxtA = addKeyword('hola') + console.log({ cxtA: cxtA.ctx.keyword, ref: cxtA.ref }) + const cxtB = addAnswer(cxtA)('b') + console.log({ cxtB: cxtB.ctx.message, ref: cxtB.ref }) + const cxtC = addAnswer(cxtB)('c') + console.log({ cxtC: cxtC.ctx.keyword, ref: cxtC.ref }) +} + +const test1 = async () => { + const cxtAB = addKeyword('hola').addAnswer('b').addAnswer('c') + + console.log({ + keyword: cxtAB.ctx.keyword, + anwser: cxtAB.ctx.message, + }) +} + +const test2 = async () => { + const cxtABB = addKeyword('hola') + .addAnswer('Bienvenido a tu tienda 🥲') + .addAnswer('escribe *catalogo* o *ofertas*') + + console.log({ + pregunta: cxtABB.ctx.keyword, + ultimasrespuesta: cxtABB.ctx.message, + }) +} + +test2().then() diff --git a/packages/io/keyword/addKeyword.js b/packages/io/keyword/addKeyword.js deleted file mode 100644 index dc45e81..0000000 --- a/packages/io/keyword/addKeyword.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * - * @param {*} message `string | string[]` - * @param {*} options {sensitivy:boolean} defaulta false - */ -const addKeyword = (message, options) => { - if (typeof message === 'string') return 1 - return 0 -} - -module.exports = { addKeyword } -// await inout.addKeyword('hola') -// .addAnswer('Bienvenido a tu tienda 🥲') -// .addAnswer('escribe *catalogo* o *ofertas*') - -// await inout.addKeyword(['catalogo','ofertas']) \ No newline at end of file diff --git a/packages/io/keyword/index.js b/packages/io/keyword/index.js deleted file mode 100644 index e69de29..0000000 diff --git a/packages/io/methods/addAnswer.js b/packages/io/methods/addAnswer.js new file mode 100644 index 0000000..b9a0bf5 --- /dev/null +++ b/packages/io/methods/addAnswer.js @@ -0,0 +1,28 @@ +const { generateRef } = require('../utils') + +const addAnswer = (inCtx) => (message, options) => { + const lastCtx = inCtx.hasOwnProperty('ctx') ? inCtx.ctx : inCtx + const ctxAnswer = () => { + const ref = generateRef() + /** + * Se guarda en db + */ + + return { ...lastCtx, ref, message } + } + + const ctx = ctxAnswer() + + return { + ctx, + ref: ctx.ref, + addAnswer: addAnswer(ctx), + } +} + +module.exports = { addAnswer } + +// await inout +// .addKeyword('hola') +// .addAnswer('Bienvenido a tu tienda 🥲') +// .addAnswer('escribe *catalogo* o *ofertas*') diff --git a/packages/io/methods/addKeyword.js b/packages/io/methods/addKeyword.js new file mode 100644 index 0000000..2102b04 --- /dev/null +++ b/packages/io/methods/addKeyword.js @@ -0,0 +1,32 @@ +const { generateRef } = require('../utils') +const { addAnswer } = require('./addAnswer') +/** + * addKeyword: + * Es necesario que genere id|hash + */ + +/** + * + * @param {*} message `string | string[]` + * @param {*} options {sensitivy:boolean} defaulta false + */ +const addKeyword = (message, options) => { + const ctxAddKeyword = () => { + const ref = generateRef() + /** + * Se guarda en db + */ + + return { ref, keyword: message } + } + + const ctx = ctxAddKeyword() + + return { + ctx, + ref: ctx.ref, + addAnswer: addAnswer(ctx), + } +} + +module.exports = { addKeyword } diff --git a/packages/io/methods/index.js b/packages/io/methods/index.js new file mode 100644 index 0000000..278fbcc --- /dev/null +++ b/packages/io/methods/index.js @@ -0,0 +1,4 @@ +const { addAnswer } = require('./addAnswer') +const { addKeyword } = require('./addKeyword') + +module.exports = { addAnswer, addKeyword } diff --git a/packages/io/package.json b/packages/io/package.json index aec99b4..bacdfbd 100644 --- a/packages/io/package.json +++ b/packages/io/package.json @@ -5,7 +5,7 @@ "main": "index.js", "private": true, "scripts": { - "io:dev": "NODE_ENV=dev node ./index.js", + "io:dev": "node ./index.js", "io:rollup": "rollup index.js --config ./rollup-cli.config.js", "format:check": "prettier --check .", "format:write": "prettier --write .", @@ -16,7 +16,5 @@ "keywords": [], "author": "", "license": "ISC", - "devDependencies": { - - } -} \ No newline at end of file + "devDependencies": {} +} diff --git a/packages/io/utils/hash.js b/packages/io/utils/hash.js new file mode 100644 index 0000000..a84fc83 --- /dev/null +++ b/packages/io/utils/hash.js @@ -0,0 +1,7 @@ +const crypto = require('crypto') + +const generateRef = () => { + return crypto.randomUUID() +} + +module.exports = { generateRef } diff --git a/packages/io/utils/index.js b/packages/io/utils/index.js new file mode 100644 index 0000000..1461cef --- /dev/null +++ b/packages/io/utils/index.js @@ -0,0 +1,3 @@ +const { generateRef } = require('./hash') + +module.exports = { generateRef }