Message can't be edited. Бот не может отредактировать сообщение Aiogram
Столкнулся с проблемой: бот не может отредактировать собственное сообщение часть кода:
await bot.edit_message_text(chat_id=result[0], text=work, message_id=message_id)
rusult - достает id чата пользователей
message_id - хранит id сообщения
work - текст сообщения
код обработчика:
@dp.message_handler(state=Form.status_mail)
async def status_mail(message: types.Message, state: FSMContext):
id = int(message.text)
status = 0
db.edit_work_status(id, status)
ids = db.id_exists()
work_data = db.work_data(ids)
for row in work_data:
work = fmt.text(f"1", fmt.hbold("• Тула:"), f"{row[1]}\n", fmt.hbold("• Адрес:"), f"{row[2]}\n", fmt.hbold("• Что делать:"), f"{row[3]}\n", fmt.hbold("• Начало:"), f"{row[4]}\n", fmt.hbold("• Вам на руки:"), fmt.hunderline(f"{row[5]}"), "р./час, минималка", fmt.hunderline("2"), "часа")
method = "HTML"
message_id = f"{row[8]}"
results = db.mailling()
for result in results:
await bot.edit_message_text(chat_id=result[0], text=work, parse_mode=method, message_id=message_id)
await state.finish()
текст ошибки:
ERROR:asyncio:Task exception was never retrieved
future: <Task finished name='Task-30' coro=<Dispatcher._process_polling_updates() done, defined at C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\dispatcher.py:409> exception=MessageCantBeEdited("Message can't be edited")>
Traceback (most recent call last):
File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 417, in _process_polling_updates
for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 238, in process_updates
return await asyncio.gather(*tasks)
File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
response = await handler_obj.handler(*args, **partial_data)
File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\dispatcher.py", line 259, in process_update
return await self.message_handlers.notify(update.message)
File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\dispatcher\handler.py", line 116, in notify
response = await handler_obj.handler(*args, **partial_data)
File "C:\Users\1\Desktop\bt_f\main.py", line 146, in status_closed_mail
await bot.edit_message_text(chat_id=result[0], text=work, message_id=message_id)
File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\bot\bot.py", line 2411, in edit_message_text
result = await self.request(api.Methods.EDIT_MESSAGE_TEXT, payload)
File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\bot\base.py", line 208, in request
return await api.make_request(self.session, self.server, self.__token, method, data, files,
File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\bot\api.py", line 140, in make_request
return check_result(method, response.content_type, response.status, await response.text())
File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\bot\api.py", line 115, in check_result
exceptions.BadRequest.detect(description)
File "C:\Users\1\AppData\Local\Programs\Python\Python39\lib\site-packages\aiogram\utils\exceptions.py", line 140, in detect
raise err(cls.text or description)
aiogram.utils.exceptions.MessageCantBeEdited: Message can't be edited
Ответы (2 шт):
Исходя из процесса, который Вы описали и Вашего кода, причин ошибки может быть две: не найден чат, или сообщение, которое нужно редактировать.
Вы не можете сами присвоить ID отправляемому сообщению (да и зачем?), так как оно у каждого пользователя уникально и должно генерироваться автоматически.
Костыльное решение проблемы - хранить ВСЕ отправленные сообщения в базе, с их оригинальными ID, и потом уже редактировать конкретные сообщение.
Хорошее решение проблемы - использовать новую рассылку.