Cześć wszystkim! Na pewnym etapie studiów chcesz przejść od rozwiązywania problemów do tworzenia realnych projektów, które będą podstawą Twojego portfolio. Kiedy rozpoczynałem staż (który gorąco wszystkim polecam), otrzymałem propozycję napisania bota telegramowego jako freelancer. Ze względu na moją niewielką wiedzę napisałem dość prostego bota ( ostatnie zatwierdzenie przed migracją do Springa ), który zawierał trzy wątki:
i Telegram API : Biblioteka TelegramBots-Spring-Boot-Starter zawiera Spring Boot i Telegram API. Dzięki niemu możemy w dość prosty sposób zadeklarować w naszym kodzie bota, a Spring sam utworzy Beana i aktywuje bota. Jeśli ciekawi Cię, co w tej chwili dzieje się pod maską, zajrzyj do źródeł bibliotecznych (w środowisku programistycznym lub na Githubie ). Dodajemy także parametry kompilacji: Nie zapomnij zaktualizować wszystkich zależności po wypełnieniu pom! Stwórzmy dwie klasy - App i Bot, a także plik application.yaml w folderze Resources. Struktura mojego projektu wygląda następująco: Na tym etapie dodajmy referencje naszego bota do pliku application.yaml:
- wątek odbierania wiadomości;
- wątek wysyłania wiadomości;
- wątek planowania zdarzeń (sprawdzał zaplanowane wiadomości i aktualizował dane w pamięci podręcznej z JSON).
bot:
name: JavaRushTelegramBot
token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
Notacja hierarchiczna pozwala uniknąć powtórzeń (bot.name, bot.token) i poprawić czytelność. Jeśli jeszcze nie utworzyłeś bota, możesz go utworzyć, postępując zgodnie z oficjalnymi instrukcjami . Jeśli nie chcesz wyświetlać poświadczeń bota w pliku application.yaml (co jest poprawne), podczas wdrażania użyj zmiennych środowiskowych:
bot:
name: ${BOT_NAME}
token: ${BOT_TOKEN}
Wypełnianie klasy 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, Jak полноправный Bean
@Component
// Наследуемся от TelegramLongPollingBot - абстрактного класса Telegram API
public class Bot extends TelegramLongPollingBot {
// Аннотация @Value позволяет задавать oznaczający полю путем считывания из application.yaml
@Value("${bot.name}")
private String botUsername;
@Value("${bot.token}")
private String botToken;
/* Перегружаем метод интерфейса LongPollingBot
Теперь при получении wiadomości наш бот будет отвечать сообщением 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;
}
}
Wypełnij klasę aplikacji:
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) {
// Здесь kod написан по заветам
// https://github.com/rubenlagus/TelegramBots/tree/master/telegrambots-spring-boot-starter
ApiContextInitializer.init();
SpringApplication.run(App.class, args);
}
}
Jeżeli wszystko zrobiliśmy poprawnie to możemy uruchomić main i przywitać się z naszym botem. Gotowy! Udało nam się napisać i uruchomić bota telegramowego, który wita każdą przychodzącą wiadomość. Jeśli ten artykuł był dla Ciebie przydatny, najlepszym podziękowaniem byłoby zajrzenie do mojego repozytorium i pozostawienie gwiazdki. Znajdziesz tam również moją wersję bota telegramu, który ma wiele ciekawych funkcji:
- przechowywanie użytkowników w bazie danych Postgres;
- autoryzacja dostępu do poleceń w oparciu o role użytkowników;
- wykorzystanie niestandardowych adnotacji @BotCommand i @RequiredRoles do tworzenia procedur obsługi wiadomości i sprawdzania uprawnień użytkowników;
- wsparcie przy tworzeniu harmonogramu powiadomień.
GO TO FULL VERSION