سلام به همه! در مقطعی از تحصیلات، شما می خواهید از حل مشکلات به ایجاد پروژه های واقعی که پایه و اساس پورتفولیوی شما را تشکیل می دهند، حرکت کنید. وقتی کارآموزی ام را شروع کردم (که به همه توصیه می کنم)، پیشنهاد نوشتن یک ربات تلگرام به عنوان فریلنسر دریافت کردم. به دلیل دانش کمی که داشتم، یک ربات نسبتا ساده نوشتم ( آخرین کامیت قبل از مهاجرت به Spring ) که شامل سه رشته بود:
و ما وابستگی ها را ثبت می کنیم - در اینجا ما TelegramBots-Spring-Boot-Starter و Telegram API را که قبلاً ذکر شد خواهیم داشت : کتابخانه TelegramBots-Spring-Boot-Starter شامل Spring Boot و Telegram API است. استفاده از آن به ما این امکان را می دهد که یک ربات را در کد خود به روشی نسبتاً ساده اعلام کنیم و خود Spring Bean را ایجاد کرده و ربات را فعال می کند. اگر به آنچه در این لحظه در زیر کاپوت می گذرد علاقه مند هستید، به منابع کتابخانه (در محیط توسعه یا در Github ) نگاه کنید. ما همچنین پارامترهای کامپایل را اضافه می کنیم: فراموش نکنید که همه وابستگی ها را پس از پر کردن pom به روز کنید! بیایید دو کلاس ایجاد کنیم - 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}
پر کردن کلاس ربات:
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;
}
}
کلاس 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);
}
}
اگر همه چیز را به درستی انجام دادیم، میتوانیم main را اجرا کنیم و به ربات خود سلام کنیم. آماده! ما با موفقیت یک ربات تلگرام نوشته و راه اندازی کرده ایم که به هر پیام دریافتی سلام می دهد. اگر این مقاله برای شما مفید بود، بهترین تشکر این است که به مخزن من نگاه کنید و یک ستاره بگذارید. در آنجا نسخه من از ربات تلگرام را نیز خواهید یافت که ویژگی های جالب زیادی دارد:
- ذخیره کاربران در پایگاه داده Postgres.
- مجوز دسترسی به دستورات بر اساس نقش های کاربر؛
- استفاده از حاشیه نویسی سفارشی @BotCommand و @RequiredRoles برای ایجاد کنترل کننده پیام و بررسی حقوق کاربر.
- پشتیبانی از ایجاد یک برنامه اعلانات
GO TO FULL VERSION