JavaRush /وبلاگ جاوا /Random-FA /ساخت ربات تلگرام با استفاده از Spring Boot
Whiskels
مرحله
Москва

ساخت ربات تلگرام با استفاده از Spring Boot

در گروه منتشر شد
سلام به همه! در مقطعی از تحصیلات، شما می خواهید از حل مشکلات به ایجاد پروژه های واقعی که پایه و اساس پورتفولیوی شما را تشکیل می دهند، حرکت کنید. وقتی کارآموزی ام را شروع کردم (که به همه توصیه می کنم)، پیشنهاد نوشتن یک ربات تلگرام به عنوان فریلنسر دریافت کردم. به دلیل دانش کمی که داشتم، یک ربات نسبتا ساده نوشتم ( آخرین کامیت قبل از مهاجرت به Spring ) که شامل سه رشته بود:
  • موضوع دریافت پیام؛
  • موضوع ارسال پیام؛
  • رشته زمان‌بندی رویداد (پیام‌های زمان‌بندی‌شده را بررسی می‌کرد و داده‌های کش شده را از JSON به‌روزرسانی می‌کرد).
هنگام نوشتن این قابلیت، به شدت به این مقاله اتکا کردم . همه چیز کاملاً خوب کار می کرد، اما هر چه عمیق تر به Spring می رفتم، بیشتر می خواستم همه چیز را اصلاح کنم تا انسجام برنامه را کاهش دهم و کیفیت کد را بهبود بخشم. SonarLint (افزونه ای برای بررسی خودکار کیفیت کد) مدام سعی می کرد مرا متقاعد کند که داشتن حلقه های while بی پایان خیلی خوب نیست. در مقطعی تصمیم خود را گرفتم و همه چیز را بازنویسی کردم و اکنون می‌خواهم دانشی را که در طی فرآیند بازسازی به دست آوردم با شما به اشتراک بگذارم. بیایید با اصول اولیه شروع کنیم، و به طور خاص - با 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 API است. استفاده از آن به ما این امکان را می دهد که یک ربات را در کد خود به روشی نسبتاً ساده اعلام کنیم و خود Spring Bean را ایجاد کرده و ربات را فعال می کند. اگر به آنچه در این لحظه در زیر کاپوت می گذرد علاقه مند هستید، به منابع کتابخانه (در محیط توسعه یا در Github ) نگاه کنید. ما همچنین پارامترهای کامپایل را اضافه می کنیم: ساخت ربات تلگرام با استفاده از Spring Boot - 2 فراموش نکنید که همه وابستگی ها را پس از پر کردن pom به روز کنید! بیایید دو کلاس ایجاد کنیم - 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;
    }
}
کلاس 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 را اجرا کنیم و به ربات خود سلام کنیم. ساخت ربات تلگرام با استفاده از Spring Boot - 4آماده! ما با موفقیت یک ربات تلگرام نوشته و راه اندازی کرده ایم که به هر پیام دریافتی سلام می دهد. اگر این مقاله برای شما مفید بود، بهترین تشکر این است که به مخزن من نگاه کنید و یک ستاره بگذارید. در آنجا نسخه من از ربات تلگرام را نیز خواهید یافت که ویژگی های جالب زیادی دارد:
  • ذخیره کاربران در پایگاه داده Postgres.
  • مجوز دسترسی به دستورات بر اساس نقش های کاربر؛
  • استفاده از حاشیه نویسی سفارشی @BotCommand و @RequiredRoles برای ایجاد کنترل کننده پیام و بررسی حقوق کاربر.
  • پشتیبانی از ایجاد یک برنامه اعلانات
اگر هر یک از این قابلیت ها به شما علاقه مند است، در نظرات بنویسید، و من سعی می کنم پاسخ دهم یا مقاله مفصلی در مورد نحوه ایجاد مجدد آن بنویسم. PS این اولین مقاله من در مورد JavaRush است، و می‌خواهم به حیات وحش Spring JPA و @Scheduled حاشیه‌نویسی شیرجه بزنم، اما ابتدا فکر کردم که ارزش نوشتن این راهنما در مورد نحوه ساخت کلی ربات با استفاده از Spring Boot را دارد. چندین مقاله قبلاً روی ربات ها نوشته شده است ، اما جستجو چنین راهنمایی را پیدا نکرد ، بنابراین تصمیم گرفتم این طاقچه را پر کنم :) همچنین می خواهم به Miroha اشاره کنم - با تشکر از ایده UpdateHandlers ، من آن را برای خودم :) قسمت 2 قسمت 3
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION