JavaRush /Blogue Java /Random-PT /Telegram Ability Bot: um bot que pode conduzir um diálogo...
Chundrik
Nível 35
Санкт-Петербург

Telegram Ability Bot: um bot que pode conduzir um diálogo: Parte 2

Publicado no grupo Random-PT
PARTE 1 Para não ficar confuso posteriormente em partes do programa, tento dividir toda a lógica em classes separadas. As frases reais com as quais o bot responderá serão armazenadas na interface Constants. Vamos criar uma linha aí:
String START_DESCRIPTION = "Hello";
Então vamos para a aula TelegramBote inserir o seguinte 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: um bot que pode conduzir um diálogo: Parte 2 - 1Agora o bot pode cumprimentar seus clientes em resposta a um comando padrão /start. Tente executá-lo: o bot já está um pouco vivo! Mas, como qualquer monstro de Frankenstein, faltam alguns membros.Telegram Ability Bot: um bot que pode conduzir um diálogo: Parte 2 - 2

Usando o teclado integrado

Para que o bot estabeleça um diálogo conosco, precisamos de mais duas classes: MessageFactorye KeyboardFactory. O primeiro irá ler as respostas das pessoas e gerar mensagens, e o segundo criará botões com respostas.
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>
Ao longo do caminho, adicionaremos 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!";
Agora podemos simplesmente chamar o método estático de nossa fábrica para usar o teclado integrado. A parte mais importante do código é o setCallbackData(). Ele reconhece qual botão foi pressionado pelo usuário. Vamos para 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();
        }
    }
}
Vamos substituir o código no 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();
    }
E mais uma alteração na mesma classe - substituindo o construtor:
private TelegramBot(String botToken, String botUsername) {
        super(botToken, botUsername);
        messageFactory = new MessageFactory(sender);
    }
Tente reiniciar seu bot. Agora ele oferecerá o teclado integrado em resposta às suas ações. Telegram Ability Bot: um bot que pode conduzir um diálogo: Parte 2 - 3Dicas úteis para iniciantes: Se você estiver usando o Idea e quiser ver a documentação de uma classe, selecione a classe ou método e pressione Ctrl+J no Mac ou Ctrl+Q no Windows. Você também pode clicar com o botão direito->Ir para->Declaração de usos. Assim, por exemplo, você pode descobrir que nosso AbilityBot na verdade herda do TelegramLongPollingBot padrão. Só que usa lambdas, o que reduz significativamente o código. A próxima parte (final) desenvolverá o diálogo e a implantação no Heroku.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION