создаю клавиатуру для упрощения общения с пользователем. Но не могу понять как обработать нажатие на кнопку из клавиатуры.
Метод, который получает либо местоположение пользователя либо телефон. Собираюсь делать 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();
}
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Необходимо вернуть объект JFrame в изначальное состояние, который имеет тип final
Хочу добавить поле к уже существующей коллекцииИспользование finOne перезаписывает полностью всю коллекцию, а мне из иного участка кода нужно...
Можно относительно удобно получить значение input-от из формы, если мы знаем name каждого в отдельности inputА существует ли относительно простой...