JavaRush /Java блогу /Random-KY /Spring Boot аркылуу телеграмма ботун түзүү
Whiskels
Деңгээл
Москва

Spring Boot аркылуу телеграмма ботун түзүү

Группада жарыяланган
Баарына салам! Окуу учурунда сиз көйгөйлөрдү чечүүдөн портфолиоңуздун негизин түзө турган реалдуу долбоорлорду түзүүгө өтүүнү каалайсыз. Мен стажировкамды баштаганда (мен муну баарына сунуш кылам), мен фрилансер катары телеграмма ботун жазуу сунушун алдым. Аз бorмимдин аркасында мен абдан жөнөкөй бот жаздым ( Жазга көчүү алдындагы акыркы милдеттенме ), анда үч жип бар:
  • билдирүүлөрдү кабыл алуу жип;
  • билдирүү жөнөтүү жип;
  • окуяны пландаштыруу жип (ал пландаштырылган билдирүүлөрдү текшерип, JSONден кэштелген маалыматтарды жаңыртты).
Бул функцияны жазып жатканда, мен бул макалага көп таяндым . Баары жакшы иштеди, бирок мен Жазга канчалык тереңирээк сүңгүп кирген сайын, программанын ырааттуулугун азайтуу жана codeдун сапатын жакшыртуу үчүн баарын рефакторациялагым келди. SonarLint (codeдун сапатын автоматтык түрдө текшерүү үчүн плагин) чексиз while циклдери болушу жакшы эмес экенине мени ынандырууга аракет кылып келет. Качандыр бир убакта мен чечим кабыл алып, баарын кайра жаздым, эми рефакторинг процессинде алган бorмимди сиздер менен бөлүшкүм келет. Негиздерден баштайлы, тагыраак айтканда - TelegramBots-Spring-Boot-Starter менен Ошентип, кетели! Кандайдыр бир билдирүүгө жооп бере турган бот түзөлү. Биринчиден, биз жаңы Maven долбоорун түзүшүбүз керек. Келгиле, pom.xmlге керектүү көз карандылыктарды кошолу. Менчиктерге Java жана TelegramBots-Spring-Boot-Starter versionларын кошуңуз. Жана биз көз карандылыкты каттайбыз - бул жерде бизде жогоруда айтылган 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Даяр! Биз ар бир келген билдирүүгө салам айткан телеграмма ботун ийгorктүү жазып, ишке киргиздик. Бул макала сиз үчүн пайдалуу болсо, анда менин репозиторийимди карап , жылдыз калтырсаңыз, эң сонун рахмат. Ал жерден сиз менин телеграмма боттун versionсын таба аласыз, анын көптөгөн кызыктуу өзгөчөлүктөрү бар:
  • колдонуучуларды 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