-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
162 lines (133 loc) · 8.39 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
const { createBot, createProvider, createFlow, addKeyword, EVENTS } = require('@bot-whatsapp/bot')
const QRPortalWeb = require('@bot-whatsapp/portal')
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
const MockAdapter = require('@bot-whatsapp/database/mock')
const hangmanTemplate = async (errorList) => {
let person = ["O", "|", "/", "\\", "/ '", "\\"];
let gallows = [" ", " ", " ", " ", " ", " "];
for (let i = 0; i < errorList.length; i++) {
gallows[i] = person[i];
}
let template = "*-------*\n";
template += "|| | \n";
template += "|| " + gallows[0] + " \n";
template += "|| " + gallows[1] + " " + gallows[0] + " " + gallows[2] + " \n";
template += "|| " + gallows[4] + " " + gallows[5] + " \n";
template += "|| \n";
template += "||=========\n\n";
return template;
}
let words = ['hola', 'mundo', 'perro', 'gato', 'computadora', 'teclado', 'mouse', 'monitor', 'celular', 'telefono', 'casa', 'carro', 'moto', 'bicicleta', 'avion', 'barco', 'helicoptero', 'avioneta', 'pizza', 'playa', 'playstation', 'pelota', 'bicicleta', 'cine', 'teatro', 'computacion', 'programacion', 'nube', 'sol', 'luna', 'estrella', 'planeta', 'guitarra', 'bateria', 'piano', 'musica', 'baile', 'arte', 'pintura', 'escultura', 'literatura', 'poesia', 'escritura', 'trabajo', 'familia', 'amigos', 'vacaciones', 'aventura', 'historia', 'ciencia', 'naturaleza', 'montaña', 'bosque', 'mar', 'rio', 'desierto', 'jungla', 'medicina', 'enfermedad', 'salud', 'vida', 'muerte', 'amor', 'odio', 'felicidad', 'tristeza', 'esperanza', 'sueño', 'pesadilla', 'fantasia', 'realidad', 'cultura', 'religion', 'filosofia', 'politica', 'economia', 'tecnologia', 'internet', 'redes sociales', 'videojuegos', 'deporte', 'equipo', 'campeonato', 'victoria', 'derrota', 'batalla', 'guerra', 'paz', 'justicia', 'libertad', 'democracia', 'derechos', 'humanos', 'educacion', 'conocimiento', 'creatividad', 'innovacion', 'empatia', 'solidaridad', 'respeto', 'tolerancia', 'humildad', 'generosidad', 'optimismo', 'perseverancia', 'sabiduria', 'curiosidad', 'diversion', 'alegria', 'entretenimiento', 'viaje', 'destino', 'aventura', 'sabor', 'aroma', 'textura', 'color', 'forma', 'sonido', 'silencio', 'emocion', 'sentimiento', 'pensamiento', 'accion', 'reaccion', 'creencia', 'opinion', 'actitud', 'comportamiento', 'habilidad', 'talento', 'virtud', 'defecto', 'error', 'fracaso', 'exito', 'logro', 'proyecto', 'objetivo', 'meta', 'plan', 'estrategia', 'accion', 'reaccion', 'sorpresa', 'adrenalina', 'riesgo', 'seguridad', 'proteccion', 'aprendizaje', 'enseñanza', 'entrenamiento', 'ejercicio', 'practica', 'habito', 'costumbre', 'tradicion', 'moda', 'estilo', 'personalidad', 'caracter', 'comunicacion', 'dialogo', 'conversacion', 'negociacion', 'compromiso', 'responsabilidad', 'dedicacion', 'esfuerzo']
let STATE_APP = []
const flowAhorcado = addKeyword(['Ahorcado']).
addAnswer(
[
'El juego del ahorcado es un juego de adivinanza de palabras en el que un jugador intenta adivinar una palabra seleccionada al azar por otro jugador. El jugador tiene un número limitado de intentos para adivinar la palabra antes de que se complete un dibujo de un hombre ahorcado. Por cada intento incorrecto, se añade una parte más al dibujo. Si el jugador completa el dibujo antes de adivinar la palabra, pierde. Si el jugador adivina la palabra antes de completar el dibujo, gana.\n\n',
'Escriba *jugar* para iniciar el juego'
],
{ capture: true },
async (ctx, { fallBack, flowDynamic, gotoFlow }) => {
if (ctx.body.toLowerCase().trim() === 'jugar') {
let randomIndex = Math.floor(Math.random() * words.length);
let randomWord = words[randomIndex];
let hiddenWord = randomWord.replace(/./g, '➖ ');
STATE_APP[ctx.from].hiddenWord = hiddenWord
STATE_APP[ctx.from].randomWord = randomWord
STATE_APP[ctx.from].attempts = 0
STATE_APP[ctx.from].state = 'playing'
STATE_APP[ctx.from].errorList = []
STATE_APP[ctx.from].successList = []
await flowDynamic([
{ body: `Hola ${ctx.pushName}` },
{ body: `Tu palabra tiene una longitud de ${hiddenWord.length / 2} letras` },
{ body: `Indicio: ${hiddenWord}` },
]);
return;
}
await gotoFlow(flowPrincipal);
},
)
.addAnswer('Digite una letra', { capture: true },
async (ctx, { fallBack, flowDynamic, gotoFlow, endFlow }) => {
let letter = ctx.body.toLowerCase().trim()
if (letter === STATE_APP[ctx.from].randomWord) {
STATE_APP[ctx.from].state = 'not_playing'
await flowDynamic([{ body: `¡Felicidades! Has adivinado la palabra "*${STATE_APP[ctx.from].randomWord}*" en ${STATE_APP[ctx.from].attempts} intentos` }]);
await gotoFlow(flowPrincipal);
return;
}
if (letter.length > 1) {
await flowDynamic([{ body: 'Solo puede digitar una letra' }]);
await fallBack();
return;
}
const regex = /^[a-zA-Z]+$/;
if (!regex.test(letter)) {
await flowDynamic([{ body: 'Solo se permiten letras y no simbolos' }]);
await fallBack();
return;
}
let hiddenWord = STATE_APP[ctx.from]?.hiddenWord ?? '';
let randomWord = STATE_APP[ctx.from]?.randomWord ?? '';
let attempts = STATE_APP[ctx.from]?.attempts ?? 0;
if (STATE_APP[ctx.from].state === 'playing') {
if (randomWord.includes(letter)) {
let newHiddenWord = ''
for (let i = 0; i < randomWord.length; i++) {
if (randomWord[i] === letter) {
newHiddenWord += letter + ' '
STATE_APP[ctx.from].successList.push(letter)
} else {
newHiddenWord += hiddenWord[i * 2] + ' '
}
}
STATE_APP[ctx.from].hiddenWord = newHiddenWord
} else {
STATE_APP[ctx.from].errorList.push(letter)
await flowDynamic([{ body: `La letra *${letter}* no se encuentra` }]);
let menssage = await hangmanTemplate(STATE_APP[ctx.from].errorList)
await flowDynamic([{ body: `${menssage}` }]);
await fallBack();
}
STATE_APP[ctx.from].attempts = attempts + 1
if (!STATE_APP[ctx.from].hiddenWord.includes('➖')) {
STATE_APP[ctx.from].state = 'not_playing'
await flowDynamic([{ body: `¡Felicidades! Has adivinado la palabra "*${randomWord}*" en ${attempts} intentos` }]);
await gotoFlow(flowPrincipal);
return;
} else if (STATE_APP[ctx.from].errorList.length >= 6) {
STATE_APP[ctx.from].state = 'not_playing'
await flowDynamic([{ body: "¡Lo siento! Has perdido el juego" }, { body: `La palabra era: "*${randomWord}*"` }]);
await gotoFlow(flowPrincipal);
return;
} else {
await flowDynamic([{ body: `Indicio: ${STATE_APP[ctx.from].hiddenWord}` }]);
await fallBack();
}
}
})
const flowPrincipal = addKeyword(EVENTS.WELCOME)
.addAnswer([
'🙌 Hola bienvenido a este *Chatbot*',
' 👉 *Ahorcado* Para Jugar.',
'\nEscriba la opción que esta en negrilla para continuar, en caso que no salgan los botones.'
])
.addAnswer(['o selecione la opción'],
{ buttons: [{ body: 'Ahorcado' }], },
(ctx) => {
STATE_APP[ctx.from] = { ...STATE_APP[ctx.from], name: ctx.pushName ?? ctx.from };
},
[flowAhorcado]
)
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(BaileysProvider)
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
QRPortalWeb()
}
main()