JavaRush /Java Blog /Random-ID /Membuat bot telegram menggunakan Spring Boot
Whiskels
Level 41
Москва

Membuat bot telegram menggunakan Spring Boot

Dipublikasikan di grup Random-ID
Halo semua! Pada titik tertentu dalam studi Anda, Anda ingin beralih dari memecahkan masalah ke menciptakan proyek nyata yang akan menjadi dasar portofolio Anda. Ketika saya memulai magang (yang sangat saya rekomendasikan kepada semua orang), saya menerima tawaran untuk menulis bot telegram sebagai pekerja lepas. Karena sedikit pengetahuan saya, saya menulis bot yang cukup sederhana ( komit terakhir sebelum bermigrasi ke Spring ), yang berisi tiga utas:
  • utas penerimaan pesan;
  • utas pengiriman pesan;
  • thread penjadwalan acara (memeriksa pesan terjadwal dan memperbarui data cache dari JSON).
Saat menulis fungsi ini, saya sangat mengandalkan artikel ini . Semuanya bekerja dengan cukup baik, tetapi semakin dalam saya mendalami Spring, semakin saya ingin memfaktorkan ulang semuanya untuk mengurangi koherensi program dan meningkatkan kualitas kode. SonarLint (sebuah plugin untuk memeriksa kualitas kode secara otomatis) terus berusaha meyakinkan saya bahwa tidak baik memiliki perulangan while tanpa akhir. Pada titik tertentu, saya mengambil keputusan dan menulis ulang semuanya, dan sekarang saya ingin berbagi pengetahuan yang saya peroleh selama proses refactoring dengan Anda. Mari kita mulai dengan dasar-dasarnya, dan lebih khusus lagi - dengan TelegramBots-Spring-Boot-Starter Jadi, ayo! Mari kita buat bot yang akan menyapa pesan apa pun. Pertama, kita perlu membuat proyek Maven baru. Mari tambahkan dependensi yang diperlukan ke pom.xml. Tambahkan versi Java dan TelegramBots-Spring-Boot-Starter ke properti. Dan kami mendaftarkan dependensi - di sini kami akan memiliki TelegramBots-Spring-Boot-Starter dan Telegram API yang telah disebutkan di atas : Membuat bot telegram menggunakan Spring Boot - 1Pustaka TelegramBots-Spring-Boot-Starter mencakup Spring Boot dan Telegram API. Menggunakannya memungkinkan kita untuk mendeklarasikan bot dalam kode kita dengan cara yang cukup sederhana, dan Spring sendiri akan membuat Bean dan mengaktifkan bot tersebut. Jika Anda tertarik dengan apa yang terjadi saat ini, lihat sumber perpustakaan (di lingkungan pengembangan atau di Github ). Kami juga menambahkan parameter kompilasi: Membuat bot telegram menggunakan Spring Boot - 2 Jangan lupa untuk memperbarui semua dependensi setelah mengisi pom! Mari buat dua kelas - Aplikasi dan Bot, serta file application.yaml di folder sumber daya. Struktur proyek saya terlihat seperti ini: Membuat bot telegram menggunakan Spring Boot - 3Pada tahap ini, mari tambahkan kredensial bot kita ke application.yaml:
bot:
  name: JavaRushTelegramBot
  token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
Notasi hierarki memungkinkan kita menghindari pengulangan (bot.name, bot.token) dan meningkatkan keterbacaan. Jika Anda belum membuat bot, Anda dapat membuatnya dengan mengikuti petunjuk resmi . Jika Anda tidak ingin menampilkan kredensial bot di application.yaml (yang benar), gunakan variabel lingkungan saat menerapkan:
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 Aplikasi:
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 kita melakukan semuanya dengan benar, maka kita dapat menjalankan main dan menyapa bot kita. Membuat bot telegram menggunakan Spring Boot - 4Siap! Kami telah berhasil menulis dan meluncurkan bot telegram yang menyapa setiap pesan masuk. Jika artikel ini bermanfaat bagi Anda, terima kasih yang terbaik adalah jika Anda melihat repositori saya dan meninggalkan bintang. Di sana Anda juga akan menemukan bot telegram versi saya, yang memiliki banyak fitur menarik:
  • menyimpan pengguna dalam database Postgres;
  • otorisasi akses ke perintah berdasarkan peran pengguna;
  • penggunaan anotasi khusus @BotCommand dan @RequiredRoles untuk membuat penangan pesan dan memeriksa hak pengguna;
  • dukungan untuk membuat jadwal notifikasi.
Jika salah satu fungsi ini menarik minat Anda, tulis di komentar, dan saya akan mencoba menjawab atau menulis artikel mendetail tentang cara membuatnya kembali. PS Ini adalah artikel pertama saya tentang JavaRush, dan saya ingin menyelami belantara Spring JPA dan anotasi @Scheduled, tapi pertama-tama saya pikir akan bermanfaat untuk menulis panduan ini tentang cara membuat bot secara umum menggunakan Spring Boot. Beberapa artikel telah ditulis tentang bot, tetapi pencarian tidak menemukan panduan seperti itu, jadi saya memutuskan untuk mengisi ceruk ini :) Saya juga ingin menyebutkan Miroha - terima kasih atas ide UpdateHandlers, saya mencurinya untuk diriku sendiri :) BAGIAN 2 BAGIAN 3
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION