JavaRush /Java Blogu /Random-AZ /Spring Boot istifadə edərək teleqram botunun yaradılması
Whiskels
Səviyyə
Москва

Spring Boot istifadə edərək teleqram botunun yaradılması

Qrupda dərc edilmişdir
Hamıya salam! Təhsilinizin bir nöqtəsində siz problemlərin həllindən portfelinizin əsasını təşkil edəcək real layihələrin yaradılmasına keçmək istəyirsiniz. Təcrübəmə başlayanda (bunu hamıya çox tövsiyə edirəm) frilanser kimi teleqram bot yazmaq təklifi aldım. Kiçik biliklərimə görə, üç mövzudan ibarət olduqca sadə bir bot yazdım ( Bahara köçməzdən əvvəl sonuncu öhdəliyim ):
  • mesaj qəbul edən mövzu;
  • mesaj göndərmə mövzusu;
  • hadisə planlaşdırma mövzusu (o, planlaşdırılmış mesajları yoxladı və JSON-dan keşlənmiş məlumatları yenilədi).
Bu funksiyanı yazarkən mən bu məqaləyə çox etibar etdim . Hər şey kifayət qədər yaxşı işlədi, amma Bahara nə qədər dərindən girdimsə, proqramın uyğunluğunu azaltmaq və kodun keyfiyyətini yaxşılaşdırmaq üçün bir o qədər hər şeyi yenidən nəzərdən keçirmək istədim. SonarLint (kod keyfiyyətini avtomatik yoxlamaq üçün plagin) məni inandırmağa çalışırdı ki, sonsuz müddət ərzində döngələrin olması çox yaxşı deyil. Bir anda qərar verdim və hər şeyi yenidən yazdım və indi refaktorinq zamanı əldə etdiyim bilikləri sizinlə bölüşmək istəyirəm. Əsaslardan başlayaq, daha dəqiq desək - TelegramBots-Spring-Boot-Starter ilə Beləliklə, gedək! İstənilən mesaja cavab olaraq salam deyəcək bir bot yaradaq. Əvvəlcə yeni Maven layihəsi yaratmalıyıq. Pom.xml-ə lazımi asılılıqları əlavə edək. Xassələrə Java və TelegramBots-Spring-Boot-Starter versiyalarını əlavə edin. Və biz asılılıqları qeyd edirik - burada yuxarıda qeyd olunan TelegramBots-Spring-Boot-Starter və Telegram API-yə sahib olacağıq : Spring Boot istifadə edərək teleqram botunun yaradılması - 1TelegramBots-Spring-Boot-Starter kitabxanasına Spring Boot və Telegram API daxildir. Onun istifadəsi bizə kifayət qədər sadə şəkildə kodumuzda botu elan etməyə imkan verir və Spring özü Bean yaradacaq və botu aktivləşdirəcək. Bu anda başlıq altında baş verənlərlə maraqlanırsınızsa, kitabxana mənbələrinə baxın (inkişaf mühitində və ya Github -da ). Kompilyasiya parametrlərini də əlavə edirik: Spring Boot istifadə edərək teleqram botunun yaradılması - 2 Pom doldurduqdan sonra bütün asılılıqları yeniləməyi unutmayın! Gəlin iki sinif yaradaq - App və Bot, həmçinin resurslar qovluğunda application.yaml faylı. Layihəmin strukturu belə görünür: Spring Boot-dan istifadə edərək teleqram botunun yaradılması - 3Bu mərhələdə botumuzun etimadnaməsini application.yaml-a əlavə edək:
bot:
  name: JavaRushTelegramBot
  token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
İerarxik qeyd bizə təkrardan qaçmağa (bot.name, bot.token) və oxunuşunu yaxşılaşdırmağa imkan verir. Hələ bot yaratmamısınızsa, rəsmi təlimatlara əməl etməklə onu yarada bilərsiniz . Əgər siz botun etimadnaməsini application.yaml-da göstərmək istəmirsinizsə (bu düzgündür), yerləşdirərkən mühit dəyişənlərindən istifadə edin:
bot:
  name: ${BOT_NAME}
  token: ${BOT_TOKEN}
Bot sinfinin doldurulması:
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;
    }
}
Tətbiq sinfini doldurun:
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);
    }
}
Hər şeyi düzgün etdiksə, o zaman main-i işə salıb botumuza salam deyə bilərik. Spring Boot istifadə edərək teleqram botunun yaradılması - 4Hazır! Hər gələn mesaja salam deyən teleqram botunu uğurla yazdıq və işə saldıq. Bu məqalə sizin üçün faydalı olsaydı, mənim depoma baxıb bir ulduz buraxsanız, ən yaxşı təşəkkür olardı . Orada bir çox maraqlı xüsusiyyətlərə malik teleqram botunun mənim versiyasını da tapa bilərsiniz:
  • istifadəçiləri Postgres verilənlər bazasında saxlamaq;
  • istifadəçi rolları əsasında əmrlərə girişin icazəsi;
  • mesaj işləyiciləri yaratmaq və istifadəçi hüquqlarını yoxlamaq üçün @BotCommand və @RequiredRoles xüsusi annotasiyalarından istifadə;
  • bildiriş cədvəli yaratmaq üçün dəstək.
Bu funksionallıqdan hər hansı biri sizi maraqlandırarsa, şərhlərdə yazın və mən cavab verməyə və ya onu necə yenidən yaratmaq barədə ətraflı məqalə yazmağa çalışacağam. PS Bu mənim JavaRush haqqında ilk məqaləmdir və mən Spring JPA və @Scheduled annotasiyalarının vəhşi təbiətinə dalmaq istərdim, lakin əvvəlcə Spring Boot-dan istifadə edərək ümumiyyətlə bot yaratmaq üçün bu təlimatı yazmağa dəyər olduğunu düşündüm. Artıq botlarda bir neçə məqalə yazılmışdır, lakin axtarışda belə bir bələdçi tapılmadı, ona görə də bu yeri doldurmaq qərarına gəldim :) Mirohanı da qeyd etmək istərdim - UpdateHandlers ideyasına görə təşəkkür edirəm, mən onu oğurladım özüm :) 2-ci hissə 3-cü hissə
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION