Riveri-Bot es un chat-bot de ayuda para difundir información relevante del Municipio Escolar para la I.E "Nicanor Rivera Cáceres" 7050.
- Su desarollo empezó desde
Enero del 2022
- Establecido en la red social
WhatsApp
para mayor alcance de usuarios. - Programado en
Javascript y NodeJS
. - Cuenta con
funcionalidades diversas
y un entorno amigable para el usuario - Tiene gran parte del código base
main.js
documentado para una fácil comprensión.
Recibirás el saludo principal del bot, enviándote una opción para presionar y seguir con las opciones del menú
Comando: Hola, ola
Recibirás el menú interactivo de las Opciones
del bot:
Comando: Opciones
Recibirás el response
donde podrás hacer preguntas y estas se reenvian al lugar pertinente para leerlas.
Comando: Preguntas
Recibirás el response
donde podrás hacer sugerencias que podrán ser leidas por nosotros al ser enviadas a nosotros
Recibirás la presentación de nuestro Municipio Escolar con una imagen referencial.
Comando: ¿Quiénes somos?:
Recibirás el documento
en pdf del Plan Evolutivo del año 2022:
Comando: Plan evolutivo
:
- Es una serie de instrucciones que indicamos a la máquina para realizar en secuencia (Queriendo decir de forma organizada), utilizan una sintaxis referencia del inglés, por lo que encontrarás expresiones en Javascript como:
if = Quiere decir "Si esto ocurre", sacado de la palabra en inglés
Si no se comprende del todo, no hay problema. Continua prestando atencion y lo entenderás completamente > Entonces, tal como si ordenaramos a la computadora que hiciera algo, pasa lo mismo con el lenguaje de programación. Estaremos indicando qué, cómo y cuándo hará una acción. ¿Qué dices, los ponemos a prueba?
- Prueba 01: Queremos sumar dos números, y saber su resultado. ¿Cómo lo haremos?
// ┌─────────────────────────────Declarando el primer valor─────────────────────────────┐
// - Tenemos la primera variable o incognita al que le asignaremos un valor:
let numero1 = 2
// - Es decir, numero1 va a ser igual a 2 unidades.
// └───────────────────────────────────────────────────────────────────────────────────┘
// ┌───────────────────────────Declarando el segundo valor─────────────────────────────┐
// - Tenemos la segunda variable o incognita al que le asignaremos un valor:
let numero2 = 4
// - Es decir, numero2 va a ser igual a 4 unidades.
// └───────────────────────────────────────────────────────────────────────────────────┘
Ahora, si te dijera esta oración: Si x es igual a 2 y z es igual a 4, ¿cuánto suman x + y? La respuesta sería 6
, lo mismo con el código que hicimos arriba:
let numero1 = 2;
let numero2 = 4;
let suma = numero1 + numero2;
// El resultado sería... 6 ya que es numero1(2) + numero2(4) = 6
¡Excelente! Ahora sigamos a Prueba 02: Queremos que la suma de dos números se muestren en la consola donde ejecutamos el código:
// ┌───────────────────────────────────────────────────────────────────────────────────┐
let numero1 = 2;
let numero2 = 4;
let suma = numero1 + numero2;
// └───────────────────────────────────────────────────────────────────────────────────┘
console.log(suma)
// Ahora, ¿Qué mostrará la consola? Veamos:
╔═════════╗
║ Consola
╠═════════╣
║ 6
╚═════════╝
¡Wow, estás avanzando rápido! Pronto bucearás con los tuborones del Javascript, ya te veré.
string
: Es para asignarle texto a nuestra variable como valor.
let miNombre = "Gustavo"
Aún así, ¿Solo sonstrings
aquella variables que tienen texto? No pero ya lo estas comprendiendo. Independientemente que pudiera ser texto, tiene la capacidad de representar un número, veamos:
let miEdad = "17"
Pero... ¿Si son números, los puedo sumar? No, ya que el sistema lo detecta como si fuera una letra, más no un número por ende si lo intentas te dará error.number
: Aquí solo aplicarán cuando a la variable que tengamos le asignemos solo valores numericos. Por ejemplo:
let alturaEnMetros = 1.86
Algo interesante, ¿Cómo puedo unir una variablenumber
con unastring
? ¡Excelente pregunta!
// ┌───────────────────────────────────────────────────────────────────────────────────┐
let miPeso = 69;
let kilogramos = "kg";
let miPesoConvertido = miPeso + kilogramos;
// └───────────────────────────────────────────────────────────────────────────────────┘
// Ahora, ¿Qué mostrará la consola? Veamos:
╔═════════╗
║ Consola
╠═════════╣
║ 69 kg
╚═════════╝
boolean
: Aplica cuando el valor de variable estrue
ofalse
, ¿Qué quiere decir esto? Observemos:- Si nos dicen que
Pedro tiene la misma edad que Jaimito, entonces si digo Jaimito tiene la misma edad que Pedro
. Estaré diciendo algo verdadero o true - Pero si digo:
Entonces, Jaimito es mayor que Pedro
contará como falso o false.
- Si nos dicen que
- Usando
const
: Esta es una de las más importantes, pues indicará que el valor de la variable no podrá cambiar y será usado en todo el código. Es especialmente útil para cuando busquemos usar una librería o Framework para declarar un valor de ellas, por ejemplo:
const colors = require('colors');
En este fragmento de código hemos llamado a la librería colors la cual se utiliza frecuentemente para darle colores a nuestros comandos dentro de la consola. - Usando
var
ylet
: Nos sirve jerarquicamente para definir variables las cuales sus valores pueden variar, como aquí:
var numero1 = 2;
var numero2 = 4;
var suma = numero1 + numero2;
var suma1 = + 1;
╔═════════╗
║ Consola
╠═════════╣
║ 7
╚═════════╝
declarando sin espacios intermedios
:\
Expresión | Correcto o incorrecto |
---|---|
✔️ | let miVariable = "Hola!" . |
Expresión | Correcto o incorrecto |
---|---|
❌ | let mi variable = "Hola!" |
- Respestando las
mayúsculas
yminusculas
:
Expresión | Correcto o incorrecto |
---|---|
✔️ | let; for; switch; var; console.log; if; else if . |
Expresión | Correcto o incorrecto |
---|---|
❌ | let mi variable = "LET; foR; Switch; Var; Console.log, iF; Else if .` |
- Terminando de cerrar los
caracteres
:
Expresión | Correcto o incorrecto |
---|---|
let texto = "Hola!" | ✔️ |
let texto = "hola | ❌ |
let texto = 'Hola!' | ✔️ |
let texto = Hola! | ❌ |
console.log(texto) | ✔️ |
console.log(texto | ❌ |
console.log("texto") | ✔️ |
console.log("texto) | ❌ |
- Puedes verlo como una analogía a una pildora, en su interior lleva un conteindo encapsulado y así lo mismo pasa con los arrays:
// Ejemplo:
let alumnos = (
{capsula 1},
{capsula 2}
)
// Aplicación
let alumnos = (
{
nombre: "Pedro",
edad: "17",
residencia: "Etiopia"
},
{
nombre: "Juanito",
edad: "16",
residenia: "Paises Bajos"
}
)
console.log(alumnos)
if
quiere decir,qué pasaría si?
. Veamos una analogía de una frase que reconocerán: "Si sales con bajas notas, te castigo", hay un condicional "si sales con bajas notas" y una consecuencia "te castigo". Ahora volvamos esto a código!
// ┌───────────────────────────────────────────────────────────────────────────────────┐
let saliBajoDeNotas = true; // Esto quiere decir que sí, salió bajo de notas
// └───────────────────────────────────────────────────────────────────────────────────┘
// ┌───────────────────────────────────────────────────────────────────────────────────┐
// :: if tiene una estructura así: if(condicional){¿Qué harás si ocurre eso?}
if(saliBajoDeNotas = true) {
console.log("Te castigaron")}
// Aquí se observa que se creó una condicional donde si salias bajo de notas, se
// imprimia en la consola "Te castigaron"
// └───────────────────────────────────────────────────────────────────────────────────┘
Nombre | Operador abreviado | Significado |
---|---|---|
Asignación | x = y | x = y |
Asignación de adición | x += y | x = x + y |
Asignación de resta | x -= y | x = x - y |
Asignación de multiplicación | x *= y | x = x * y |
Asignación de división | x /= y | x = x / y |
Asignación de residuo | x %= y | x = x % y |
Asignación de exponenciación | x **= y | x = x ** y |
Asignación de desplazamiento a la izquierda | x <<= y | x = x << y |
Asignación de desplazamiento a la derecha | x >>= y | x = x >> y |
Asignación AND lógico | x &&= y | x && (x = y) |
Operador | Descripción | Ejemplos que devuelven true |
---|---|---|
Igual (==) | Devuelve true si los operandos son iguales. | 3 == var1 ; "3" == var1 ; 3 == '3' |
No es igual (!=) | Devuelve true si los operandos no son iguales. | var1 != 4 ; var2 != "3" |
Estrictamente igual (===) | Devuelve true si los operandos son iguales y del mismo tipo. Consulta también Object.is y similitud en JS. | 3 === var1 |
Desigualdad estricta (!==) | Devuelve true si los operandos son del mismo tipo pero no iguales, o son de diferente tipo. | var1 !== "3" ; 3 !== '3' |
Mayor que (>) | Devuelve true si el operando izquierdo es mayor que el operando derecho. | var2 > var1 ; "12" > 2 |
Mayor o igual que (>=) | Devuelve true si el operando izquierdo es mayor o igual que el operando derecho. | var2 >= var1 ; var1 >= 3 |
Menor que (<) | Devuelve true si el operando izquierdo es menor que el operando derecho. | var1 < var2 ; "2" < 12 |
Menor o igual (<=) | Devuelve true si el operando izquierdo es menor o igual que el operando derecho. | var1 <= var2 ; var2 <= 5 |
- La estructura de function consta de lo siguiente:
function nombreDeLaVariable( Dato interior que se procesará dentro ) { dato interior que será procesado aquí }
¿Qué dices, facilito no? - Prueba 03: Vamos a elaborar una cálculadora automática de área de un cuadrado donde podamos ingresar los datos del lado.
function calcularArea(lado){
let area = lado * lado;
console.log("El resultado del área es: ", area, " m2") // Aquí se muestra en consola el resultado
return area
}
calcularArea(5) // Resultado = El resultado del área es: 25 m2
// ┌───────────────────────────────────────────────────────────────────────────────────┐
// ::::::::::: Definimos la librería whatsapp-web.js de pedrolopez
const { Client, LocalAuth } = require('whatsapp-web.js');
// └───────────────────────────────────────────────────────────────────────────────────┘
// ┌───────────────────────────────────────────────────────────────────────────────────┐
// ::::::: Importamos la librería que nos permitirá imprimir un código QR en a consola para iniciar sesión
const qrcode = require("qrcode-terminal");
// └───────────────────────────────────────────────────────────────────────────────────┘
// ┌───────────────────────────────────────────────────────────────────────────────────┐
// ::::: Declaramos una variable llamada client, que será de importancia pues la usaremos para todas las funciones que creemos, como iniiciar sesión, recibir mensajes, encender el bot, etc
/*
client tiene varios aspectos como:
client.on 'authenticated': comienza el inicio y escaneo de la sesión actual.
client.on 'auth_failure': ocurre si el inicio de sesión es incorrecto o erroneo.
client 'initialize': para finalizar el proceso de inicio de sesión, y comenzar a utilizar el código.
client.on 'ready': cuando el cliente está listo para recibir mensajes
/*
const client = new Client({authStrategy: new LocalAuth(), puppeteer: {headless: false}});
// └───────────────────────────────────────────────────────────────────────────────────┘
// ┌───────────────────────────────────────────────────────────────────────────────────┐
/* [0] */ // empezarAuntenticacion(); // Se inicia la sesión del bot, en caso de no │
// │ estar auntenticado se pide el escaneo del QR.
// └───────────────────────────────────────────────────────────────────────────────────┘
function empezarAuntenticacion(){
// ┌───────────────────────────────────────────────────────────────────────────────────┐
// │ Generación del Código QR :::::::::::::::::::::::::::::::::::::::::::::::::::::::::│
// └───────────────────────────────────────────────────────────────────────────────────┘
client.on("qr", (qr) => {
console.log("[+]Test: QR Listo!");
qrcode.generate(qr, {small: true})});
// └───────────────────────────────────────────────────────────────────────────────────┘
// ┌───────────────────────────────────────────────────────────────────────────────────┐
// │ Autenticación del cliente correcta :::::::::::::::::::::::::::::::::::::::::::::::│
// └───────────────────────────────────────────────────────────────────────────────────┘
client.on('authenticated', () => {
console.log("[+] Prueba: Auntenticado " + "realizado con éxito".green.italic)});
// └───────────────────────────────────────────────────────────────────────────────────┘
// ┌───────────────────────────────────────────────────────────────────────────────────┐
// │ Autenticación fallida ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::│
// └───────────────────────────────────────────────────────────────────────────────────┘
client.on('auth_failure', msg => {console.log("Test: Autenticado Fallido!", msg)});
// └───────────────────────────────────────────────────────────────────────────────────┘
// ┌───────────────────────────────────────────────────────────────────────────────────┐
// │ Preparación lista del cliente ::::::::::::::::::::::::::::::::::::::::::::::::::::│
// └───────────────────────────────────────────────────────────────────────────────────┘
// ┌───────────────────────────────────────────────────────────────────────────────────┐
client.on("ready", () => {
console.log("[+] Prueba: Encendido " + "realizado con éxito".green.italic)});
// └───────────────────────────────────────────────────────────────────────────────────┘
// ┌───────────────────────────────────────────────────────────────────────────────────┐
client.initialize();
// └───────────────────────────────────────────────────────────────────────────────────┘
};
empezarAuntenticacion()
Presionar aquí para observar el pdf del diagrama actualizado
Agradecimientos a https://github.com/pedroslopez/whatsapp-web.js