パート 1 プログラムの後半で混乱しないように、すべてのロジックを別のクラスに分割するようにしています。ボットが応答する実際のフレーズはインターフェイスに保存されます
Constants
。そこに行を作成しましょう。
String START_DESCRIPTION = "Hello";
次に、クラスに移動してTelegramBot
、次のコードを挿入しましょう。
public Ability replyToStart() {
return Ability
.builder()
.name("start")
.info(Constants.START_DESCRIPTION)
.locality(ALL)
.privacy(PUBLIC)
.action(ctx -> silent.send("Hello!", ctx.chatId()))
.build();
}
これで、ボットは標準コマンドに応答してクライアントに挨拶できるようになります/start
。実行してみてください。ボットはすでに少し生きています。しかし、他のフランケンシュタインの怪物と同じように、彼は手足をいくつか失っています。
内蔵キーボードの使用
ボットが私たちとの対話を構築するには、さらに 2 つのクラス、MessageFactory
と が必要ですKeyboardFactory
。1 つ目はユーザーの回答を読んでメッセージを生成し、2 つ目は回答を含むボタンを作成します。
public class KeyboardFactory {
public static ReplyKeyboard startButtons() {
InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup();
List<list<inlinekeyboardbutton>> rowsInline = new ArrayList<>();
List<inlinekeyboardbutton> rowInline = new ArrayList<>();
rowInline.add(new InlineKeyboardButton().setText("DISCUSSION").setCallbackData(Constants.DISCUSSION));
rowInline.add(new InlineKeyboardButton().setText("SMALL TALK").setCallbackData(Constants.SMALL_TALK));
rowsInline.add(rowInline);
inlineKeyboard.setKeyboard(rowsInline);
return inlineKeyboard;
}
}
</inlinekeyboardbutton></list<inlinekeyboardbutton>
途中で以下を追加しますConstants
。
String START_REPLY = "Start using the telegram bot if you are lonely or bored";
String CHOOSE_OPTION = "Make a choice";
String DISCUSSION = "Let's discuss!";
String SMALL_TALK = "Let's talk!";
これで、ファクトリの静的メソッドを呼び出すだけで、組み込みキーボードを使用できるようになります。コードの最も重要な部分は ですsetCallbackData()
。ユーザーがどのボタンを押したかを認識します。に行きましょうMessageFactory
:
public class MessageFactory {
private final MessageSender sender; //используется для отправки сообщений обратно пользователю
public MessageFactory(MessageSender sender) {
this.sender = sender;
}
public void start (long chatId) {
try {
sender.execute(new SendMessage()
.setText(Constants.START_REPLY)
.setChatId(chatId));
sender.execute(new SendMessage()
.setText(Constants.CHOOSE_OPTION)
.setChatId(chatId)
.setReplyMarkup(KeyboardFactory.startButtons()));
} catch (TelegramApiException e) {
e.printStackTrace();
}
}
}
メソッド内のコードを置き換えてみましょうTelegrambot.replyToStart()
。
public Ability replyToStart() {
return Ability
.builder()
.name("start")
.info(Constants.START_DESCRIPTION)
.locality(ALL)
.privacy(PUBLIC)
.action(ctx -> messageFactory.start(ctx.chatId()))
.build();
}
そして、同じクラスにもう 1 つの修正があり、コンストラクターを置き換えます。
private TelegramBot(String botToken, String botUsername) {
super(botToken, botUsername);
messageFactory = new MessageFactory(sender);
}
ボットを再起動してみてください。アクションに応じて内蔵キーボードが提供されるようになります。初心者向けの役立つライフハック: Idea を使用していて、クラスのドキュメントを参照したい場合は、クラスまたはメソッドを選択し、Mac では Ctrl+J を押すか、Windows では Ctrl+Q を押します。右クリック→「移動」→「使用法の宣言」を実行することもできます。したがって、たとえば、AbilityBot が実際には標準の TelegramLongPollingBot を継承していることがわかります。ラムダのみを使用するため、コードが大幅に削減されます。 次の (最終) パートでは、Heraku 上での対話とデプロイメントを展開します。
GO TO FULL VERSION