JavaRush /Java Blog /Random-KO /Spring Boot를 사용하여 텔레그램 봇 만들기
Whiskels
레벨 41
Москва

Spring Boot를 사용하여 텔레그램 봇 만들기

Random-KO 그룹에 게시되었습니다
안녕하세요 여러분! 연구의 어느 시점에서는 문제 해결에서 포트폴리오의 기초를 형성할 실제 프로젝트 생성으로 전환하고 싶을 것입니다. 제가 인턴십을 시작했을 때(모든 사람에게 강력히 추천합니다) 프리랜서로서 텔레그램 봇을 작성해 달라는 제안을 받았습니다. 나의 지식이 부족하여 나는 세 개의 스레드를 포함하는 매우 간단한 봇( Spring으로 마이그레이션하기 전 마지막 커밋 )을 작성했습니다.
  • 메시지 수신 스레드;
  • 메시지 전송 스레드;
  • 이벤트 예약 스레드(예약된 메시지를 확인하고 JSON에서 캐시된 데이터를 업데이트함)
이 기능을 작성할 때 이 기사를 많이 참고했습니다 . 모든 것이 꽤 잘 작동했지만 Spring에 더 깊이 들어갈수록 프로그램의 일관성을 줄이고 코드 품질을 향상시키기 위해 모든 것을 리팩터링하고 싶었습니다. SonarLint(코드 품질을 자동으로 확인하는 플러그인)는 끝없는 while 루프를 갖는 것이 그리 좋지 않다는 것을 계속해서 설득하려고 했습니다. 어느 순간 마음을 먹고 모든 것을 다시 썼는데, 이제 리팩토링 과정에서 얻은 지식을 여러분과 공유하고 싶습니다. TelegramBots-Spring-Boot-Starter를 사용하여 기본부터 시작하겠습니다. 더 구체적으로 살펴보겠습니다. 모든 메시지에 응답하여 인사하는 봇을 만들어 보겠습니다. 먼저 새로운 Maven 프로젝트를 생성해야 합니다. pom.xml에 필요한 종속성을 추가해 보겠습니다. Java 및 TelegramBots-Spring-Boot-Starter 버전을 속성에 추가합니다. 그리고 종속성을 등록합니다. 여기에는 위에서 이미 언급한 TelegramBots-Spring-Boot-Starter 및 Telegram API가 있습니다 . Spring Boot를 사용하여 텔레그램 봇 만들기 - 1TelegramBots-Spring-Boot-Starter 라이브러리에는 Spring Boot 및 Telegram API가 포함되어 있습니다. 이를 사용하면 매우 간단한 방법으로 코드에서 봇을 선언할 수 있으며 Spring 자체가 Bean을 생성하고 봇을 활성화합니다. 현재 내부에서 무슨 일이 일어나고 있는지 관심이 있다면 라이브러리 소스(개발 환경 또는 Github 에서 )를 살펴보세요. 또한 컴파일 매개변수도 추가합니다. Spring Boot를 사용하여 텔레그램 봇 만들기 - 2 pom!을 작성한 후 모든 종속성을 업데이트하는 것을 잊지 마세요. App과 Bot이라는 두 가지 클래스와 리소스 폴더에 application.yaml 파일을 만들어 보겠습니다. 내 프로젝트의 구조는 다음과 같습니다. Spring Boot를 사용하여 텔레그램 봇 만들기 - 3이 단계에서는 봇의 자격 증명을 application.yaml에 추가하겠습니다.
bot:
  name: JavaRushTelegramBot
  token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
계층적 표기법을 사용하면 반복(bot.name, bot.token)을 방지하고 가독성을 높일 수 있습니다. 아직 봇을 만들지 않았다면 공식 지침 에 따라 봇을 만들 수 있습니다 . application.yaml에 봇의 자격 증명을 표시하지 않으려면(정확함) 배포 시 환경 변수를 사용하세요.
bot:
  name: ${BOT_NAME}
  token: ${BOT_TOKEN}
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;
    }
}
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);
    }
}
모든 작업을 올바르게 수행했다면 main을 실행하고 봇에게 인사할 수 있습니다. Spring Boot를 사용하여 텔레그램 봇 만들기 - 4준비가 된! 우리는 들어오는 모든 메시지에 대해 인사하는 텔레그램 봇을 성공적으로 작성하고 출시했습니다. 이 기사가 도움이 되었다면 내 저장소를 보고 별표를 남겨주시면 가장 감사하겠습니다. 여기에서 많은 흥미로운 기능을 갖춘 내 버전의 텔레그램 봇도 찾을 수 있습니다.
  • Postgres 데이터베이스에 사용자를 저장합니다.
  • 사용자 역할에 따라 명령에 대한 액세스 권한 부여
  • 사용자 정의 주석 @BotCommand 및 @RequiredRoles를 사용하여 메시지 핸들러를 생성하고 사용자 권한을 확인합니다.
  • 알림 일정 생성을 지원합니다.
이 기능 중 관심이 있는 기능이 있으면 댓글을 작성해 주세요. 답변을 드리거나 이를 재현하는 방법에 대한 자세한 기사를 작성하겠습니다. PS 이것은 JavaRush에 대한 나의 첫 번째 기사이며 Spring JPA 및 @Scheduled 주석의 세계에 대해 자세히 알아보고 싶지만 먼저 Spring Boot를 사용하여 일반적으로 봇을 구축하는 방법에 대한 이 가이드를 작성하는 것이 가치가 있다고 생각했습니다. 이미 봇에 대한 여러 기사가 작성되었지만 검색에서 그러한 가이드가 생성되지 않았기 때문에 이 틈새 시장을 채우기로 결정했습니다. :) 또한 Miroha에 대해 언급하고 싶습니다. UpdateHandlers 아이디어 덕분에 직접 훔쳤습니다. :) 2부 3부
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION