こんにちは、みんな!学習のある時点では、問題の解決から、ポートフォリオの基礎となる実際のプロジェクトの作成に移行したいと考えます。インターンシップを開始したとき (これは皆さんに強くお勧めします)、フリーランサーとして電報ボットを書くというオファーを受けました。私の知識が少なかったため、私は 3 つのスレッドを含むかなり単純なボット ( Spring に移行する前の最後のコミット) を作成しました。
と Telegram APIが含まれています。TelegramBots-Spring-Boot-Starter ライブラリには、Spring Boot と Telegram API が含まれています。これを使用すると、非常に簡単な方法でコード内でボットを宣言でき、Spring 自体が Bean を作成してボットをアクティブ化します。現時点で内部で何が起こっているかに興味がある場合は、ライブラリ ソース (開発環境またはGithub上) を見てください。コンパイル パラメーターも追加します。pom を入力した後は、すべての依存関係を更新することを忘れないでください。 App と Bot の 2 つのクラスと、リソース フォルダーに 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;
}
}
アプリクラスを入力します。
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