שלום לכולם! בשלב מסוים בלימודים, אתה רוצה לעבור מפתרון בעיות ליצירת פרויקטים אמיתיים שיהוו את הבסיס לתיק העבודות שלך. כשהתחלתי את ההתמחות שלי (שאני ממליץ בחום לכולם), קיבלתי הצעה לכתוב בוט טלגרם כפרילנסר. בגלל הידע המועט שלי, כתבתי בוט פשוט למדי ( המחוי האחרון לפני המעבר ל-Spring ), שהכיל שלושה שרשורים:
ואנחנו רושמים תלות - כאן יהיה לנו את ה- TelegramBots-Spring-Boot-Starter ו- Telegram API שהוזכרו לעיל : ספריית TelegramBots-Spring-Boot-Starter כוללת את Spring Boot ו- Telegram API. השימוש בו מאפשר לנו להכריז על בוט בקוד שלנו בצורה די פשוטה, ו-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);
}
}
אם עשינו הכל נכון, נוכל להפעיל את ה-main ולהגיד שלום לבוט שלנו. מוּכָן! כתבנו והשקנו בהצלחה בוט טלגרם שאומר שלום לכל הודעה נכנסת. אם מאמר זה היה שימושי עבורך, התודה הטובה ביותר תהיה אם תסתכל במאגר שלי ותשאיר כוכב. שם תמצאו גם את הגרסה שלי לבוט הטלגרם, שיש לו הרבה תכונות מעניינות:
- אחסון משתמשים במסד נתונים Postgres;
- אישור גישה לפקודות על סמך תפקידי משתמש;
- שימוש בהערות מותאמות אישית @BotCommand ו-@RequiredRoles ליצירת מטפלי הודעות ולבדיקת זכויות משתמש;
- תמיכה ביצירת לוח זמנים להתראות.
GO TO FULL VERSION