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:
va Telegram API-ga ega bo'lamiz : TelegramBots-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: 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: Ushbu bosqichda botimizning hisob ma'lumotlarini application.yaml ga qo'shamiz:
- xabarni qabul qilish oqimi;
- xabar yuborish to'plami;
- voqealarni rejalashtirish oqimi (u rejalashtirilgan xabarlarni tekshirdi va JSON-dan keshlangan ma'lumotlarni yangiladi).
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. Tayyor! 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.
GO TO FULL VERSION