JavaRush /Java Blog /Random-TL /Paglikha ng telegram bot gamit ang Spring Boot
Whiskels
Antas
Москва

Paglikha ng telegram bot gamit ang Spring Boot

Nai-publish sa grupo
Kamusta kayong lahat! Sa ilang mga punto sa iyong pag-aaral, gusto mong lumipat mula sa paglutas ng mga problema sa paglikha ng mga tunay na proyekto na magiging batayan ng iyong portfolio. Noong sinimulan ko ang aking internship (na lubos kong inirerekomenda sa lahat), nakatanggap ako ng alok na magsulat ng telegram bot bilang isang freelancer. Dahil sa kaunting kaalaman ko, nagsulat ako ng medyo simpleng bot ( ang huling commit bago lumipat sa Spring ), na naglalaman ng tatlong thread:
  • thread ng pagtanggap ng mensahe;
  • thread ng pagpapadala ng mensahe;
  • thread ng pag-iiskedyul ng kaganapan (nag-check ito para sa mga naka-iskedyul na mensahe at na-update ang naka-cache na data mula sa JSON).
Kapag isinusulat ang pagpapaandar na ito, lubos akong umasa sa artikulong ito . Ang lahat ay gumana nang maayos, ngunit ang mas malalim na pagsisid ko sa Spring, mas gusto kong refactor ang lahat upang mabawasan ang pagkakaugnay ng programa at mapabuti ang kalidad ng code. Ang SonarLint (isang plugin para sa awtomatikong pagsuri sa kalidad ng code) ay patuloy na sinusubukang kumbinsihin ako na hindi napakahusay na magkaroon ng walang katapusang habang umiikot. Sa isang punto, nagpasya ako at muling isinulat ang lahat, at ngayon gusto kong ibahagi sa iyo ang kaalaman na nakuha ko sa proseso ng refactoring. Magsimula tayo sa mga pangunahing kaalaman, at mas partikular - sa TelegramBots-Spring-Boot-Starter Kaya, tayo na! Gumawa tayo ng bot na babatiin bilang tugon sa anumang mensahe. Una, kailangan nating lumikha ng bagong proyekto ng Maven. Idagdag natin ang mga kinakailangang dependency sa pom.xml. Magdagdag ng mga bersyon ng Java at TelegramBots-Spring-Boot-Starter sa mga property. At nagrerehistro kami ng mga dependency - dito magkakaroon kami ng nabanggit na sa itaas TelegramBots-Spring-Boot-Starter at Telegram API : Paglikha ng telegram bot gamit ang Spring Boot - 1Kasama sa TelegramBots-Spring-Boot-Starter library ang Spring Boot at Telegram API. Ang paggamit nito ay nagpapahintulot sa amin na magdeklara ng bot sa aming code sa medyo simpleng paraan, at ang Spring mismo ang gagawa ng Bean at i-activate ang bot. Kung interesado ka sa kung ano ang nangyayari sa ilalim ng hood sa sandaling ito, pagkatapos ay tingnan ang mga mapagkukunan ng library (sa kapaligiran ng pag-unlad o sa Github ). Nagdaragdag din kami ng mga parameter ng compilation: Paglikha ng telegram bot gamit ang Spring Boot - 2 Huwag kalimutang i-update ang lahat ng dependencies pagkatapos punan ang pom! Gumawa tayo ng dalawang klase - App at Bot, pati na rin ang application.yaml file sa folder ng resources. Ang istraktura ng aking proyekto ay ganito: Paglikha ng telegram bot gamit ang Spring Boot - 3Sa yugtong ito, idagdag natin ang mga kredensyal ng ating bot sa application.yaml:
bot:
  name: JavaRushTelegramBot
  token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
Nagbibigay-daan sa amin ang hierarchical notation na maiwasan ang pag-uulit (bot.name, bot.token) at pagbutihin ang pagiging madaling mabasa. Kung hindi ka pa nakakagawa ng bot, maaari kang gumawa ng isa sa pamamagitan ng pagsunod sa mga opisyal na tagubilin . Kung ayaw mong ipakita ang mga kredensyal ng bot sa application.yaml (na tama), gumamit ng mga variable ng kapaligiran kapag nagde-deploy:
bot:
  name: ${BOT_NAME}
  token: ${BOT_TOKEN}
Pagpuno sa klase ng 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;
    }
}
Punan ang klase ng App:
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);
    }
}
Kung ginawa namin ang lahat ng tama, maaari naming patakbuhin ang main at kumusta sa aming bot. Paglikha ng telegram bot gamit ang Spring Boot - 4handa na! Matagumpay naming naisulat at nailunsad ang isang telegram bot na nagsasabing kumusta sa bawat papasok na mensahe. Kung ang artikulong ito ay kapaki-pakinabang sa iyo, kung gayon ang pinakamahusay na salamat ay kung titingnan mo ang aking repositoryo at mag-iiwan ng bituin. Doon ay makikita mo rin ang aking bersyon ng telegram bot, na mayroong maraming kawili-wiling mga tampok:
  • pag-iimbak ng mga user sa isang database ng Postgres;
  • awtorisasyon ng pag-access sa mga command batay sa mga tungkulin ng user;
  • paggamit ng mga custom na anotasyon @BotCommand at @RequiredRoles upang lumikha ng mga humahawak ng mensahe at suriin ang mga karapatan ng user;
  • suporta para sa paggawa ng iskedyul ng notification.
Kung ang alinman sa pag-andar na ito ay interesado sa iyo, sumulat sa mga komento, at susubukan kong sagutin o magsulat ng isang detalyadong artikulo kung paano ito muling likhain. PS Ito ang aking unang artikulo sa JavaRush, at gusto kong sumisid sa mga wild ng Spring JPA at @Scheduled annotation, ngunit una kong naisip na sulit na isulat ang gabay na ito kung paano karaniwang bumuo ng bot gamit ang Spring Boot. Maraming mga artikulo ang naisulat na sa mga bot, ngunit ang paghahanap ay hindi naging isang gabay, kaya nagpasya akong punan ang angkop na lugar na ito :) Gusto ko ring banggitin si Miroha - salamat sa ideya ng UpdateHandlers, ninakaw ko ito para sa sarili ko :) PART 2 PART 3
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION