fix(cli): 🔥 create script - templates

This commit is contained in:
Leifer Mendez
2022-12-10 21:17:29 +01:00
parent 1036273a28
commit eebc3c9806
29 changed files with 417 additions and 61 deletions

View File

@@ -72,9 +72,6 @@ jobs:
- name: Release @bot-whatsapp/create-bot-whatsapp - name: Release @bot-whatsapp/create-bot-whatsapp
run: yarn node ./scripts/release.js --name=create-bot-whatsapp --version= --token="${{ secrets.NPM_TOKEN }}" run: yarn node ./scripts/release.js --name=create-bot-whatsapp --version= --token="${{ secrets.NPM_TOKEN }}"
- name: Release @bot-whatsapp/create-bot-whatsapp
run: yarn node ./scripts/release.js --name=create-bot-whatsapp --version= --token="${{ secrets.NPM_TOKEN }}"
- name: Release @bot-whatsapp/database - name: Release @bot-whatsapp/database
run: yarn node ./scripts/release.js --name=database --version= --token="${{ secrets.NPM_TOKEN }}" run: yarn node ./scripts/release.js --name=database --version= --token="${{ secrets.NPM_TOKEN }}"

3
.gitignore vendored
View File

@@ -1,4 +1,5 @@
/node_modules /node_modules
/packages/create-bot-whatsapp/starters
/packages/*/node_modules /packages/*/node_modules
/packages/*/dist /packages/*/dist
/packages/*/docs/dist /packages/*/docs/dist
@@ -28,6 +29,8 @@ tmp/
!.yarn/plugins/@yarnpkg/plugin-postinstall.cjs !.yarn/plugins/@yarnpkg/plugin-postinstall.cjs
.fleet/ .fleet/
example-app*/ example-app*/
base-*/
!starters/apps/base-*/
qr.svg qr.svg
package-lock.json package-lock.json
yarn-error.log yarn-error.log

View File

@@ -12,9 +12,13 @@ const copyFiles = async (from, to) => {
} }
} }
const copyBaseApp = async () => { /**
const BASEP_APP_PATH_FROM = `${process.cwd()}/starters/apps/base` * Copiar directorio con archivos
const BASEP_APP_PATH_TO = `${process.cwd()}/example-app-base` * @param {*} templateName
*/
const copyBaseApp = async (templateName = null) => {
const BASEP_APP_PATH_FROM = `${process.cwd()}/starters/apps/${templateName}`
const BASEP_APP_PATH_TO = `${process.cwd()}/${templateName}`
await copyFiles(BASEP_APP_PATH_FROM, BASEP_APP_PATH_TO) await copyFiles(BASEP_APP_PATH_FROM, BASEP_APP_PATH_TO)
} }

View File

@@ -10,29 +10,18 @@ const startInteractive = async () => {
const questions = [ const questions = [
{ {
type: 'text', type: 'text',
name: 'exampeOpt', name: 'outDir',
message: message: 'Quieres crear un bot? (Y/n)',
'Quieres crear una app de ejemplo "example-app-example"? (Y/n)',
},
// {
// type: 'text',
// name: 'dependencies',
// message:
// 'Quieres actualizar las librerias "whatsapp-web.js"? (Y/n)',
// },
{
type: 'text',
name: 'cleanTmp',
message: 'Quieres limpiar la session del bot? (Y/n)',
}, },
{ {
type: 'multiselect', type: 'multiselect',
name: 'providerWs', name: 'providerWs',
message: 'Proveedor de Whatsapp', message: 'Proveedor de Whatsapp',
choices: [ choices: [
{ title: 'whatsapp-web.js', value: 'whatsapp-web.js' }, { title: 'whatsapp-web.js (gratis)', value: 'wweb' },
{ title: 'Twilio', value: 'twilio' },
{ title: 'Baileys (gratis)', value: 'bailey', disabled: true },
{ title: 'API Oficial (Meta)', value: 'meta', disabled: true }, { title: 'API Oficial (Meta)', value: 'meta', disabled: true },
{ title: 'Twilio', value: 'twilio', disabled: true },
], ],
max: 1, max: 1,
hint: 'Espacio para selecionar', hint: 'Espacio para selecionar',
@@ -43,9 +32,10 @@ const startInteractive = async () => {
name: 'providerDb', name: 'providerDb',
message: 'Cual base de datos quieres usar', message: 'Cual base de datos quieres usar',
choices: [ choices: [
{ title: 'JSONFile', value: 'json' }, { title: 'Memory', value: 'memory' },
{ title: 'MySQL', value: 'mysql', disabled: true }, { title: 'Mongo', value: 'mongo' },
{ title: 'Mongo', value: 'mongo', disabled: true }, { title: 'MySQL', value: 'mysql' },
{ title: 'Json', value: 'json', disabled: true },
], ],
max: 1, max: 1,
hint: 'Espacio para selecionar', hint: 'Espacio para selecionar',
@@ -64,11 +54,12 @@ const startInteractive = async () => {
const { const {
dependencies = '', dependencies = '',
cleanTmp = '', cleanTmp = '',
exampeOpt = '', outDir = '',
providerDb = [], providerDb = [],
providerWs = [], providerWs = [],
} = response } = response
/** /**
* @deprecated
* Question * Question
* @returns * @returns
*/ */
@@ -83,6 +74,7 @@ const startInteractive = async () => {
} }
/** /**
* @deprecated
* Question * Question
* @returns * @returns
*/ */
@@ -96,17 +88,28 @@ const startInteractive = async () => {
} }
} }
const createApp = async () => { /**
const answer = exampeOpt.toLowerCase() || 'n' * Crear una app (copiar plantilla)
* @returns
*/
const createApp = async (templateName = null) => {
if (!templateName)
throw new Error('TEMPLATE_NAME_INVALID: ', templateName)
const answer = outDir.toLowerCase() || 'n'
if (answer.includes('n')) return true if (answer.includes('n')) return true
if (answer.includes('y')) { if (answer.includes('y')) {
await copyBaseApp() await copyBaseApp(templateName)
return true return outDir
} }
} }
/**
* Selccionar Provider (meta, twilio, etc...)
* @returns
*/
const vendorProvider = async () => { const vendorProvider = async () => {
const [answer] = providerWs
if (!providerWs.length) { if (!providerWs.length) {
console.log( console.log(
red( red(
@@ -116,11 +119,15 @@ const startInteractive = async () => {
process.exit(1) process.exit(1)
} }
console.log(yellow(`'Deberia crer una carpeta en root/provider'`)) console.log(yellow(`'Deberia crer una carpeta en root/provider'`))
return true return answer
} }
/**
* Selecionar adaptador de base de datos
* @returns
*/
const dbProvider = async () => { const dbProvider = async () => {
const answer = providerDb const [answer] = providerDb
if (!providerDb.length) { if (!providerDb.length) {
console.log( console.log(
red( red(
@@ -129,18 +136,13 @@ const startInteractive = async () => {
) )
process.exit(1) process.exit(1)
} }
if (answer === 'json') { return answer
console.log('Deberia crer una carpeta en root/data')
return 1
}
} }
await createApp() const providerAdapter = await vendorProvider()
await installOrUdpateDep() const dbAdapter = await dbProvider()
await cleanAllSession() const NAME_DIR = ['base', providerAdapter, dbAdapter].join('-')
await vendorProvider() await createApp(NAME_DIR)
await dbProvider()
await jsonConfig()
} }
module.exports = { startInteractive } module.exports = { startInteractive }

View File

@@ -1,6 +1,6 @@
{ {
"name": "@bot-whatsapp/cli", "name": "@bot-whatsapp/cli",
"version": "0.0.2-alpha.0", "version": "0.0.4-alpha.0",
"description": "", "description": "",
"main": "index.js", "main": "index.js",
"devDependencies": { "devDependencies": {

View File

@@ -1,3 +1,3 @@
#!/usr/bin/env node #!/usr/bin/env node
const main = require('../lib/bin/bundle.create.cjs') const main = require('../lib/bundle.create-bot-whatsapp.cjs')
main() main()

View File

@@ -1,12 +1,10 @@
const { startInteractive } = require('@bot-whatsapp/cli')
/** /**
* Main function * Voy a llamar directo a CLI
* Temporalmente luego mejoro esta
* parte
* @returns
*/ */
const main = () => { const main = () => startInteractive()
console.clear()
console.log(``)
console.log(`[PostInstall]: Este es el main function.`)
console.log(`[PostInstall]: 👌 Aqui podrias instalar cosas`)
console.log(``)
}
module.exports = main module.exports = main

View File

@@ -1,12 +1,15 @@
{ {
"name": "create-bot-whatsapp", "name": "create-bot-whatsapp",
"version": "0.0.9-alpha.0", "version": "0.0.13-alpha.0",
"description": "", "description": "",
"main": "./lib/bin/bundle.create.cjs", "main": "./lib/bundle.create-bot-whatsapp.cjs",
"files": [
"./starters/",
"./bin/create.js",
"./lib/bundle.create-bot-whatsapp.cjs"
],
"bin": "./bin/create.js",
"dependencies": { "dependencies": {
"@bot-whatsapp/cli": "*" "@bot-whatsapp/cli": "*"
},
"bin": {
"bot": "./lib/bin/bundle.create.cjs"
} }
} }

View File

@@ -1,9 +1,10 @@
const banner = require('../../config/banner.rollup.json') const banner = require('../../config/banner.rollup.json')
const commonjs = require('@rollup/plugin-commonjs') const commonjs = require('@rollup/plugin-commonjs')
const copy = require('rollup-plugin-copy')
const { nodeResolve } = require('@rollup/plugin-node-resolve') const { nodeResolve } = require('@rollup/plugin-node-resolve')
const { join } = require('path') const { join } = require('path')
const PATH = join(__dirname, 'lib', 'bin', 'bundle.create.cjs') const PATH = join(__dirname, 'lib', 'bundle.create-bot-whatsapp.cjs')
module.exports = { module.exports = {
input: join(__dirname, 'index.js'), input: join(__dirname, 'index.js'),
@@ -12,5 +13,11 @@ module.exports = {
file: PATH, file: PATH,
format: 'cjs', format: 'cjs',
}, },
plugins: [commonjs(), nodeResolve()], plugins: [
copy({
targets: [{ src: 'starters/*', dest: join(__dirname, 'starters') }],
}),
commonjs(),
nodeResolve(),
],
} }

View File

@@ -1,11 +1,14 @@
{ {
"name": "@bot-whatsapp/database", "name": "@bot-whatsapp/database",
"version": "0.0.2-alpha.0", "version": "0.0.4-alpha.0",
"description": "Esto es el conector a mysql, pg, mongo", "description": "Esto es el conector a mysql, pg, mongo",
"main": "./lib/mock/index.cjs", "main": "./lib/mock/index.cjs",
"keywords": [], "keywords": [],
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"files": [
"./lib/"
],
"dependencies": { "dependencies": {
"dotenv": "^16.0.3", "dotenv": "^16.0.3",
"mongodb": "^4.11.0", "mongodb": "^4.11.0",

View File

@@ -1,11 +1,14 @@
{ {
"name": "@bot-whatsapp/provider", "name": "@bot-whatsapp/provider",
"version": "0.0.7-alpha.0", "version": "0.0.10-alpha.0",
"description": "Esto es el conector a Twilio, Meta, etc...", "description": "Esto es el conector a Twilio, Meta, etc...",
"main": "./lib/mock/index.cjs", "main": "./lib/mock/index.cjs",
"keywords": [], "keywords": [],
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"files": [
"./lib/"
],
"dependencies": { "dependencies": {
"@bot-whatsapp/bot": "*", "@bot-whatsapp/bot": "*",
"qr-image": "^3.2.0" "qr-image": "^3.2.0"

View File

@@ -0,0 +1,12 @@
### BASE APP
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
- Bienvenido a mi tienda
- Como puedo ayudarte?
- Tengo: Zapatos Bolsos etc..
------
- [Discord](https://link.codigoencasa.com/DISCORD)
- [Twitter](https://twitter.com/leifermendez)
- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
- [Telegram](https://t.me/leifermendez)

View File

@@ -0,0 +1,28 @@
const {
createBot,
createProvider,
createFlow,
addKeyword,
} = require('@bot-whatsapp/bot')
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
const MockAdapter = require('@bot-whatsapp/database/mock')
const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
.addAnswer('Bienvenido a mi tienda')
.addAnswer('Como puedo ayudarte?')
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider)
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}
main()

View File

@@ -0,0 +1,16 @@
{
"name": "bot-whatsapp-base",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"pre-copy": "cd .. && yarn run copy.lib example-app-base",
"start": "node app.js"
},
"keywords": [],
"dependencies": {
"whatsapp-web.js": "^1.18.3"
},
"author": "",
"license": "ISC"
}

View File

@@ -0,0 +1,12 @@
### BASE APP
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
- Bienvenido a mi tienda
- Como puedo ayudarte?
- Tengo: Zapatos Bolsos etc..
------
- [Discord](https://link.codigoencasa.com/DISCORD)
- [Twitter](https://twitter.com/leifermendez)
- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
- [Telegram](https://t.me/leifermendez)

View File

@@ -0,0 +1,28 @@
const {
createBot,
createProvider,
createFlow,
addKeyword,
} = require('@bot-whatsapp/bot')
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
const MockAdapter = require('@bot-whatsapp/database/mock')
const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
.addAnswer('Bienvenido a mi tienda')
.addAnswer('Como puedo ayudarte?')
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider)
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}
main()

View File

@@ -0,0 +1,16 @@
{
"name": "bot-whatsapp-base",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"pre-copy": "cd .. && yarn run copy.lib example-app-base",
"start": "node app.js"
},
"keywords": [],
"dependencies": {
"whatsapp-web.js": "^1.18.3"
},
"author": "",
"license": "ISC"
}

View File

@@ -0,0 +1,12 @@
### BASE APP
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
- Bienvenido a mi tienda
- Como puedo ayudarte?
- Tengo: Zapatos Bolsos etc..
------
- [Discord](https://link.codigoencasa.com/DISCORD)
- [Twitter](https://twitter.com/leifermendez)
- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
- [Telegram](https://t.me/leifermendez)

View File

@@ -0,0 +1,28 @@
const {
createBot,
createProvider,
createFlow,
addKeyword,
} = require('@bot-whatsapp/bot')
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
const MockAdapter = require('@bot-whatsapp/database/mock')
const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
.addAnswer('Bienvenido a mi tienda')
.addAnswer('Como puedo ayudarte?')
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider)
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}
main()

View File

@@ -0,0 +1,16 @@
{
"name": "bot-whatsapp-base",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"pre-copy": "cd .. && yarn run copy.lib example-app-base",
"start": "node app.js"
},
"keywords": [],
"dependencies": {
"whatsapp-web.js": "^1.18.3"
},
"author": "",
"license": "ISC"
}

View File

@@ -0,0 +1,12 @@
### BASE APP
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
- Bienvenido a mi tienda
- Como puedo ayudarte?
- Tengo: Zapatos Bolsos etc..
------
- [Discord](https://link.codigoencasa.com/DISCORD)
- [Twitter](https://twitter.com/leifermendez)
- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
- [Telegram](https://t.me/leifermendez)

View File

@@ -0,0 +1,28 @@
const {
createBot,
createProvider,
createFlow,
addKeyword,
} = require('@bot-whatsapp/bot')
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
const MockAdapter = require('@bot-whatsapp/database/mock')
const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
.addAnswer('Bienvenido a mi tienda')
.addAnswer('Como puedo ayudarte?')
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider)
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}
main()

View File

@@ -0,0 +1,16 @@
{
"name": "bot-whatsapp-base",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"pre-copy": "cd .. && yarn run copy.lib example-app-base",
"start": "node app.js"
},
"keywords": [],
"dependencies": {
"whatsapp-web.js": "^1.18.3"
},
"author": "",
"license": "ISC"
}

View File

@@ -0,0 +1,12 @@
### BASE APP
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
- Bienvenido a mi tienda
- Como puedo ayudarte?
- Tengo: Zapatos Bolsos etc..
------
- [Discord](https://link.codigoencasa.com/DISCORD)
- [Twitter](https://twitter.com/leifermendez)
- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
- [Telegram](https://t.me/leifermendez)

View File

@@ -0,0 +1,28 @@
const {
createBot,
createProvider,
createFlow,
addKeyword,
} = require('@bot-whatsapp/bot')
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
const MockAdapter = require('@bot-whatsapp/database/mock')
const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
.addAnswer('Bienvenido a mi tienda')
.addAnswer('Como puedo ayudarte?')
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider)
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}
main()

View File

@@ -0,0 +1,16 @@
{
"name": "bot-whatsapp-base",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"pre-copy": "cd .. && yarn run copy.lib example-app-base",
"start": "node app.js"
},
"keywords": [],
"dependencies": {
"whatsapp-web.js": "^1.18.3"
},
"author": "",
"license": "ISC"
}

View File

@@ -0,0 +1,12 @@
### BASE APP
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
- Bienvenido a mi tienda
- Como puedo ayudarte?
- Tengo: Zapatos Bolsos etc..
------
- [Discord](https://link.codigoencasa.com/DISCORD)
- [Twitter](https://twitter.com/leifermendez)
- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
- [Telegram](https://t.me/leifermendez)

View File

@@ -0,0 +1,28 @@
const {
createBot,
createProvider,
createFlow,
addKeyword,
} = require('@bot-whatsapp/bot')
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
const MockAdapter = require('@bot-whatsapp/database/mock')
const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
.addAnswer('Bienvenido a mi tienda')
.addAnswer('Como puedo ayudarte?')
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider)
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}
main()

View File

@@ -0,0 +1,16 @@
{
"name": "bot-whatsapp-base",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"pre-copy": "cd .. && yarn run copy.lib example-app-base",
"start": "node app.js"
},
"keywords": [],
"dependencies": {
"whatsapp-web.js": "^1.18.3"
},
"author": "",
"license": "ISC"
}