Ciao a tutti! Ad un certo punto dei tuoi studi, vorrai passare dalla risoluzione dei problemi alla creazione di progetti reali che costituiranno la base del tuo portfolio. Quando ho iniziato il mio stage (che consiglio vivamente a tutti), ho ricevuto un'offerta per scrivere un bot di Telegram come libero professionista. Vista la mia scarsa conoscenza, ho scritto un bot abbastanza semplice ( l'ultimo commit prima della migrazione a Spring ), che conteneva tre thread:
e l'API Telegram : la libreria TelegramBots-Spring-Boot-Starter include Spring Boot e l'API Telegram. Usarlo ci permette di dichiarare un bot nel nostro codice in modo abbastanza semplice, e Spring stessa creerà il Bean e attiverà il bot. Se sei interessato a cosa sta succedendo dietro le quinte in questo momento, guarda i sorgenti della libreria (nell'ambiente di sviluppo o su Github ). Aggiungiamo anche i parametri di compilazione: non dimenticare di aggiornare tutte le dipendenze dopo aver compilato il pom! Creiamo due classi: App e Bot, nonché un file application.yaml nella cartella delle risorse. La struttura del mio progetto è simile a questa: In questa fase, aggiungiamo le credenziali del nostro bot a application.yaml:
- thread di ricezione dei messaggi;
- thread di invio del messaggio;
- thread di pianificazione degli eventi (verifica la presenza di messaggi pianificati e dati aggiornati memorizzati nella cache da JSON).
bot:
name: JavaRushTelegramBot
token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
La notazione gerarchica ci consente di evitare ripetizioni (bot.name, bot.token) e migliorare la leggibilità. Se non hai ancora creato un bot, puoi crearne uno seguendo le istruzioni ufficiali . Se non desideri visualizzare le credenziali del bot in application.yaml (che è corretto), utilizza le variabili di ambiente durante la distribuzione:
bot:
name: ${BOT_NAME}
token: ${BOT_TOKEN}
Compilazione della classe 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, How полноправный Bean
@Component
// Наследуемся от TelegramLongPollingBot - абстрактного класса Telegram API
public class Bot extends TelegramLongPollingBot {
// Аннотация @Value позволяет задавать meaning полю путем считывания из application.yaml
@Value("${bot.name}")
private String botUsername;
@Value("${bot.token}")
private String botToken;
/* Перегружаем метод интерфейса LongPollingBot
Теперь при получении messages наш бот будет отвечать сообщением 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;
}
}
Compila la classe App:
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) {
// Здесь code написан по заветам
// https://github.com/rubenlagus/TelegramBots/tree/master/telegrambots-spring-boot-starter
ApiContextInitializer.init();
SpringApplication.run(App.class, args);
}
}
Se abbiamo fatto tutto correttamente, possiamo eseguire main e salutare il nostro bot. Pronto! Abbiamo scritto e lanciato con successo un bot di Telegram che saluta ogni messaggio in arrivo. Se questo articolo ti è stato utile, il miglior ringraziamento sarebbe se guardassi il mio repository e lasciassi una stella. Lì troverai anche la mia versione del bot di Telegram, che ha molte caratteristiche interessanti:
- memorizzare gli utenti in un database Postgres;
- autorizzazione all'accesso ai comandi in base ai ruoli utente;
- utilizzo delle annotazioni personalizzate @BotCommand e @RequiredRoles per creare gestori di messaggi e verificare i diritti utente;
- supporto per la creazione di un programma di notifica.
GO TO FULL VERSION