JavaRush /مدونة جافا /Random-AR /إنشاء بوت برقية باستخدام Spring Boot
Whiskels
مستوى
Москва

إنشاء بوت برقية باستخدام Spring Boot

نشرت في المجموعة
أهلاً بكم! في مرحلة ما من دراستك، تريد الانتقال من حل المشكلات إلى إنشاء مشاريع حقيقية تشكل أساس محفظتك الاستثمارية. عندما بدأت تدريبي (الذي أوصي به الجميع بشدة)، تلقيت عرضًا لكتابة روبوت برقية كموظف مستقل. نظرًا لقلة معرفتي، كتبت روبوتًا بسيطًا إلى حد ما ( آخر التزام قبل الانتقال إلى الربيع )، والذي يحتوي على ثلاثة سلاسل:
  • موضوع استقبال الرسائل؛
  • موضوع إرسال الرسائل؛
  • مؤشر ترابط جدولة الأحداث (تم التحقق من الرسائل المجدولة والبيانات المخزنة مؤقتًا المحدثة من JSON).
عند كتابة هذه الوظيفة، اعتمدت بشكل كبير على هذه المقالة . كان كل شيء يعمل بشكل جيد، ولكن كلما تعمقت في الربيع، كلما أردت إعادة هيكلة كل شيء من أجل تقليل تماسك البرنامج وتحسين جودة الكود. ظل SonarLint (وهو مكون إضافي للتحقق من جودة الكود تلقائيًا) يحاول إقناعي بأنه ليس من الجيد أن يكون لديك حلقات لا نهاية لها. في مرحلة ما، اتخذت قراري وأعدت كتابة كل شيء، والآن أريد أن أشارككم المعرفة التي اكتسبتها أثناء عملية إعادة البناء. لنبدأ بالأساسيات، وبشكل أكثر تحديدًا - باستخدام TelegramBots-Spring-Boot-Starter ، فلنبدأ! لنقم بإنشاء روبوت يلقي التحية ردًا على أي رسالة. أولاً، نحتاج إلى إنشاء مشروع Maven جديد. دعونا نضيف التبعيات اللازمة إلى pom.xml. أضف إصدارات Java وTelegramBots-Spring-Boot-Starter إلى الخصائص. ونسجل التبعيات - هنا سيكون لدينا TelegramBots-Spring-Boot-Starter وTelegram API المذكورة أعلاه : إنشاء بوت برقية باستخدام Spring Boot - 1تتضمن مكتبة TelegramBots-Spring-Boot-Starter واجهة برمجة تطبيقات Spring Boot وTelegram. يتيح لنا استخدامه الإعلان عن روبوت في الكود الخاص بنا بطريقة بسيطة إلى حد ما، وسيقوم Spring نفسه بإنشاء Bean وتنشيط الروبوت. إذا كنت مهتمًا بما يحدث تحت الغطاء في هذه اللحظة، فاطلع على مصادر المكتبة (في بيئة التطوير أو على Github ). نضيف أيضًا معلمات التجميع: إنشاء بوت برقية باستخدام Spring Boot - 2 لا تنس تحديث جميع التبعيات بعد ملء بوم! لنقم بإنشاء فئتين - App وBot، بالإضافة إلى ملف application.yaml في مجلد الموارد. يبدو هيكل مشروعي كما يلي: إنشاء بوت برقية باستخدام Spring Boot - 3في هذه المرحلة، دعنا نضيف بيانات اعتماد الروبوت الخاص بنا إلى application.yaml:
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);
    }
}
إذا فعلنا كل شيء بشكل صحيح، فيمكننا تشغيل البرنامج الرئيسي وإلقاء التحية على الروبوت الخاص بنا. إنشاء بوت برقية باستخدام Spring Boot - 4مستعد! لقد نجحنا في كتابة وإطلاق روبوت برقية يرحب بكل رسالة واردة. إذا كانت هذه المقالة مفيدة لك، فسيكون أفضل شكر لك هو أن تنظر إلى مستودعي وتترك نجمة. ستجد هناك أيضًا نسختي من برنامج telegram bot، والذي يحتوي على العديد من الميزات المثيرة للاهتمام:
  • تخزين المستخدمين في قاعدة بيانات Postgres؛
  • ترخيص الوصول إلى الأوامر بناءً على أدوار المستخدم؛
  • استخدام التعليقات التوضيحية المخصصة @BotCommand وRequiredRoles لإنشاء معالجات الرسائل والتحقق من حقوق المستخدم؛
  • دعم لإنشاء جدول الإخطار.
إذا كانت أي من هذه الوظائف تثير اهتمامك، فاكتب في التعليقات، وسأحاول إما الإجابة عليها أو كتابة مقالة مفصلة حول كيفية إعادة إنشائها. ملاحظة: هذه هي مقالتي الأولى عن JavaRush، وأود أن أغوص في براري Spring JPA والتعليقات التوضيحيةScheduled، لكنني اعتقدت أولاً أنه سيكون من المفيد كتابة هذا الدليل حول كيفية إنشاء روبوت بشكل عام باستخدام Spring Boot. تمت كتابة العديد من المقالات بالفعل على الروبوتات، لكن البحث لم يظهر مثل هذا الدليل، لذلك قررت ملء هذا المكان :) أود أيضًا أن أذكر Miroha - شكرًا على فكرة UpdateHandlers، لقد سرقتها من أجل نفسي :) الجزء 2 الجزء 3
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION