Обработка нажатий на клавиатуру Telegram Bot

102
14 октября 2019, 22:20

создаю клавиатуру для упрощения общения с пользователем. Но не могу понять как обработать нажатие на кнопку из клавиатуры.

Метод, который получает либо местоположение пользователя либо телефон. Собираюсь делать 2 реализации для которой и будет нужна клавиатура. На клавиатуре 2 кнопки в зависимости от получаемого ключа key буду получать либо телефон, либо геоданные 2-мя способами либо через telegram, либо через ввод с клавиатуры.

public void keywordMsg(Message message,String key) {
        SendMessage send = new SendMessage();
        send.enableMarkdown(true);
        ReplyKeyboardMarkup replyKeyboardMarkup = new ReplyKeyboardMarkup();
        replyKeyboardMarkup.setSelective(true);
        replyKeyboardMarkup.setResizeKeyboard(true);
        replyKeyboardMarkup.setOneTimeKeyboard(false);
        send.setReplyMarkup(replyKeyboardMarkup);
        List<KeyboardRow> list = new ArrayList<>();
        KeyboardButton btn1 = new KeyboardButton();
        KeyboardButton btn2 = new KeyboardButton();
        if(key.equals("Телефон")){
            send.setText("Необходим ваш номер телефона");
            btn1.setText("Отправить мой номер");
            btn2.setText("Я введу номер");
            btn1.setRequestContact(true);
        }
        else{
            send.setText("Необходимо ваше местоположение");
            btn1.setText("Отправить моё местоположение");
            btn2.setText("Я введу адрес");
            btn1.setRequestLocation(true);
        }
        KeyboardRow row1  = new KeyboardRow();
        row1.add(btn1);
        row1.add(btn2);
        list.add(row1);
        replyKeyboardMarkup.setKeyboard(list);
        try{
            send.setChatId(message.getChatId().toString());
        }
        catch (NullPointerException e){
            send.setChatId(id);
        }

        try{
            sendMessage(send);
        }
        catch (TelegramApiException e){
            e.printStackTrace();
        }
    }

Интересует как перехватить ответ пользователя при нажатии на кнопку? Сейчас вылавливать ответ пользователя получается лишь через последний else. не могу понять какое событие нажатие на кнопку клавиатуры? @Override public void onUpdateReceived(Update update) { if (update.hasMessage() && update.getMessage().hasText()){ SendMessage message = new SendMessage().setChatId(update.getMessage().getChatId()); Message msg = update.getMessage(); id = update.getMessage().getChatId(); String answer = "";

            switch (msg.getText()){
                case "/start": {
                    keywordMsg(msg, "Телефон");
                    message.setText("Ваш телефон " + msg.getContact().getPhoneNumber() + "\nВерно?");
                    if (!msg.getContact().getPhoneNumber().isEmpty())
                    try {
                        execute(message);
                    } catch (TelegramApiException e) {
                        e.printStackTrace();
                    }
                    break;
                }
                case "Да": {
                }
                case "Нет, я введу сам!": {
                }
            }
        }
        else if (update.hasCallbackQuery()){
            Message msg = update.getMessage();
            SendMessage send = new SendMessage();
            try {
                execute(new SendMessage().setText(update.getCallbackQuery().getData()).setChatId(update.getCallbackQuery().getMessage().getChatId()));
                keywordMsg(msg, "");
                String text = "Ваше местоположение  " + msg.getLocation() + "\nВерно?";
                send.setText(text);
                execute(send);
            } catch (TelegramApiException e) {
                e.printStackTrace();
            }
        }
        else {
            SendMessage message = new SendMessage().setChatId(update.getMessage().getChatId());
            try {
                execute(yesNoMessange(update.getMessage().getChatId(), update.getMessage().getContact().getPhoneNumber()));
            } catch (TelegramApiException e) {
                e.printStackTrace();
            }
        }
    }

READ ALSO
Обнулить Final объект JFrame

Обнулить Final объект JFrame

Необходимо вернуть объект JFrame в изначальное состояние, который имеет тип final

136
Как добавить поле в коллекцию? MongoDB | NodeJS

Как добавить поле в коллекцию? MongoDB | NodeJS

Хочу добавить поле к уже существующей коллекцииИспользование finOne перезаписывает полностью всю коллекцию, а мне из иного участка кода нужно...

108
Uncaught TypeError: this.on is not a function

Uncaught TypeError: this.on is not a function

Я использую вот этот скрипт

98
Как получить все значения из формы?

Как получить все значения из формы?

Можно относительно удобно получить значение input-от из формы, если мы знаем name каждого в отдельности inputА существует ли относительно простой...

114