Chào mọi người! Tại một thời điểm nào đó trong quá trình học tập, bạn muốn chuyển từ giải quyết vấn đề sang tạo ra các dự án thực tế sẽ tạo thành nền tảng cho danh mục đầu tư của bạn. Khi tôi bắt đầu thực tập (điều mà tôi rất khuyến khích mọi người), tôi đã nhận được lời đề nghị viết bot điện tín với tư cách là một freelancer. Do kiến thức ít ỏi của mình, tôi đã viết một bot khá đơn giản ( lần commit cuối cùng trước khi chuyển sang Spring ), chứa ba luồng:
API TelegramBots-Spring-Boot-Starter và Telegram đã được đề cập ở trên : Thư viện TelegramBots-Spring-Boot-Starter bao gồm Spring Boot và API Telegram. Việc sử dụng nó cho phép chúng ta khai báo một bot trong code của mình một cách khá đơn giản và chính Spring sẽ tạo Bean và kích hoạt bot. Nếu bạn quan tâm đến những gì đang diễn ra tại thời điểm này, hãy xem các nguồn thư viện (trong môi trường phát triển hoặc trên Github ). Chúng tôi cũng thêm các tham số biên dịch: Đừng quên cập nhật tất cả các phần phụ thuộc sau khi điền vào pom! Hãy tạo hai lớp - Ứng dụng và Bot, cũng như tệp application.yaml trong thư mục tài nguyên. Cấu trúc dự án của tôi trông như thế này: Ở giai đoạn này, hãy thêm thông tin đăng nhập của bot vào application.yaml:
- chủ đề nhận tin nhắn;
- chủ đề gửi tin nhắn;
- luồng lập lịch sự kiện (nó kiểm tra các tin nhắn đã lên lịch và cập nhật dữ liệu được lưu trong bộ nhớ đệm từ JSON).
bot:
name: JavaRushTelegramBot
token: 22313424:AAF4gck4D8gDhq68E7k0UH8vlyQADhxQhYo
Ký hiệu phân cấp cho phép chúng tôi tránh sự lặp lại (bot.name, bot.token) và cải thiện khả năng đọc. Nếu chưa tạo bot, bạn có thể tạo bot bằng cách làm theo hướng dẫn chính thức . Nếu bạn không muốn hiển thị thông tin xác thực của bot trong application.yaml (điều này đúng), hãy sử dụng các biến môi trường khi triển khai:
bot:
name: ${BOT_NAME}
token: ${BOT_TOKEN}
Điền vào lớp Bot:
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;
}
}
Điền vào lớp Ứng dụng:
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);
}
}
Nếu chúng tôi làm mọi thứ chính xác, thì chúng tôi có thể chạy main và gửi lời chào đến bot của mình. Sẵn sàng! Chúng tôi đã viết và khởi chạy thành công bot điện tín gửi lời chào đến mọi tin nhắn đến. Nếu bài viết này hữu ích với bạn thì lời cảm ơn tốt nhất là bạn hãy xem kho lưu trữ của tôi và để lại một ngôi sao. Ở đó, bạn cũng sẽ tìm thấy phiên bản bot telegram của tôi, phiên bản này có nhiều tính năng thú vị:
- lưu trữ người dùng trong cơ sở dữ liệu Postgres;
- ủy quyền truy cập vào các lệnh dựa trên vai trò của người dùng;
- sử dụng các chú thích tùy chỉnh @BotCommand và @RequiredRoles để tạo trình xử lý tin nhắn và kiểm tra quyền của người dùng;
- hỗ trợ tạo lịch thông báo.
GO TO FULL VERSION