Aquí encontrarás consejos y "hojas de trucos" para el material que estás cubriendo durante las clases. Serán útiles para manejar con éxito las tareas en casa. Recuerda: siempre puedes revisar el video, leer los resúmenes o hacer preguntas a la comunidad y al mentor en el chat especial de Telegram. ¡Buena suerte!

Resumen de la lección #1

En esta sesión nos familiarizamos con la estructura de nuestro proyecto en IntelliJ IDEA, aprendimos cómo registrar un bot en Telegram y cómo escribir el primer mensaje para el usuario.

Principales conceptos del lenguaje Java que te será útil conocer.

POO — Programación Orientada a Objetos. Java es un lenguaje orientado a objetos. Esto significa que todo lo que se crea en el programa debe crearse en forma de objeto. Programa: un conjunto (lista) de comandos. Inicialmente, se ejecuta el primer comando, luego el segundo, el tercero, etc. Cuando se han ejecutado todos los comandos, el programa se completa. Los programas en Java son ejecutados por la JVM (Java Virtual Machine — Máquina Virtual Java). JVM es un programa especializado que puede ejecutar programas escritos en el lenguaje Java.

Principales principios de escribir comandos:

Principio primero: En el lenguaje Java, es común escribir cada comando en una nueva línea. Al final de cada comando se coloca un punto y coma:

System.out.println("¡Hola, futuro programador!");
Principio segundo: Un programa no puede simplemente consistir en comandos. Los comandos en el lenguaje Java deben estar dentro de métodos, y los métodos dentro de clases. La jerarquía general se puede describir de la siguiente manera: los programas Java están compuestos por clases, las clases contienen métodos y los métodos contienen comandos.

2.Tesis para la primera lección

  • Iniciamos IntelliJ IDEA y abrimos el proyecto descargado.
  • src en la columna izquierda es la carpeta de origen. src → main → java es la ruta al código con el que trabajaremos.
  • Los métodos de utilidad son métodos auxiliares, generalmente estáticos, lo que significa que pertenecen a la clase en lugar de un objeto.
  • La herencia (herencia de clases) es una forma de relación entre clases. Una subclase (clase hija) utiliza métodos de la superclase (clase padre), pero no al revés.
En nuestro caso, estamos utilizando la herencia de la clase TelegramLongPollingBot. Esta clase tiene un conjunto de métodos que necesitamos para conectarnos y trabajar con el bot de Telegram que crearemos juntos. Para que el programa pueda trabajar con nuestro bot, necesitamos especificar:
  • getBotUsername (nombre del bot)
  • getBotToken (token del bot)

Obtención del nombre y token del bot, registro del bot

Abre Telegram y encuentra a BotFather a través de la búsqueda. En el diálogo abierto con BotFather, escribe: /newbot — un comando para crear un nuevo bot. Después de la creación, debes elegir un nombre de usuario único, que debe terminar obligatoriamente en _bot.

Métodos de utilidad que utilizaremos

Recordamos que los métodos de utilidad son métodos listos, escritos por otros programadores, que nos ayudan a escribir el código de nuestro programa. onUpdateReceived — un método que procesará todos los mensajes que ingresen los usuarios de nuestro bot. Los recibiremos y escribiremos la lógica según lo que necesitamos. createMessage — un método para crear un mensaje. El primer parámetro que toma es el chatId, que es el identificador del chat iniciado por el usuario. El segundo toma el valor del mensaje que se mostrará al usuario. En nuestro caso, es "¡Hola, futuro programador!". sendApiMethodAsync — un método para enviar un mensaje.

La tarea #1

  1. Descargar el proyecto en IntelliJ IDEA.
  2. Crear y registrar nuestro bot en Telegram.
  3. Escribir el primer mensaje en el bot para el usuario.

Consejos para completar la tarea #1

Verifica la corrección del código y actualiza los cambios en el proyecto

Para ver los cambios que estás realizando directamente en el funcionamiento del bot de Telegram, no olvides, después de escribir tu código, aplicar todos los cambios (reiniciar el proyecto) en IntelliJ IDEA. Para hacer esto, necesitas hacer clic en la flecha verde circular en la parte inferior de la barra horizontal. Resúmenes de las lecciones en el maratón de Java - 1

Importantes principios de formato de código:

  • No olvides poner un punto y coma ; al final de cada comando que creas.
  • Cada paréntesis o comilla que abres: (, {, ", debe tener su respectivo paréntesis o comilla que cierra: ), }, ".
  • Si tu código se resalta en rojo, significa que hay un error; revísalo con atención.
  • Utiliza las sugerencias automáticas y la autocompletación; esto te ayudará a escribir el código correctamente.
  • Recuerda que los nombres de tus variables, métodos y clases deben ser legibles, es decir, que a través del nombre se pueda entender qué hacen o para qué están destinados.

Resumen de la lección #2

En esta clase, aprendimos a formatear el texto de respuesta del bot y comenzamos a trabajar en la expansión de funcionalidades para manejar mensajes adicionales. Esto nos ayudará a analizar las solicitudes de los usuarios y proporcionar mensajes adecuados a esas solicitudes.

Formateo de texto:

  • Para resaltar el texto en cursiva, debes agregar guiones bajos al principio y al final del fragmento deseado: _texto_
  • Para resaltar el texto en negrita, debes agregar asteriscos al principio y al final del fragmento deseado: *texto*

Métodos y operadores que vamos a utilizar:

  • if — operador condicional en Java
  • update.hasMessage() — método mediante el cual comprobaremos si tenemos un mensaje nuevo
  • equals — método que compara el contenido del mensaje con un texto específico. Para que la condición sea verdadera, el contenido debe ser completamente idéntico (lo que se pasa al método equals debe coincidir palabra por palabra en la solicitud/mensaje)
  • contains — método que verifica si el mensaje contiene una palabra/frase específica. En nuestro caso, "hola"

La construcción del operador condicional if

El operador if es el principal operador de selección en Java, que permite cambiar selectivamente el flujo de ejecución del programa. Comienza con la palabra clave if. La palabra clave if va seguida de una expresión booleana (lógica) entre paréntesis. La forma más simple tiene el siguiente aspecto:

if (condición) operador;  // si la condición es verdadera, se ejecuta el operador
El operador if se completa con un fragmento que se coloca entre llaves {}{bloque de operadores}. Importante: en nuestro caso, estamos utilizando dos operadores condicionales, no olvides el operador && (AND), y nuestra condición adicional con la cuenta de puntos de fama.

La tarea #2

Completar el diálogo. Después del mensaje "¡Hola, ¿cómo te llamas?", si el usuario envía el mensaje: "Me llamo [tu nombre]" (es decir, un mensaje que contiene la frase "Me llamo"). En la respuesta, debemos enviar al usuario: "Encantado de conocerte, yo soy - Gato", donde Gato está resaltado en negrita.

Consejo para completar la tarea #2:

Cada paréntesis o comilla que abras: (, {, , debe tener su respectivo paréntesis o comilla que cierre: ), }, . Muestra atención y no confundas estas parejas de signos cuando escribas código para procesar mensajes en el bot: Resúmenes de las lecciones en el maratón de Java - 2

Resumen de la lección #3

En esta clase, aprendimos a enviar mensajes mediante botones. Después de esta lección, podrás agregar por ti mismo un diálogo con el Gato en tu chatbot-juego.

Agregar botones a tu bot

El texto con las sugerencias que debe estar escrito en los botones de tu chatbot-juego ya está preparado. Puedes encontrarlo en la carpeta del proyecto, en el archivo buttons.txt: Resúmenes de las lecciones en el maratón de Java - 3getCallbackQuery — método que utilizamos para verificar si se ha presionado alguno de los botones. Map.of() — un mapa con los valores de los botones que se muestran al usuario junto con un mensaje específico.
  • k (clave) — valor del botón
  • v (valor) — identificador del botón (para conveniencia (legibilidad), utilizamos el número del paso en el que nos encontramos en el chatbot-juego)

Probando todos los cambios en el programa

Realiza todos los cambios paso a paso. Edita una parte del código, aplica esos cambios (flecha verde en la barra horizontal inferior) y asegúrate de que tu programa funcione: verifica cómo se ve todo en el bot de Telegram después de tus acciones en el editor de código.

La tarea #3

  • Completa el diálogo con el Gato, utilizando el texto para los pasos (steps) del TelegramBotContent.
  • Utiliza los textos para los botones que se encuentran en el archivo buttons.txt.

Consejo para completar la tarea #3

Ten en cuenta: a partir del segundo paso, verificamos no solo si se ha presionado un botón, sino también la CANTIDAD DE FAMA que tiene el Gato en ese momento. Inicialmente, es igual a 0. Con cada paso que completamos, el Gato recibe una cantidad adicional de fama (+20, 30…). La cantidad de fama es una condición importante que nos ayuda a crear una secuencia de acciones correcta en el chatbot-juego, sin repeticiones de pasos. ¡Importante! En el último paso, también es necesario agregar addGlories, de lo contrario, podremos presionar el último botón "Salir al patio" infinitamente, y el mensaje en el chatbot-juego se duplicará.

Resumen de la lección #4

En la etapa final, agregaremos imágenes a las respuestas para nuestro usuario y así lo haremos más interesante. ¡También nos ocuparemos del refactorización del código!

Agregando imágenes a los mensajes en el bot

Todas las imágenes que necesitas están en la carpeta images: Resúmenes de las lecciones en el maratón de Java - 4createPhotoMessage — este es el método que necesitamos para agregar imágenes. Toma 2 valores:
  • chatId (identificador del usuario).
  • name: el nombre de la imagen que queremos usar.
executeAsync — este es el método para enviar el objeto (imagen) al usuario. Refactorización del código de tu programaRefactorización (del inglés refactoring) es el proceso de cambiar la estructura interna de un programa sin afectar su comportamiento externo. En esencia, es simplificar y mejorar el código existente para darle una apariencia más compacta y comprensible, aumentar el rendimiento y evitar errores en el código en el futuro. Tu tarea es escribir un método universal sendMessage() que enviará mensajes al usuario. Dado que nuestros mensajes tienen componentes constantes, sería conveniente tener un patrón como este. Algunas definiciones importantes de la lección:
  • private — significa que el método es privado y se utiliza solo dentro de nuestra clase.
  • void — es un valor que indica que el método no devuelve nada.
sendMessage() — es el nombre de tu propio método que envía mensajes al usuario. En los paréntesis () debes especificar todos los parámetros necesarios para implementar la lógica correcta para el usuario.

Guardamos el resultado en una variable

Aquí tienes una breve explicación de cómo guardar el resultado en una variable, como lo hizo el mentor en la clase: Resúmenes de las lecciones en el maratón de Java - 5Puedes hacerlo de dos maneras:
  • después de escribir el comando, por ejemplo, createMessage(chatId, text, buttons), presiona ctrl+alt+v (Windows)
  • después de escribir el comando, por ejemplo, createMessage(chatId, text, buttons), escribe ".var" (sin comillas) y presiona Enter
Luego se te pedirá que ingreses el nombre de la variable en la que deseas guardar el resultado del comando.

La tarea #4

Refactorizar el código utilizando el método privado sendMessage para todos los pasos del bot del juego:
  • Repetir la refactorización del código de la lección.
  • Refactorizar independientemente el código para los pasos 6-8.