JavaRush /Блоги Java /Random-TG /Эҷоди боти телеграмма бо истифода аз Spring Boot
Whiskels
Сатҳи
Москва

Эҷоди боти телеграмма бо истифода аз Spring Boot

Дар гурӯҳ нашр шудааст
Салом ба ҳама! Дар баъзе лаҳзаҳои таҳсил шумо мехоҳед, ки аз ҳалли мушкилот ба эҷоди лоиҳаҳои воқеӣ, ки асоси портфели шуморо ташкил медиҳанд, гузаред. Вақте ки ман таҷрибаомӯзии худро оғоз кардам (ки ман онро ба ҳама тавсия медиҳам), ман пешниҳоди навиштани боти телеграммаро ҳамчун фрилансер гирифтам. Аз сабаби дониши ками худ, ман як боти хеле содда навиштам ( охирин супориш пеш аз муҳоҷират ба Баҳор ), ки дорои се ришта буд:
  • риштаи қабули паём;
  • ирсоли паём;
  • риштаи банақшагирии рӯйдодҳо (он паёмҳои банақшагирифташударо тафтиш кард ва маълумоти кэшшударо аз JSON навсозӣ кард).
Ҳангоми навиштани ин функсия, ман ба ин мақола такя кардам . Ҳама чиз хеле хуб кор кард, аммо ҳар қадаре ки ман ба Баҳор амиқтар ғарқ шавам, ҳамон қадар бештар мехостам ҳама чизро ислоҳ кунам, то ҳамоҳангии барномаро коҳиш диҳам ва сифати codeро беҳтар созам. SonarLint (плагин барои ба таври худкор санҷидани сифати code) кӯшиш мекард, ки маро бовар кунонад, ки ҳалқаҳои беохир дар ҳоле ки он қадар хуб нест. Дар баъзе мавридҳо ман тасмим гирифтам ва ҳама чизро аз нав навиштам ва ҳоло мехоҳам дониши дар ҷараёни рефакторинг гирифтаамро бо шумо мубодила кунам. Биёед аз асосҳо ва мушаххастар - бо TelegramBots-Spring-Boot-Starter оғоз кунем Пас, биёед! Биёед бот созем, ки дар ҷавоб ба ҳама паём салом гӯяд. Аввалан, мо бояд як лоиҳаи нави Maven эҷод кунем. Биёед ба pom.xml вобастагии заруриро илова кунем. Ба хосиятҳо versionҳои Java ва TelegramBots-Spring-Boot-Starter илова кунед. Ва мо вобастагиҳоро ба қайд мегирем - дар ин ҷо мо TelegramBots-Spring-Boot-Starter ва Telegram API-и дар боло зикршударо хоҳем дошт : Эҷоди боти телеграмма бо истифода аз Spring Boot - 1Китобхонаи TelegramBots-Spring-Boot-Starter Spring Boot ва Telegram API-ро дар бар мегирад. Истифодаи он ба мо имкон медиҳад, ки ботро дар codeи худ ба таври оддӣ эълон кунем ва худи Spring Bean-ро эҷод мекунад ва ботро фаъол мекунад. Агар шумо ба он таваҷҷӯҳ дошта бошед, ки дар айни замон чӣ рӯй дода истодааст, пас ба манбаъҳои китобхона нигаред (дар муҳити рушд ё дар Github ). Мо инчунин параметрҳои компиляцияро илова мекунем: Эҷоди боти телеграмма бо истифода аз Spring Boot - 2 Фаромӯш накунед, ки пас аз пур кардани пом ҳама вобастагӣ навсозӣ кунед! Биёед ду синф эҷод кунем - Барнома ва Бот, инчунин файли application.yaml дар ҷузвдони захираҳо. Сохтори лоиҳаи ман чунин аст: Эҷоди боти телеграмма бо истифода аз Spring Boot - 3Дар ин марҳила, биёед эътимодномаи боти худро ба application.yaml илова кунем:
bot:
  name: JavaRushTelegramBot
  token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
Нишони иерархӣ ба мо имкон медиҳад, ки такрорро пешгирӣ кунем (bot.name, bot.token) ва хонданро беҳтар кунем. Агар шумо то ҳол бот эҷод накарда бошед, шумо метавонед онро бо риояи дастурҳои расмӣ эҷод кунед . Агар шумо нахоҳед, ки маълумоти эътимоднокии ботро дар application.yaml нишон диҳед (ки дуруст аст), ҳангоми ҷойгиркунӣ тағирёбандаҳои муҳити зистро истифода баред:
bot:
  name: ${BOT_NAME}
  token: ${BOT_TOKEN}
Пур кардани синфи бот:
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;
    }
}
Синфи Барномаҳоро пур кунед:
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);
    }
}
Агар мо ҳама чизро дуруст иҷро кунем, мо метавонем main -ро иҷро кунем ва ба боти худ салом гӯем. Эҷоди боти телеграмма бо истифода аз Spring Boot - 4Тайёр! Мо боти телеграммаро бомуваффақият навиштем ва ба кор андохтаем, ки ба ҳар як паёми воридотӣ салом мегӯяд. Агар ин мақола барои шумо муфид бошад, пас беҳтарин ташаккур ин аст, ки шумо ба анбори ман нигоҳ кунед ва ситораро тарк кунед. Дар он ҷо шумо инчунин versionи боти телеграммаи маро пайдо хоҳед кард, ки дорои бисёр хусусиятҳои ҷолиб аст:
  • нигоҳ доштани корбарон дар пойгоҳи додаҳои Postgres;
  • иҷозати дастрасӣ ба фармонҳо дар асоси нақшҳои корбар;
  • истифодаи эзоҳҳои фармоишии @BotCommand ва @RequiredRoles барои эҷоди коркардкунандагони паёмҳо ва санҷиши ҳуқуқи корбарон;
  • дастгирии ташкor ҷадвали огоҳинома.
Агар яке аз ин функсияҳо ба шумо таваҷҷӯҳ кунад, дар шарҳҳо нависед ва ман кӯшиш мекунам, ки ҷавоб диҳам ё мақолаи муфассалро дар бораи чӣ гуна аз нав сохтани он нависед. PS Ин мақолаи аввалини ман дар бораи JavaRush аст ва ман мехостам ба ваҳшӣҳои JPA Spring ва @Scheduled тавзеҳҳо ғарқ шавам, аммо аввал фикр кардам, ки ин дастурро дар бораи чӣ гуна сохтани бот бо истифода аз Spring Boot навиштан лозим аст. Якчанд мақолаҳо аллакай дар ботҳо навишта шудаанд, аммо ҷустуҷӯ чунин дастурро ба вуҷуд наовард, бинобар ин ман қарор додам, ки ин чароғро пур кунам :) Ман мехоҳам Мирохаро низ қайд кунам - ташаккур барои идеяи UpdateHandlers, ман онро барои худ дуздидам :) КИСМИ 2 КИСМИ 3
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION