Баарына салам! Окуу учурунда сиз көйгөйлөрдү чечүүдөн портфолиоңуздун негизин түзө турган реалдуу долбоорлорду түзүүгө өтүүнү каалайсыз. Мен стажировкамды баштаганда (мен муну баарына сунуш кылам), мен фрилансер катары телеграмма ботун жазуу сунушун алдым. Аз бorмимдин аркасында мен абдан жөнөкөй бот жаздым ( Жазга көчүү алдындагы акыркы милдеттенме ), анда үч жип бар:
жана Telegram API болот : TelegramBots-Spring-Boot-Starter китепканасында Spring Boot жана Telegram API камтылган. Аны колдонуу биздин codeубуздагы ботту абдан жөнөкөй жол менен жарыялоого мүмкүндүк берет, ал эми Spring өзү Bean түзүп, ботту иштетет. Эгерде сизди ушул тапта капоттун астында эмне болуп жатканы кызыктырса, анда китепкана булактарын караңыз (иштеп чыгуу чөйрөсүндө же Github ) . Ошондой эле компиляциянын параметрлерин кошобуз: Помду толтургандан кийин бардык көз карандылыктарды жаңыртууну унутпаңыз! Келгиле, эки класс түзөлү - App жана Bot, ошондой эле ресурстар папкасында application.yaml файлы. Долбоорумдун түзүмү төмөнкүдөй көрүнөт: Бул этапта биздин боттун ишеним грамоталарын application.yaml дарегине кошолу:
- билдирүүлөрдү кабыл алуу жип;
- билдирүү жөнөтүү жип;
- окуяны пландаштыруу жип (ал пландаштырылган билдирүүлөрдү текшерип, JSONден кэштелген маалыматтарды жаңыртты).
bot:
name: JavaRushTelegramBot
token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
Иерархиялык белгилер кайталануудан качууга (bot.name, bot.token) жана окууну жакшыртууга мүмкүндүк берет. Эгер сиз бот түзө элек болсоңуз, анда расмий нускамаларды аткаруу менен бот түзө аласыз . Эгер сиз боттун эсептик дайындарын application.yaml ичинде көрсөткүңүз келбесе (бул туура), жайылтууда чөйрө өзгөрмөлөрүн колдонуңуз:
bot:
name: ${BOT_NAME}
token: ${BOT_TOKEN}
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;
}
}
Колдонмо классын толтуруңуз:
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);
}
}
Эгерде биз бардыгын туура кылган болсок, анда биз негизги иштетип, ботубузга салам айта алабыз. Даяр! Биз ар бир келген билдирүүгө салам айткан телеграмма ботун ийгorктүү жазып, ишке киргиздик. Бул макала сиз үчүн пайдалуу болсо, анда менин репозиторийимди карап , жылдыз калтырсаңыз, эң сонун рахмат. Ал жерден сиз менин телеграмма боттун versionсын таба аласыз, анын көптөгөн кызыктуу өзгөчөлүктөрү бар:
- колдонуучуларды Postgres маалымат базасында сактоо;
- колдонуучунун ролдорунун негизинде буйруктарга кирүүгө уруксат берүү;
- билдирүү иштеткичтерин түзүү жана колдонуучунун укуктарын текшерүү үчүн @BotCommand жана @RequiredRoles ыңгайлаштырылган annotationларын колдонуу;
- кабарлоо тартибин түзүү үчүн колдоо.
GO TO FULL VERSION