JavaRush /Blog Java /Random-MS /Mencipta bot telegram menggunakan Spring Boot
Whiskels
Tahap
Москва

Mencipta bot telegram menggunakan Spring Boot

Diterbitkan dalam kumpulan
Hai semua! Pada satu ketika dalam pengajian anda, anda ingin beralih daripada menyelesaikan masalah kepada mencipta projek sebenar yang akan membentuk asas portfolio anda. Apabila saya memulakan latihan saya (yang saya sangat mengesyorkan kepada semua orang), saya menerima tawaran untuk menulis bot telegram sebagai pekerja bebas. Disebabkan pengetahuan saya yang sedikit, saya menulis bot yang agak mudah ( komit terakhir sebelum berhijrah ke Spring ), yang mengandungi tiga utas:
  • benang penerima mesej;
  • benang menghantar mesej;
  • urutan penjadualan acara (ia menyemak untuk mesej berjadual dan mengemas kini data cache daripada JSON).
Semasa menulis fungsi ini, saya sangat bergantung pada artikel ini . Semuanya berfungsi dengan baik, tetapi semakin saya menyelami Spring, semakin saya ingin memfaktorkan semula segala-galanya untuk mengurangkan keselarasan program dan meningkatkan kualiti kod. SonarLint (pemalam untuk menyemak kualiti kod secara automatik) terus cuba meyakinkan saya bahawa tidak baik untuk mempunyai gelung tanpa henti. Pada satu ketika, saya membuat keputusan dan menulis semula segala-galanya, dan sekarang saya ingin berkongsi pengetahuan yang saya peroleh semasa proses pemfaktoran semula dengan anda. Mari kita mulakan dengan asas, dan lebih khusus - dengan TelegramBots-Spring-Boot-Starter Jadi, mari pergi! Mari buat bot yang akan bertanya khabar sebagai balasan kepada sebarang mesej. Pertama, kita perlu mencipta projek Maven baharu. Mari tambahkan kebergantungan yang diperlukan pada pom.xml. Tambahkan versi Java dan TelegramBots-Spring-Boot-Starter pada sifat. Dan kami mendaftar kebergantungan - di sini kami akan mempunyai TelegramBots-Spring-Boot-Starter dan API Telegram yang telah disebutkan di atas : Mencipta bot telegram menggunakan Spring Boot - 1Pustaka TelegramBots-Spring-Boot-Starter termasuk Spring Boot dan Telegram API. Menggunakannya membolehkan kami mengisytiharkan bot dalam kod kami dengan cara yang agak mudah, dan Spring sendiri akan mencipta Bean dan mengaktifkan bot. Jika anda berminat dengan apa yang berlaku di bawah hud pada masa ini, kemudian lihat sumber perpustakaan (dalam persekitaran pembangunan atau pada Github ). Kami juga menambah parameter kompilasi: Mencipta bot telegram menggunakan Spring Boot - 2 Jangan lupa untuk mengemas kini semua kebergantungan selepas mengisi pom! Mari buat dua kelas - App dan Bot, serta fail application.yaml dalam folder sumber. Struktur projek saya kelihatan seperti ini: Mencipta bot telegram menggunakan Spring Boot - 3Pada peringkat ini, mari tambahkan bukti kelayakan bot kami pada application.yaml:
bot:
  name: JavaRushTelegramBot
  token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
Notasi hierarki membolehkan kami mengelakkan pengulangan (bot.name, bot.token) dan meningkatkan kebolehbacaan. Jika anda belum mencipta bot lagi, anda boleh menciptanya dengan mengikut arahan rasmi . Jika anda tidak mahu memaparkan bukti kelayakan bot dalam application.yaml (yang betul), gunakan pembolehubah persekitaran semasa menggunakan:
bot:
  name: ${BOT_NAME}
  token: ${BOT_TOKEN}
Mengisi kelas 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;
    }
}
Isi kelas Apl:
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);
    }
}
Jika kami melakukan semuanya dengan betul, maka kami boleh menjalankan main dan bertanya khabar bot kami. Mencipta bot telegram menggunakan Spring Boot - 4sedia! Kami telah berjaya menulis dan melancarkan bot telegram yang menyapa setiap mesej yang masuk. Sekiranya artikel ini berguna kepada anda, maka terima kasih yang terbaik adalah jika anda melihat repositori saya dan meninggalkan bintang. Di sana anda juga akan menemui bot telegram versi saya, yang mempunyai banyak ciri menarik:
  • menyimpan pengguna dalam pangkalan data Postgres;
  • kebenaran akses kepada arahan berdasarkan peranan pengguna;
  • penggunaan anotasi tersuai @BotCommand dan @RequiredRoles untuk mencipta pengendali mesej dan menyemak hak pengguna;
  • sokongan untuk membuat jadual pemberitahuan.
Jika mana-mana fungsi ini menarik minat anda, tulis dalam komen, dan saya akan cuba sama ada menjawab atau menulis artikel terperinci tentang cara menciptanya semula. PS Ini adalah artikel pertama saya tentang JavaRush, dan saya ingin menyelami alam liar Spring JPA dan anotasi @Scheduled, tetapi mula-mula saya fikir ia berbaloi untuk menulis panduan ini tentang cara membina bot secara umumnya menggunakan Spring Boot. Beberapa artikel telah ditulis pada bot, tetapi carian tidak menghasilkan panduan sedemikian, jadi saya memutuskan untuk mengisi niche ini :) Saya juga ingin menyebut Miroha - terima kasih atas idea UpdateHandlers, saya mencurinya untuk saya sendiri :) BAHAGIAN 2 BAHAGIAN 3
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION