Салом ба ҳама! Дар баъзе лаҳзаҳои таҳсил шумо мехоҳед, ки аз ҳалли мушкилот ба эҷоди лоиҳаҳои воқеӣ, ки асоси портфели шуморо ташкил медиҳанд, гузаред. Вақте ки ман таҷрибаомӯзии худро оғоз кардам (ки ман онро ба ҳама тавсия медиҳам), ман пешниҳоди навиштани боти телеграммаро ҳамчун фрилансер гирифтам. Аз сабаби дониши ками худ, ман як боти хеле содда навиштам ( охирин супориш пеш аз муҳоҷират ба Баҳор ), ки дорои се ришта буд:
Ва мо вобастагиҳоро ба қайд мегирем - дар ин ҷо мо TelegramBots-Spring-Boot-Starter ва Telegram API-и дар боло зикршударо хоҳем дошт : Китобхонаи TelegramBots-Spring-Boot-Starter Spring Boot ва Telegram API-ро дар бар мегирад. Истифодаи он ба мо имкон медиҳад, ки ботро дар codeи худ ба таври оддӣ эълон кунем ва худи Spring Bean-ро эҷод мекунад ва ботро фаъол мекунад. Агар шумо ба он таваҷҷӯҳ дошта бошед, ки дар айни замон чӣ рӯй дода истодааст, пас ба манбаъҳои китобхона нигаред (дар муҳити рушд ё дар Github ). Мо инчунин параметрҳои компиляцияро илова мекунем: Фаромӯш накунед, ки пас аз пур кардани пом ҳама вобастагӣ навсозӣ кунед! Биёед ду синф эҷод кунем - Барнома ва Бот, инчунин файли application.yaml дар ҷузвдони захираҳо. Сохтори лоиҳаи ман чунин аст: Дар ин марҳила, биёед эътимодномаи боти худро ба application.yaml илова кунем:
- риштаи қабули паём;
- ирсоли паём;
- риштаи банақшагирии рӯйдодҳо (он паёмҳои банақшагирифташударо тафтиш кард ва маълумоти кэшшударо аз JSON навсозӣ кард).
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 -ро иҷро кунем ва ба боти худ салом гӯем. Тайёр! Мо боти телеграммаро бомуваффақият навиштем ва ба кор андохтаем, ки ба ҳар як паёми воридотӣ салом мегӯяд. Агар ин мақола барои шумо муфид бошад, пас беҳтарин ташаккур ин аст, ки шумо ба анбори ман нигоҳ кунед ва ситораро тарк кунед. Дар он ҷо шумо инчунин versionи боти телеграммаи маро пайдо хоҳед кард, ки дорои бисёр хусусиятҳои ҷолиб аст:
- нигоҳ доштани корбарон дар пойгоҳи додаҳои Postgres;
- иҷозати дастрасӣ ба фармонҳо дар асоси нақшҳои корбар;
- истифодаи эзоҳҳои фармоишии @BotCommand ва @RequiredRoles барои эҷоди коркардкунандагони паёмҳо ва санҷиши ҳуқуқи корбарон;
- дастгирии ташкor ҷадвали огоҳинома.
GO TO FULL VERSION