Редактируем сообщение через Телеграм Бот

Редактируем сообщение через Телеграм Бот

iMakeBots

Мы все ближе и ближе подходим к реализации интересного проекта. В моих планах написать цикл статей по построению бота по продаже товаров или услуг, своего рода интернет-магазин в Телеграме. У меня уже даже есть настроенная Яндекс.Касса. Но для этого нам нужно понимание процессов, которые будут происходить в работе такого бота. Мы уже многое умеем, и сегодня пополним свои знания в части редактирования и удаления сообщений.

Для того чтобы произвести какие-либо действия с сообщением нам нужно знать его message_id и chat_id. Эти данные мы можем получить в объекте, который будет нам отправлен в ответ на нашу публикацию сообщения от Bot API, далее для удобства можем сохранить их в удобном для нас виде, или можем получить их через объект CallbackQuery при событии через кнопку встроенной клавиатуры.

В своем примере я продемонстрирую работу через встроенную клавиатуру. Заодно еще познакомимся с объектом ForceReply


Создаем тестовое сообщение

В качестве теста, я создал простое, текстовое сообщение с кнопками "Редактировать" и "Удалить". Приводить весь код скрипта я не буду, он повторяется из предыдущих статей, и в прикрепленном в конце статьи исходном коде он также будет присутствовать. 


Редактируем сообщение

Редактирование здесь будет происходить в 2 этапа. Сначала мы предложим пользователю ввести новый текст сообщения, потом произведем действие по замене текста. Хранение данных организовывать не будем, все будем делать на лету. В связи с этим возникает вопрос как передать message_id на втором шаге?

При нажатии на кнопку "Редактировать" нам приходит объект CallbackQuery, в котором содержится message_id нужного нам сообщения, он находится в ['callback_query']['message']['message_id'].  Сформируем текстовое сообщение-запрос, зашьем в него полученный message_id, и отправим пользователю. Дополнительно к сообщению прикрепим объект ForceReply. 

Объект ForceReply позволяет выполнить в автоматическом режиме действие, если бы пользователь через контекстное меню вызвал команду "Ответить". То есть мы сразу предлагаем пользователю ответить на наше сообщение, это удобно, ведь если по нашему сценарию нам нужно запросить от пользователя какие-то данные, то в тексте сообщения мы напишем "Укажите вашу фамилию", автоматом ставим его на ответ, и при отправке пользователем Фамилии, и после проверок, что это ответ на наш запрос, получаем ожидаемые данные.

Пользователь отправит нам в ответ новый текст для редактирования, также под ключом reply_to_message будет наш сформированный текст с message_id нужного нам сообщения. Достаем его и передаем в метод editMessageText.


Удаляем сообщение

Удалять сообщение как ни странно проще некуда. При нажатии на кнопку также передается объект CallbackQuery из которого берем message_id передаем его вместе с chat_id в метод deleteMessage


Подводим итоги

Теперь мы еще на один шаг стали ближе к большому проекту. Исходный код примеров этой статьи вы можете скачать по этой ссылке.

Вы можете оставить комментарий к статье.

Report Page