大家好!在學習的某個階段,您希望從解決問題轉向創建真正的項目,這些項目將構成您的投資組合的基礎。當我開始實習時(我強烈推薦給大家),我收到了一份以自由工作者身分編寫電報機器人的邀請。由於我的知識有限,我編寫了一個相當簡單的機器人(遷移到 Spring 之前的最後一次提交),其中包含三個線程:
和 Telegram API:TelegramBots-Spring-Boot-Starter 函式庫包括 Spring Boot 和 Telegram API。使用它允許我們以相當簡單的方式在程式碼中聲明機器人,Spring 本身將創建 Bean 並啟動機器人。如果您對此時發生的事情感興趣,請查看庫原始程式碼(在開發環境中或在Github上)。我們還添加了編譯參數: 填寫 pom 後不要忘記更新所有依賴項! 讓我們建立兩個類別 - 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}
填寫 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;
}
}
填寫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 並向我們的機器人打招呼。準備好!我們已經成功編寫並啟動了一個電報機器人,它可以向每條傳入的消息打招呼。如果本文對您有用,那麼最好的感謝是您查看我的存儲庫並留下一個星星。在那裡您還可以找到我的電報機器人版本,它有許多有趣的功能:
- 將使用者儲存在 Postgres 資料庫中;
- 根據使用者角色授權存取命令;
- 使用自訂註解@BotCommand和@RequiredRoles來建立訊息處理程序並檢查使用者權限;
- 支援建立通知計劃。
GO TO FULL VERSION