JavaRush /Blog Java /Random-ES /Telegram Ability Bot: un bot que puede mantener un diálog...
Chundrik
Nivel 35
Санкт-Петербург

Telegram Ability Bot: un bot que puede mantener un diálogo: Parte 2

Publicado en el grupo Random-ES
PARTE 1 Para no confundirme más adelante en partes del programa, trato de dividir toda la lógica en clases separadas. Las frases reales con las que responderá el bot se almacenarán en la interfaz Constants. Creemos una línea allí:
String START_DESCRIPTION = "Hello";
Luego vayamos a la clase TelegramBote insertemos el siguiente código:
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 que puede mantener un diálogo: Parte 2 - 1Ahora el bot puede saludar a sus clientes en respuesta a un comando estándar /start. Intenta ejecutarlo: ¡el bot ya está un poco vivo! Pero, como a cualquier monstruo de Frankenstein, le faltan un par de extremidades.Telegram Ability Bot: un bot que puede mantener un diálogo: Parte 2 - 2

Usando el teclado incorporado

Para que el bot pueda entablar un diálogo con nosotros, necesitamos dos clases más: MessageFactoryy KeyboardFactory. El primero leerá las respuestas de las personas y generará mensajes, y el segundo creará botones con respuestas.
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>
En el camino agregaremos 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!";
Ahora podemos simplemente llamar al método estático de nuestra fábrica para usar el teclado incorporado. La parte más importante del código es el setCallbackData(). Reconoce qué botón fue presionado por el usuario. Vamos 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();
        }
    }
}
Reemplacemos el código en el método 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();
    }
Y una enmienda más en la misma clase: reemplazar el constructor:
private TelegramBot(String botToken, String botUsername) {
        super(botToken, botUsername);
        messageFactory = new MessageFactory(sender);
    }
Intente reiniciar su bot. Ahora ofrecerá el teclado incorporado en respuesta a sus acciones. Telegram Ability Bot: un bot que puede mantener un diálogo: Parte 2 - 3Trucos útiles para principiantes: si está utilizando Idea y desea ver la documentación de una clase, seleccione la clase o método y presione Ctrl+J en Mac o Ctrl+Q en Windows. También puedes hacer clic derecho->Ir a->Declaración de usos. Así, por ejemplo, puedes descubrir que nuestro AbilityBot en realidad hereda del TelegramLongPollingBot estándar. Solo utiliza lambdas, lo que reduce significativamente el código. La siguiente parte (final) desarrollará el diálogo y el despliegue en Heroku.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION