JavaRush /בלוג Java /Random-HE /יצירת בוט טלגרם באמצעות Spring Boot
Whiskels
רָמָה
Москва

יצירת בוט טלגרם באמצעות Spring Boot

פורסם בקבוצה
שלום לכולם! בשלב מסוים בלימודים, אתה רוצה לעבור מפתרון בעיות ליצירת פרויקטים אמיתיים שיהוו את הבסיס לתיק העבודות שלך. כשהתחלתי את ההתמחות שלי (שאני ממליץ בחום לכולם), קיבלתי הצעה לכתוב בוט טלגרם כפרילנסר. בגלל הידע המועט שלי, כתבתי בוט פשוט למדי ( המחוי האחרון לפני המעבר ל-Spring ), שהכיל שלושה שרשורים:
  • שרשור קבלת הודעה;
  • שרשור שליחת הודעה;
  • שרשור תזמון אירועים (הוא בדק אם יש הודעות מתוזמנות ונתוני מטמון מעודכנים מ-JSON).
כשכתבתי את הפונקציונליות הזו, הסתמכתי מאוד על מאמר זה . הכל עבד די טוב, אבל ככל שצללתי עמוק יותר לתוך Spring, כך רציתי לשחזר הכל על מנת לצמצם את הקוהרנטיות של התוכנית ולשפר את איכות הקוד. SonarLint (תוסף לבדיקת איכות קוד אוטומטית) כל הזמן ניסה לשכנע אותי שזה לא טוב שיש לולאות תוך אינסופיות. בשלב מסוים, החלטתי וכתבתי הכל מחדש, ועכשיו אני רוצה לחלוק איתך את הידע שצברתי במהלך תהליך השחזור. בואו נתחיל עם היסודות, וליתר דיוק - עם TelegramBots-Spring-Boot-Starter אז, בואו נצא! בואו ניצור בוט שיגיד שלום בתגובה לכל הודעה. ראשית, עלינו ליצור פרויקט חדש של מייבן. בואו נוסיף את התלות הדרושות ל-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 אל תשכח לעדכן את כל התלות לאחר מילוי הפום! בואו ניצור שתי מחלקות - 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);
    }
}
אם עשינו הכל נכון, נוכל להפעיל את ה-main ולהגיד שלום לבוט שלנו. יצירת בוט טלגרם באמצעות Spring Boot - 4מוּכָן! כתבנו והשקנו בהצלחה בוט טלגרם שאומר שלום לכל הודעה נכנסת. אם מאמר זה היה שימושי עבורך, התודה הטובה ביותר תהיה אם תסתכל במאגר שלי ותשאיר כוכב. שם תמצאו גם את הגרסה שלי לבוט הטלגרם, שיש לו הרבה תכונות מעניינות:
  • אחסון משתמשים במסד נתונים Postgres;
  • אישור גישה לפקודות על סמך תפקידי משתמש;
  • שימוש בהערות מותאמות אישית @BotCommand ו-@RequiredRoles ליצירת מטפלי הודעות ולבדיקת זכויות משתמש;
  • תמיכה ביצירת לוח זמנים להתראות.
אם כל הפונקציונליות הזו מעניינת אותך, כתוב בתגובות, ואני אנסה לענות או לכתוב מאמר מפורט כיצד ליצור אותו מחדש. נ.ב. זה המאמר הראשון שלי על JavaRush, ואני רוצה לצלול לטבע הפראי של ספרינג JPA ו-@Scheduled הערות, אבל קודם כל חשבתי שכדאי לכתוב את המדריך הזה על איך לבנות בוט בדרך כלל באמצעות Spring Boot. כבר נכתבו כמה מאמרים על בוטים, אבל החיפוש לא העלה מדריך כזה, אז החלטתי למלא את הנישה הזו :) אני רוצה גם להזכיר את מירוחה - תודה על הרעיון של UpdateHandlers, גנבתי אותו בשביל עצמי :) חלק 2 חלק 3
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION