Я пытаюсь редактировать сообщения в боте телеграммы.
Я использую следующий код. Я могу отправлять сообщения без проблем, но часть редактирования сообщения не работает. Просто ничего не делает !!
$botToken=»XXXX. «; $website=»https://api.telegram.org/bot».$botToken; $content = file_get_contents(«php://input»); $update = json_decode($content, true); $chatId = $update[«message»][«chat»][«id»]; $message = $update[«message»][«text»]; switch($message) < case(«action»): sendMessage($chatId, «What should I do?»); break; case(«add»): editMessageText($chatId, «should I add?»); break; default: sendMessage($chatId, «default»); >function sendMessage($chatId, $message) < $url = $GLOBALS[website].»/sendMessage? chat_id=».$chatId.».urlencode($message).».$reply1; file_get_contents($url); >function editMessageText($chatId, $messageId, $message) < $url = $GLOBALS[website].»/editMessageText?chat_id=».$chatId.».$messageId.»>-2 phptelegramtelegram-bot
Решение
Проблема в этой части вашего кода
Как сделать: ЗАМЕНА (РЕДАКТИРОВАНИЕ) СООБЩЕНИЙ В TELEGRAM-БОТе / Конструктор sambot.ru / Артем Кук
case(«add»): editMessageText($chatId, «should I add?»);
Вы не передаете параметры правильно. editMessageText метод требует параметр message_id , который должен быть `Integer.
Это должен быть рабочий код
Другие решения
Других решений пока нет …
Источник: web-answers.ru
Как боту изменить сообщение?
Ошибку угадать надо? Так телепаты все на карантине, угадывать некому.
И что за sleep() используется, откуда он взялся?
Vindicar, ошибка: aiogram.utils.exceptions.MessageCantBeEdited: Message can’t be edited
А sleep() импортировал: from asyncio import sleep
szjyakgf, хм. А если подождать минуту? Может, запрос на редактирование приходит слишком быстро.
Решения вопроса 1
message в этой функции — это сообщение пользователя, который написал /start. Дальше бот пытается редактировать это сообщение. и не получается! Конечно, ведь он может редактировать только свои сообщения, а чужие не может.
Он должен просто редактировать своё сообщение, а не сообщение пользователя:
my_new_message = await bot.send_message(message.chat.id, ‘Ждем: 2сек’) await sleep(1) await bot.edit_message_text(chat_id=message.chat.id, message_id=my_new_message.message_id, text=’Ждем: 1сек’) .
Источник: qna.habr.com
Редактирование сообщений
Для того чтобы отрадактировать или удалить сообщение телеграм бота необходимо знать его id.
Создание телеграм-ботов на python (telebot) #9 / Удаление и редактирование сообщений
Для того чтобы отследить id которое телеграм присвоил сообшению необходимо при генерации из внешнего скрипта (СКРИПТ1.php) указать два дополнительных ключа:
- $return_mas[‘msg_insert_id_url’] = ‘http://ХОСТ/ПУТЬ_К_СКРИПТУ2/СКРИПТ2.php’;
- $return_mas[‘msg_insert_unic’] = УНИКАЛЬНОЕ_ЗНАЧЕНИЕ;//Например, time()
Где, СКРИПТ2.php — Ваш php скрипт на который редактор отправит данные после того как телеграм оповестит его какой id он присвоил вашему сообщению.
УНИКАЛЬНОЕ_ЗНАЧЕНИЕ — необходимо добавить чтобы понимать какой id присланный редактором какому из ваших сгенерированных сообщений соответствует.
СКРИПТ2.php получит от редакора массив data в формате json, в котором будут данные сообщения. Данные будут в массиве, потому что если вы отправили из внешнего сообщение с вложениями (например, картинками) — то ваше сообщение разобъется на несколько и каждому изображению телеграм присвоит отдельный id
Пример данных, которые получит от редактора файл СКРИПТ2.php:
Демо файла ФАЙЛ.php, который принимает id сообщения, сгенерированного неким вашим скриптом СКРИПТ1.php — пример написан под библиотеку Ebot Server и кладется в папку, например, /all/ebot_server1/modules/url_resp/scripts, но может вполне отработать и независимо от библиотеки (в этом случае удалите подключенные файлы и укажите значения таких переменных как $bot_id и т.д. самостоятельно)
Демо пример изменит сообщение, которое сгенерировал СКРИПТ1.php
ВАЖНО — Сообщение не отредактируется, если в нем у вас был вывод кнопок под полем ввода. Иными словами, если в редакторе у вас есть видимые кнопки — то они будут передаваться в редактор с каждым сообщением. Такое сообщение телеграм отредактировать не даст.
Пример отредактированного сообщения:
Источник: ebot.one