JavaRush /Java Blog /Random-IT /Telegram Ability Bot: un bot in grado di condurre un dial...
Chundrik
Livello 35
Санкт-Петербург

Telegram Ability Bot: un bot in grado di condurre un dialogo: Parte 2

Pubblicato nel gruppo Random-IT
PARTE 1 Per non confondersi successivamente nelle parti del programma, provo a dividere tutta la logica in classi separate. Le frasi effettive con cui il bot risponderà verranno memorizzate nell'interfaccia Constants. Creiamo una linea lì:
String START_DESCRIPTION = "Hello";
Andiamo quindi in classe TelegramBote inseriamo il seguente codice:
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: un bot in grado di condurre un dialogo: Parte 2 - 1Ora il bot può salutare i propri client in risposta a un comando standard /start. Prova a eseguirlo: il bot è già un po' vivo! Ma, come ogni mostro di Frankenstein, gli mancano un paio di arti.Telegram Ability Bot: un bot che può condurre un dialogo: Parte 2 - 2

Utilizzando la tastiera integrata

Affinché il bot possa costruire un dialogo con noi, abbiamo bisogno di altre due classi: MessageFactorye KeyboardFactory. Il primo leggerà le risposte delle persone e genererà messaggi, mentre il secondo creerà pulsanti con le risposte.
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>
Lungo il percorso aggiungeremo a 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!";
Ora possiamo semplicemente chiamare il metodo statico della nostra fabbrica per utilizzare la tastiera integrata. La parte più importante del codice è il file setCallbackData(). Riconosce quale pulsante è stato premuto dall'utente. Andiamo a 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();
        }
    }
}
Sostituiamo il codice nel metodo 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();
    }
E un altro emendamento nella stessa classe: sostituzione del costruttore:
private TelegramBot(String botToken, String botUsername) {
        super(botToken, botUsername);
        messageFactory = new MessageFactory(sender);
    }
Prova a riavviare il bot. Ora offrirà la tastiera integrata in risposta alle tue azioni. Telegram Ability Bot: un bot che può condurre un dialogo: Parte 2 - 3Trucchi utili per i principianti: se stai usando Idea e vuoi vedere la documentazione di una classe, seleziona la classe o il metodo e premi Ctrl+J su Mac o Ctrl+Q su Windows. Puoi anche fare clic con il pulsante destro del mouse->Vai a->Dichiarazione di utilizzo. Così, ad esempio, puoi scoprire che il nostro AbilityBot in realtà eredita dallo standard TelegramLongPollingBot. Solo che utilizza lambda, il che riduce significativamente il codice. La parte successiva (finale) svilupperà il dialogo e lo schieramento su Heroku.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION