JavaRush /Java блогы /Random-KK /Spring Boot көмегімен телеграмма бот құру
Whiskels
Деңгей
Москва

Spring Boot көмегімен телеграмма бот құру

Топта жарияланған
Бәріңе сәлем! Оқуыңыздың белгілі бір кезеңінде сіз проблемаларды шешуден портфолиоңыздың негізін құрайтын нақты жобаларды жасауға ауысқыңыз келеді. Мен тағылымдамаға кіріскен кезде (оны барлығына өте ұсынамын) фрилансер ретінде телеграмма бот жазу туралы ұсыныс алдым. Менің білімім аз болғандықтан, мен өте қарапайым бот жаздым ( Spring -ке көшу алдындағы соңғы тапсырма ), оның құрамында үш ағын бар:
  • хабарламаны қабылдау ағыны;
  • хабарлама жіберу ағыны;
  • оқиғаны жоспарлау ағыны (ол жоспарланған хабарларды тексерді және JSON-дан жаңартылған кэштелген деректерді тексерді).
Бұл функцияны жазған кезде мен осы мақалаға қатты сендім . Барлығы жақсы жұмыс істеді, бірақ мен Көктемге неғұрлым тереңірек енген сайын, бағдарламаның үйлесімділігін азайту және codeтың сапасын жақсарту үшін соғұрлым бәрін қайта өңдегім келді. SonarLint (code сапасын автоматты түрде тексеруге арналған плагин) мені шексіз 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 бар. Оны пайдалану бізге codeымызда ботты өте қарапайым түрде жариялауға мүмкіндік береді, ал Spring өзі Bean жасайды және ботты белсендіреді. Егер сізді қазіргі уақытта қақпақ астында не болып жатқаны қызықтырса, кітапхана көздеріне қараңыз (әзірлеу ортасында немесе Github -да ). Біз сонымен қатар компиляция параметрлерін қосамыз: Spring Boot көмегімен телеграмма ботын құру - 2 Пом толтырғаннан кейін барлық тәуелділіктерді жаңартуды ұмытпаңыз! Екі сыныпты - 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;
    }
}
Қолданба сыныбын толтырыңыз:
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);
    }
}
Егер біз бәрін дұрыс жасасақ, онда біз негізгі іске қосып, ботқа сәлем айта аламыз. Spring Boot көмегімен телеграмма ботын құру - 4Дайын! Біз әрбір кіріс хабарламаға сәлем беретін телеграмма ботын сәтті жазып, іске қостық. Егер бұл мақала сізге пайдалы болса, менің репозиторийімді қарап , жұлдыз қалдырсаңыз, ең жақсы рахмет. Онда сіз сондай-ақ көптеген қызықты мүмкіндіктері бар телеграмма ботының менің нұсқасын таба аласыз:
  • пайдаланушыларды Postgres дерекқорында сақтау;
  • пайдаланушы рөлдеріне негізделген командаларға қол жеткізуді авторизациялау;
  • хабарлама өңдегіштерін жасау және пайдаланушы құқықтарын тексеру үшін @BotCommand және @RequiredRoles пайдаланушы annotationларын пайдалану;
  • хабарландыру кестесін құруға қолдау көрсету.
Егер осы функциялардың кез келгені сізді қызықтырса, түсініктемелерде жазыңыз, мен жауап беруге немесе оны қалай қайта жасау керектігі туралы егжей-тегжейлі мақала жазуға тырысамын. PS Бұл менің JavaRush туралы бірінші мақалам және мен Spring JPA және @Scheduled annotationларының жабайы табиғатына сүңгігім келеді, бірақ алдымен Spring Boot көмегімен ботты қалай құру керектігі туралы осы нұсқаулықты жазу керек деп ойладым. Боттарда бірнеше мақалалар қазірдің өзінде жазылған, бірақ іздеуде мұндай нұсқаулық табылмады, сондықтан мен бұл тауашаны толтыруды шештім :) Мен Мироханы да атап өткім келеді - UpdateHandlers идеясы үшін рахмет, мен оны ұрлап алдым өзім :) 2 БӨЛІМ 3 БӨЛІМ
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION