JavaRush /Java blogi /Random-UZ /Spring Boot yordamida telegram bot yaratish
Whiskels
Daraja
Москва

Spring Boot yordamida telegram bot yaratish

Guruhda nashr etilgan
Hammaga salom! O'qish paytida siz muammolarni hal qilishdan portfelingizning asosini tashkil etadigan haqiqiy loyihalarni yaratishga o'tmoqchisiz. Amaliyotni boshlaganimda (buni hammaga tavsiya qilaman), men frilanser sifatida telegram bot yozish taklifini oldim. Mening ozgina bilimim tufayli men juda oddiy bot yozdim ( Bahorga o'tishdan oldingi oxirgi topshiriq ), unda uchta mavzu bor edi:
  • xabarni qabul qilish oqimi;
  • xabar yuborish to'plami;
  • voqealarni rejalashtirish oqimi (u rejalashtirilgan xabarlarni tekshirdi va JSON-dan keshlangan ma'lumotlarni yangiladi).
Ushbu funktsiyani yozishda men ushbu maqolaga juda tayandim . Hammasi juda yaxshi ishladi, lekin men Bahorga qanchalik chuqurroq sho'ng'isam, dasturning uyg'unligini kamaytirish va kod sifatini yaxshilash uchun hamma narsani qayta ko'rib chiqishni xohlardim. SonarLint (kod sifatini avtomatik tekshirish uchun plagin) meni cheksiz while looplariga ega bo'lish unchalik yaxshi emasligiga ishontirishga harakat qildi. Bir payt men bir qarorga keldim va hamma narsani qayta yozdim va endi men refaktoring jarayonida olgan bilimlarimni siz bilan baham ko'rmoqchiman. Keling, asosiy narsalardan boshlaylik, aniqrog'i - TelegramBots-Spring-Boot-Starter bilan Demak, ketaylik! Keling, har qanday xabarga javoban salom beradigan bot yarataylik. Birinchidan, biz yangi Maven loyihasini yaratishimiz kerak. Pom.xml ga kerakli bog'liqliklarni qo'shamiz. Xususiyatlarga Java va TelegramBots-Spring-Boot-Starter versiyalarini qo'shing. Va biz bog'liqliklarni ro'yxatdan o'tkazamiz - bu erda biz yuqorida aytib o'tilgan TelegramBots-Spring-Boot-Starter va Telegram API-ga ega bo'lamiz : Spring Boot yordamida telegram bot yaratish - 1TelegramBots-Spring-Boot-Starter kutubxonasiga Spring Boot va Telegram API kiradi. Undan foydalanish bizga kodimizdagi botni juda oddiy tarzda e'lon qilish imkonini beradi va Springning o'zi Beanni yaratadi va botni faollashtiradi. Agar siz hozir kaput ostida nima sodir bo'layotganiga qiziqsangiz, kutubxona manbalariga qarang (ishlab chiqish muhitida yoki Github -da ). Biz kompilyatsiya parametrlarini ham qo'shamiz: Spring Boot yordamida telegram bot yaratish - 2 Pomni to'ldirgandan so'ng barcha bog'liqliklarni yangilashni unutmang! Keling, ikkita sinf yarataylik - App va Bot, shuningdek, resurslar papkasida application.yaml fayli. Loyihamning tuzilishi quyidagicha ko'rinadi: Spring Boot yordamida telegram bot yaratish - 3Ushbu bosqichda botimizning hisob ma'lumotlarini application.yaml ga qo'shamiz:
bot:
  name: JavaRushTelegramBot
  token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
Ierarxik belgilar takrorlanishdan (bot.name, bot.token) qochish va o'qishni yaxshilash imkonini beradi. Agar siz hali bot yaratmagan bo'lsangiz, rasmiy ko'rsatmalarga rioya qilib, uni yaratishingiz mumkin . Agar siz botning hisobga olish ma'lumotlarini application.yaml da ko'rsatishni istamasangiz (bu to'g'ri), joylashtirishda muhit o'zgaruvchilaridan foydalaning:
bot:
  name: ${BOT_NAME}
  token: ${BOT_TOKEN}
Bot sinfini to'ldirish:
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;
    }
}
Ilovalar sinfini to'ldiring:
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);
    }
}
Agar biz hamma narsani to'g'ri bajargan bo'lsak, biz asosiy ishga tushirishimiz va botimizga salom aytishimiz mumkin. Spring Boot yordamida telegram bot yaratish - 4Tayyor! Biz har bir kiruvchi xabarga salom aytadigan telegram botni muvaffaqiyatli yozdik va ishga tushirdik. Agar ushbu maqola siz uchun foydali bo'lsa, mening omborimga qarasangiz va yulduzcha qoldirsangiz, eng yaxshi rahmat. U yerda siz telegram botning ko‘plab qiziqarli funksiyalariga ega mening versiyamni ham topasiz:
  • foydalanuvchilarni Postgres ma'lumotlar bazasida saqlash;
  • foydalanuvchi rollari asosida buyruqlarga kirishni avtorizatsiya qilish;
  • xabar ishlov beruvchilarini yaratish va foydalanuvchi huquqlarini tekshirish uchun @BotCommand va @RequiredRoles maxsus izohlaridan foydalanish;
  • bildirishnomalar jadvalini yaratish uchun yordam.
Agar ushbu funksiyalardan biri sizni qiziqtirsa, sharhlarda yozing, men javob berishga yoki uni qanday qayta yaratish haqida batafsil maqola yozishga harakat qilaman. PS Bu mening JavaRush haqidagi birinchi maqolam va men Spring JPA va @Scheduled annotatsiyalarining yovvoyi tabiatiga sho‘ng‘ishni istardim, lekin birinchi navbatda Spring Boot yordamida botni qanday yaratish haqida ushbu qo‘llanmani yozishga arziydi deb o‘yladim. Botlarda allaqachon bir nechta maqolalar yozilgan, ammo qidiruvda bunday qo'llanma topilmadi, shuning uchun men ushbu bo'shliqni to'ldirishga qaror qildim :) Men Mirohani ham eslatib o'tmoqchiman - UpdateHandlers g'oyasi uchun rahmat, men uni o'g'irlab oldim o'zim :) 2-QISM 3-QISM
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION