¡Hola a todos! En algún momento de tus estudios, querrás pasar de resolver problemas a crear proyectos reales que formarán la base de tu portafolio. Cuando comencé mis prácticas (que recomiendo encarecidamente a todos), recibí una oferta para escribir un bot de Telegram como autónomo. Debido a mi poco conocimiento, escribí un bot bastante simple ( el último compromiso antes de migrar a Spring ), que contenía tres subprocesos:
y Telegram API ya mencionados anteriormente :
la biblioteca TelegramBots-Spring-Boot-Starter incluye Spring Boot y Telegram API. Usarlo nos permite declarar un bot en nuestro código de una manera bastante simple, y el propio Spring creará el Bean y activará el bot. Si está interesado en lo que está sucediendo bajo el capó en este momento, consulte las fuentes de la biblioteca (en el entorno de desarrollo o en Github ). También agregamos parámetros de compilación:
¡no olvides actualizar todas las dependencias después de completar el pom! Creemos dos clases: App y Bot, así como un archivo application.yaml en la carpeta de recursos. La estructura de mi proyecto se ve así:
En esta etapa, agreguemos las credenciales de nuestro bot a application.yaml:
¡Listo! Hemos escrito y lanzado con éxito un bot de Telegram que saluda cada mensaje entrante. Si este artículo te resultó útil, entonces el mejor agradecimiento sería que miraras mi repositorio y dejaras una estrella. Allí también encontrarás mi versión del bot de Telegram, que tiene muchas características interesantes:
- hilo de recepción de mensajes;
- hilo de envío de mensajes;
- Hilo de programación de eventos (verificó mensajes programados y actualizó los datos almacenados en caché desde JSON).
![Creando un bot de Telegram usando Spring Boot - 1](https://cdn.javarush.com/images/article/71b67dfa-a0a0-4feb-840b-470a8aed0d42/800.jpeg)
![Creando un bot de Telegram usando Spring Boot - 2](https://cdn.javarush.com/images/article/ef34cc48-d1ff-4e80-af88-b83a617dd053/1024.jpeg)
![Creando un bot de Telegram usando Spring Boot - 3](https://cdn.javarush.com/images/article/8e378f74-d7f1-41ba-ac09-62f4898d6ba8/512.jpeg)
bot:
name: JavaRushTelegramBot
token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
La notación jerárquica nos permite evitar repeticiones (bot.name, bot.token) y mejorar la legibilidad. Si aún no ha creado un bot, puede crear uno siguiendo las instrucciones oficiales . Si no desea mostrar las credenciales del bot en application.yaml (lo cual es correcto), use variables de entorno al implementar:
bot:
name: ${BOT_NAME}
token: ${BOT_TOKEN}
Completando la clase Bot:
package com.whiskels.telegram.bot;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
// Аннотация @Component необходима, чтобы наш класс распознавался Spring, Cómo полноправный Bean
@Component
// Наследуемся от TelegramLongPollingBot - абстрактного класса Telegram API
public class Bot extends TelegramLongPollingBot {
// Аннотация @Value позволяет задавать significado полю путем считывания из application.yaml
@Value("${bot.name}")
private String botUsername;
@Value("${bot.token}")
private String botToken;
/* Перегружаем метод интерфейса LongPollingBot
Теперь при получении mensajes наш бот будет отвечать сообщением Hi!
*/
@Override
public void onUpdateReceived(Update update) {
try {
execute(new SendMessage().setChatId(update.getMessage().getChatId())
.setText("Hi!"));
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
// Геттеры, которые необходимы для наследования от TelegramLongPollingBot
public String getBotUsername() {
return botUsername;
}
public String getBotToken() {
return botToken;
}
}
Complete la clase de aplicación:
package com.whiskels.telegram;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.telegram.telegrambots.ApiContextInitializer;
// Аннотация, которая объединяет в себя @Configuration, @EnableAutoConfiguration, @ComponentScan
@SpringBootApplication
public class App {
public static void main(String[] args) {
// Здесь código написан по заветам
// https://github.com/rubenlagus/TelegramBots/tree/master/telegrambots-spring-boot-starter
ApiContextInitializer.init();
SpringApplication.run(App.class, args);
}
}
Si hicimos todo correctamente, entonces podemos ejecutar main y saludar a nuestro bot. ![Creando un bot de Telegram usando Spring Boot - 4](https://cdn.javarush.com/images/article/61161b78-a249-4313-a6d4-9b1acec73c82/800.jpeg)
- almacenar usuarios en una base de datos Postgres;
- autorización de acceso a comandos según roles de usuario;
- uso de anotaciones personalizadas @BotCommand y @RequiredRoles para crear controladores de mensajes y verificar los derechos de los usuarios;
- soporte para crear un cronograma de notificaciones.
GO TO FULL VERSION