TEIL 1 Um später in Teilen des Programms nicht verwirrt zu werden, versuche ich, die gesamte Logik in separate Klassen aufzuteilen. Die tatsächlichen Phrasen, mit denen der Bot antwortet, werden in der Schnittstelle gespeichert
Constants
. Erstellen wir dort eine Zeile:
String START_DESCRIPTION = "Hello";
Dann gehen wir zur Klasse TelegramBot
und fügen den folgenden Code ein:
public Ability replyToStart() {
return Ability
.builder()
.name("start")
.info(Constants.START_DESCRIPTION)
.locality(ALL)
.privacy(PUBLIC)
.action(ctx -> silent.send("Hello!", ctx.chatId()))
.build();
}
Jetzt kann der Bot seine Clients als Reaktion auf einen Standardbefehl begrüßen /start
. Versuchen Sie es auszuführen: Der Bot ist schon ein wenig lebendig! Aber wie jedem Frankenstein-Monster fehlen ihm ein paar Gliedmaßen.
Verwendung der integrierten Tastatur
Damit der Bot einen Dialog mit uns aufbauen kann, benötigen wir zwei weitere Klassen:MessageFactory
und KeyboardFactory
. Der erste liest die Antworten der Leute und generiert Nachrichten, der zweite erstellt Schaltflächen mit Antworten.
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>
Unterwegs werden wir Folgendes hinzufügen 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!";
Jetzt können wir einfach die statische Methode unserer Fabrik aufrufen, um die integrierte Tastatur zu verwenden. Der wichtigste Teil des Codes ist die setCallbackData()
. Es erkennt, welche Taste der Benutzer gedrückt hat. Gehen wir zu 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();
}
}
}
Ersetzen wir den Code in der Methode 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();
}
Und noch eine Änderung in derselben Klasse – Ersetzen des Konstruktors:
private TelegramBot(String botToken, String botUsername) {
super(botToken, botUsername);
messageFactory = new MessageFactory(sender);
}
Versuchen Sie, Ihren Bot neu zu starten. Als Reaktion auf Ihre Aktionen wird nun die integrierte Tastatur angezeigt. Nützliche Life-Hacks für Anfänger: Wenn Sie Idea verwenden und die Dokumentation für eine Klasse sehen möchten, wählen Sie die Klasse oder Methode aus und drücken Sie Strg+J auf dem Mac oder Strg+Q unter Windows. Sie können auch mit der rechten Maustaste ->Gehe zu ->Nutzungserklärung klicken. So können Sie beispielsweise herausfinden, dass unser AbilityBot tatsächlich vom Standard TelegramLongPollingBot erbt. Nur werden Lambdas verwendet, was den Code erheblich reduziert. Im nächsten (letzten) Teil werden der Dialog und die Bereitstellung auf Heroku entwickelt.
GO TO FULL VERSION