Salut tout le monde! À un moment donné de vos études, vous souhaitez passer de la résolution de problèmes à la création de projets réels qui constitueront la base de votre portfolio. Lorsque j'ai commencé mon stage (que je recommande vivement à tout le monde), j'ai reçu une offre pour écrire un robot télégramme en tant qu'indépendant. En raison de mes peu de connaissances, j'ai écrit un bot assez simple ( le dernier commit avant de migrer vers Spring ) qui contenait trois threads :
API TelegramBots-Spring-Boot-Starter et Telegram déjà mentionnées ci-dessus : La bibliothèque TelegramBots-Spring-Boot-Starter comprend Spring Boot et l'API Telegram. Son utilisation nous permet de déclarer un bot dans notre code de manière assez simple, et Spring lui-même créera le Bean et activera le bot. Si vous êtes intéressé par ce qui se passe sous le capot en ce moment, regardez les sources de la bibliothèque (dans l'environnement de développement ou sur Github ). Nous ajoutons également des paramètres de compilation : N'oubliez pas de mettre à jour toutes les dépendances après avoir rempli le pom ! Créons deux classes - App et Bot, ainsi qu'un fichier application.yaml dans le dossier ressources. La structure de mon projet ressemble à ceci : A ce stade, ajoutons les identifiants de notre bot à application.yaml :
- fil de réception de messages ;
- fil d'envoi de messages ;
- fil de planification d'événements (il vérifiait les messages planifiés et mettait à jour les données mises en cache à partir de JSON).
bot:
name: JavaRushTelegramBot
token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
La notation hiérarchique permet d'éviter les répétitions (bot.name, bot.token) et d'améliorer la lisibilité. Si vous n'avez pas encore créé de bot, vous pouvez en créer un en suivant les instructions officielles . Si vous ne souhaitez pas afficher les informations d'identification du bot dans application.yaml (ce qui est correct), utilisez des variables d'environnement lors du déploiement :
bot:
name: ${BOT_NAME}
token: ${BOT_TOKEN}
Remplir la 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;
}
}
Remplissez 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);
}
}
Si nous avons tout fait correctement, nous pouvons alors exécuter main et dire bonjour à notre bot. Prêt! Nous avons écrit et lancé avec succès un robot de télégramme qui dit bonjour à chaque message entrant. Si cet article vous a été utile, le meilleur merci serait de regarder mon référentiel et de laisser une étoile. Vous y trouverez également ma version du bot télégramme, qui possède de nombreuses fonctionnalités intéressantes :
- stocker les utilisateurs dans une base de données Postgres ;
- autorisation d'accès aux commandes en fonction des rôles des utilisateurs ;
- utilisation des annotations personnalisées @BotCommand et @RequiredRoles pour créer des gestionnaires de messages et vérifier les droits des utilisateurs ;
- prise en charge de la création d’un calendrier de notification.
GO TO FULL VERSION