Pull to refresh

Comments 6

Если мне не изменяет память, то предыдущую клавиатуру можно не удалять, а обновлять с помощью updateMessage - обновление будет более плавным, чем отправка и удаление. Только нужно убедиться, что предыдущее сообщение не удалено пользователем. Также вроде можно обновить только inline-клавиатуру

Всё верно, вот только убедиться никак нельзя. Бот не знает, что сообщение удалено, ведь удаляется оно только на стороне пользователя, т.о. не происходит никаких ошибок/исключений при попытке изменить такое сообщение.

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

Сказывается моя невнимательность или fuzzy brain в конце рабочего дня, но я не нашла в документации инфы про обновление клавы.
editMessage есть, но шифтнуть одну клаву другой вроде нельзя.

Если нашли что-то, тыкните пожалуйста)

Посмотрите метод editMessageReplyMarkup

Для обнаружения того, что сообщение удалено, можно читать ответ от выполнения метода editMessage - он возвращает JSON, в котором вроде есть информация об успешности или неуспешности зарпоса:

On success, if the edited message is not an inline message, the edited Message is returned, otherwise True is returned.

Спасибо за совет^^ Выглядит действительно лучше
Добавила функцию edit_inline()

function edit_inline(chat_id, msg_id) {
  let keyboard = getKeyboard(chat_id);
  var payload = {
    'method': 'editMessageReplyMarkup',
    'chat_id': String(chat_id),
    'message_id': String(msg_id),
    'reply_markup': JSON.stringify(keyboard)
  }
  
  var Data = {
    "method": "post",
    "payload": payload
  }
  UrlFetchApp.fetch('https://api.telegram.org/bot' + API + '/', Data); 
}

И немного изменила doPost()

Нужно на всякий случай проверять, успешно ли редактирование. Если сообщение было удалено, редактирование вернёт ошибку, в таком случае нужно повторно отправить сообщение с клавиатурой с помощью sendMessage

Sign up to leave a comment.

Articles