@Starvings

Как отредактировать сообщение в тг-боте, с учетом InlineKeyboard?

Пытаюсь реализовать редактирование сообщений в боте. Заменить сообщение на текст получается без проблем:

String text = "Текст, заменяющий собой прежнее собощение";
EditMessageText message = new EditMessageText(); 
message.setChatId(String.valueOf(chatId));
message.setText(text);
message.setMessageId((int) messageId);


Но как быть, если требуется так же сменить кнопки в InlineKeyboard?

По логике у меня реализация такая - пользователь нажимает кнопку, вызывается метод с иным набором кнопок и текстом.
Например нажимает на одну кнопку и вызывается иной метод, который выводит новый набор кнопок на клавиатуру:

private void notifay_set_year(long chatId, String text){
    SendMessage message = new SendMessage();
    message.setChatId(String.valueOf(chatId));
    message.setText(text);

    InlineKeyboardMarkup markupInputInline = new InlineKeyboardMarkup();
    List<List<InlineKeyboardButton>> rowsInline = new ArrayList<>();
    List<InlineKeyboardButton> rowInline1 = new ArrayList<>();
    List<InlineKeyboardButton> rowInline2 = new ArrayList<>();


    var Button_23 = new InlineKeyboardButton();
    Button_23.setText("2023");
    Button_23.setCallbackData(YEAR_23);
        var Button_24 = new InlineKeyboardButton();
        Button_24.setText("2024");
        Button_24.setCallbackData(YEAR_24);
            var Button_25 = new InlineKeyboardButton();
            Button_25.setText("2025");
            Button_25.setCallbackData(YEAR_25);
                var Button_no = new InlineKeyboardButton();
                Button_no.setText("Отмена");
                Button_no.setCallbackData(NO_NOTIFAY);

                rowInline1.add(Button_no);
                rowInline2.add(Button_23);
                rowInline2.add(Button_24);
                rowInline2.add(Button_25);

    rowsInline.add(rowInline1);
    rowsInline.add(rowInline2);
    markupInputInline.setKeyboard(rowsInline);
    message.setReplyMarkup(markupInputInline);

    try {
        execute(message);
    }
    catch (TelegramApiException e){
    }
}


Так вот как сделать, что бы новые кнопки, при вызове другого метода появлялись не новым сообщением, а заменялись в уже имеющемся?
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
@telegramdev
В bot API есть метод EditReplyMarkup - используйте его для замены только кнопок. В метод передается chat_id (юзер ID пользователя), ID сообщения в диалоге, и новая Inline-клавиатура. С ReplyKeyboard (стандартной клавиатурой) так не выйдет.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы