JavaRush /Blog Java /Random-PL /Bot umiejętności telegramu: bot, który może prowadzić dia...
Chundrik
Poziom 35
Санкт-Петербург

Bot umiejętności telegramu: bot, który może prowadzić dialog: część 2

Opublikowano w grupie Random-PL
CZĘŚĆ 1 Aby nie pomylić później części programu, całą logikę staram się podzielić na osobne klasy. Rzeczywiste frazy, którymi bot odpowie, zostaną zapisane w interfejsie Constants. Stwórzmy tam linię:
String START_DESCRIPTION = "Hello";
Następnie przejdźmy do zajęć TelegramBoti wstawmy następujący kod:
public Ability replyToStart() {
    return Ability
        .builder()
        .name("start")
        .info(Constants.START_DESCRIPTION)
        .locality(ALL)
        .privacy(PUBLIC)
        .action(ctx ->  silent.send("Hello!", ctx.chatId()))
        .build();
}
Bot umiejętności telegramu: bot, który może prowadzić dialog: Część 2 - 1Teraz bot może witać swoich klientów w odpowiedzi na standardowe polecenie /start. Spróbuj go uruchomić: bot jest już trochę żywy! Ale jak każdemu potworowi Frankensteina brakuje mu kilku kończyn.Bot umiejętności telegramu: bot, który może prowadzić dialog: Część 2 - 2

Korzystanie z wbudowanej klawiatury

Aby bot mógł z nami nawiązać dialog potrzebne są nam jeszcze dwie klasy: MessageFactoryoraz KeyboardFactory. Pierwszy będzie czytał odpowiedzi ludzi i generował wiadomości, a drugi będzie tworzył przyciski z odpowiedziami.
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>
Po drodze dodamy do 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!";
Teraz możemy po prostu wywołać statyczną metodę naszej fabryki, aby skorzystać z wbudowanej klawiatury. Najważniejszą częścią kodu jest plik setCallbackData(). Rozpoznaje, który przycisk został naciśnięty przez użytkownika. Chodźmy do 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();
        }
    }
}
Zamieńmy kod w metodzie 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();
    }
I jeszcze jedna poprawka z tej samej klasy - zastąpienie konstruktora:
private TelegramBot(String botToken, String botUsername) {
        super(botToken, botUsername);
        messageFactory = new MessageFactory(sender);
    }
Spróbuj ponownie uruchomić bota. Będzie teraz oferować wbudowaną klawiaturę w odpowiedzi na Twoje działania. Bot umiejętności telegramu: bot, który może prowadzić dialog: część 2 - 3Przydatne triki dla początkujących: Jeśli używasz Idea i chcesz zobaczyć dokumentację zajęć, wybierz klasę lub metodę i naciśnij Ctrl+J na Macu lub Ctrl+Q na Windowsie. Możesz także kliknąć prawym przyciskiem myszy->Przejdź do->Deklaracja zastosowań. W ten sposób możesz na przykład dowiedzieć się, że nasz UmiejętnośćBot faktycznie dziedziczy po standardowym TelegramLongPollingBot. Tylko używa lambd, co znacznie zmniejsza kod. Następna (ostatnia) część rozwinie dialog i rozmieszczenie na Heroku.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION