Как исправить ошибку aiogram.exceptions.TelegramBadRequest: Telegram server says - Bad Request: message to delete not found*?
- Высылается инлайн клавиатура1 с кнопкой '❌'-отмена
- За ней высылается стикер1
- При нажатии на кнопку '❌' стикер1 удаляется и инлайн клавиатура1 исчезает и появляется на её месте инлайн клавиатура2 с кнопкой '✅'-переход в инлайн клавиатуру1
- При нажатии на кнопку '✅' инлайн клавиатуры2, инлайн клавиатура2 исчизает и на её месте появляется инлайн клавиатура1 и высылается стикер1, и так до бесконечности.
У меня возникает такая ошибка при повторном удалении стикера:
TelegramBadRequest(method=method, message=description)
aiogram.exceptions.TelegramBadRequest: Telegram server says - Bad Request: message to delete not found*
Вот мой код:
@router.callback_query(F.data == '1)Жанры+')# Кнопка
async def hello(callback_query: CallbackQuery):
await callback_query.answer('')
await callback_query.message.edit_text('?Какой Като ты выберешь??', reply_markup=kb.Anime_genres_sections)#клавиатура1
d_t = await callback_query.message.reply_sticker(
'CAACAgIAAxkBAAIB0WZsRdBt8YTsYqppVF15ASsWZp1YAAKgTAACoPxhS49-ChSO_O50NQQ') # Высылается стикер1
if F.data == '2Отмена':
async def otm2():
await otm2()
@router.callback_query(F.data == '2Отмена')#Кнопка отмены❌
async def otm2(callback: CallbackQuery):
await callback.message.edit_text('Виды жанров:',
reply_markup=kb.Onongi_Announcements_Top_100_Anime_genres)#клавиатура2
try:
await d_t.delete()# Удаление стикера1
except TelegramBadRequest:
print('Sticker was delete!')#Обработка этой ошибки
Ответы (1 шт):
В самом тексте указана причина возникновения ошибки.
Переменную d_t
вы создаете в функции hello
, а применять пытаетесь в функции otm2
. Что бы исправить ошибку вам необходимо придумать как передавать значения d_t
в функцию otm2
. Либо передавать в аргументах функции, либо делать глобальной, либо что то ещё, что вам больше нравится.
Далее, эта непонятная конструкция вообще ни к чему, её можно смело убрать.
if F.data == '2Отмена':
async def otm2():
await otm2()
У вас стоит обработчик callback_query
который реагирует на нажатие конкретной инлайн кнопки и вызывает функцию otm2
. Если же хотите обрабатывать все колбеки в одной функции, тогда следует записать так:
@router.callback_query() # будет срабатывать при нажатии любой инлайн кнопки
async def call_func(callback: CallbackQuery):
if F.data == '2Отмена': # перебираете data и запускаете нужную функцию
await otm2() # запускает функцию
elif F.data == 'другие кнопки':
pass # и далее по аналогии
Но в таком случае обработчики других колбеков должны быть либо выше этой функции, либо сами функции должны вызываться из общего обработчика колбеков.
Надеюсь логика стала понятней