أهلاً بكم! في مرحلة ما من دراستك، تريد الانتقال من حل المشكلات إلى إنشاء مشاريع حقيقية تشكل أساس محفظتك الاستثمارية. عندما بدأت تدريبي (الذي أوصي به الجميع بشدة)، تلقيت عرضًا لكتابة روبوت برقية كموظف مستقل. نظرًا لقلة معرفتي، كتبت روبوتًا بسيطًا إلى حد ما ( آخر التزام قبل الانتقال إلى الربيع )، والذي يحتوي على ثلاثة سلاسل:
وTelegram API المذكورة أعلاه : تتضمن مكتبة TelegramBots-Spring-Boot-Starter واجهة برمجة تطبيقات Spring Boot وTelegram. يتيح لنا استخدامه الإعلان عن روبوت في الكود الخاص بنا بطريقة بسيطة إلى حد ما، وسيقوم 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}
ملء فئة بوت:
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);
}
}
إذا فعلنا كل شيء بشكل صحيح، فيمكننا تشغيل البرنامج الرئيسي وإلقاء التحية على الروبوت الخاص بنا. مستعد! لقد نجحنا في كتابة وإطلاق روبوت برقية يرحب بكل رسالة واردة. إذا كانت هذه المقالة مفيدة لك، فسيكون أفضل شكر لك هو أن تنظر إلى مستودعي وتترك نجمة. ستجد هناك أيضًا نسختي من برنامج telegram bot، والذي يحتوي على العديد من الميزات المثيرة للاهتمام:
- تخزين المستخدمين في قاعدة بيانات Postgres؛
- ترخيص الوصول إلى الأوامر بناءً على أدوار المستخدم؛
- استخدام التعليقات التوضيحية المخصصة @BotCommand وRequiredRoles لإنشاء معالجات الرسائل والتحقق من حقوق المستخدم؛
- دعم لإنشاء جدول الإخطار.
GO TO FULL VERSION