Hallo zusammen! Irgendwann im Laufe Ihres Studiums möchten Sie von der Lösung von Problemen zur Erstellung realer Projekte übergehen, die die Grundlage Ihres Portfolios bilden. Zu Beginn meines Praktikums (das ich jedem wärmstens empfehlen kann) erhielt ich das Angebot, als Freelancer einen Telegram-Bot zu schreiben. Aufgrund meiner geringen Kenntnisse habe ich einen recht einfachen Bot geschrieben ( das letzte Commit vor der Migration zu Spring ), der drei Threads enthielt:
und Telegram-API : Die TelegramBots-Spring-Boot-Starter-Bibliothek enthält Spring Boot und die Telegram-API. Dadurch können wir auf relativ einfache Weise einen Bot in unserem Code deklarieren, und Spring selbst erstellt das Bean und aktiviert den Bot. Wenn Sie sich dafür interessieren, was in diesem Moment unter der Haube passiert, dann schauen Sie sich die Bibliotheksquellen an (in der Entwicklungsumgebung oder auf Github ). Wir fügen auch Kompilierungsparameter hinzu: Vergessen Sie nicht, alle Abhängigkeiten zu aktualisieren, nachdem Sie den POM ausgefüllt haben! Erstellen wir zwei Klassen – App und Bot – sowie eine application.yaml-Datei im Ressourcenordner. Die Struktur meines Projekts sieht folgendermaßen aus: In dieser Phase fügen wir die Anmeldeinformationen unseres Bots zu application.yaml hinzu:
- Thread zum Empfangen von Nachrichten;
- Thread zum Senden von Nachrichten;
- Ereignisplanungsthread (überprüft auf geplante Nachrichten und aktualisierte zwischengespeicherte Daten von JSON).
bot:
name: JavaRushTelegramBot
token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
Durch die hierarchische Notation können wir Wiederholungen vermeiden (bot.name, bot.token) und die Lesbarkeit verbessern. Wenn Sie noch keinen Bot erstellt haben, können Sie einen erstellen, indem Sie den offiziellen Anweisungen folgen . Wenn Sie die Anmeldeinformationen des Bots nicht in application.yaml anzeigen möchten (was korrekt ist), verwenden Sie bei der Bereitstellung Umgebungsvariablen:
bot:
name: ${BOT_NAME}
token: ${BOT_TOKEN}
Ausfüllen der Bot-Klasse:
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, Wie полноправный Bean
@Component
// Наследуемся от TelegramLongPollingBot - абстрактного класса Telegram API
public class Bot extends TelegramLongPollingBot {
// Аннотация @Value позволяет задавать Bedeutung полю путем считывания из application.yaml
@Value("${bot.name}")
private String botUsername;
@Value("${bot.token}")
private String botToken;
/* Перегружаем метод интерфейса LongPollingBot
Теперь при получении Mitteilungen наш бот будет отвечать сообщением 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;
}
}
Füllen Sie die App-Klasse aus:
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);
}
}
Wenn wir alles richtig gemacht haben, können wir main ausführen und unserem Bot Hallo sagen. Bereit! Wir haben erfolgreich einen Telegram-Bot geschrieben und gestartet, der jede eingehende Nachricht begrüßt. Wenn dieser Artikel für Sie nützlich war, wäre es am besten, wenn Sie sich mein Repository ansehen und einen Stern hinterlassen. Dort finden Sie auch meine Version des Telegram-Bots, die über viele interessante Features verfügt:
- Speichern von Benutzern in einer Postgres-Datenbank;
- Autorisierung des Zugriffs auf Befehle basierend auf Benutzerrollen;
- Verwendung der benutzerdefinierten Annotationen @BotCommand und @RequiredRoles, um Nachrichtenhandler zu erstellen und Benutzerrechte zu überprüfen;
- Unterstützung für die Erstellung eines Benachrichtigungsplans.
GO TO FULL VERSION