JavaRush /Java-Blog /Random-DE /Telegram Ability Bot: ein Bot, der einen Dialog führen ka...
Chundrik
Level 35
Санкт-Петербург

Telegram Ability Bot: ein Bot, der einen Dialog führen kann: Teil 2

Veröffentlicht in der Gruppe Random-DE
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 TelegramBotund 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();
}
Telegram Ability Bot: ein Bot, der einen Dialog führen kann: Teil 2 – 1Jetzt 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.Telegram Ability Bot: ein Bot, der einen Dialog führen kann: Teil 2 - 2

Verwendung der integrierten Tastatur

Damit der Bot einen Dialog mit uns aufbauen kann, benötigen wir zwei weitere Klassen: MessageFactoryund 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. Telegram Ability Bot: ein Bot, der einen Dialog führen kann: Teil 2 – 3Nü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.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION