Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как удалить отправленный альбом в aiogram 3.4.1

admin site Мастер (1240), на голосовании 1 год назад
Есть код, который показывает карточку товара после выбора категории. Главное меню удаляется и выходит карточка товара. Карточка представляет из себя: 3 изображения, текст с описанием товара и 3 Inline-кнопки(в корзину, следующий товар, главное меню). ". При нажатии на кнопку "главное меню" мне нужно удалить отправленный альбом из 3-х фотографий, сообщение с описанием и соответственно отправить меню. Проблема в том, что я не могу удалить этот альбом. Для описания использую delete(), для альбома пробовал message_delete(), но как бы я не пробовал я получаю ошибку. Как мне это сделать? Часть кода прикладываю:

 from aiogram import Router, F 
from aiogram.types import Message, CallbackQuery
from aiogram.filters import CommandStart, Command

import app.keyboards as kb
import app.parser.parser_module as Parser

from app.database.requests import (set_user)

router = Router()

@router.message(CommandStart())
@router.callback_query(F.data == 'to_main')
async def cmd_start(message: Message):
if isinstance(message, Message):
await set_user(message.from_user.id, message.from_user.username)
await message.answer('Welcome!', reply_markup=kb.main)
else:
await message.message.delete()
await message.message.answer('Main menu', reply_markup=kb.main)

@router.callback_query(F.data.startswith('category_'))
async def category(callback: CallbackQuery):
await Parser.parser(str(callback.data.split('_')[0]), int(callback.data.split('_')[1]))

msg = f'{name}\n\nЦена: {price}\n\nДоступные размеры: {sizes}'

await callback.message.delete()
await callback.message.answer_media_group(media=photos)
await callback.message.answer(msg, reply_markup=kb.to_main, parse_mode='html')
Голосование за лучший ответ
Андрей Киреев Ученик (243) 1 год назад
Вам необходимо сохранить идентификаторы отправленных сообщений (альбома и описания товара) при отправке. Затем вы можете использовать метод delete_message для удаления каждого сообщения по его идентификатору.

Вот пример, как это может выглядеть в вашем коде:@router.callback_query(F.data == 'to_main')
async def to_main(callback: CallbackQuery):
# Удаление альбома фотографий
for photo in photos:
await callback.bot .delete_message(callback.message.chat.id, photo.message_id)

# Удаление сообщения с описанием товара
await callback.bot .delete_message(callback.message.chat.id, callback.message.message_id)

# Отправка главного меню
await callback.message.answer('Main menu', reply_markup=kb.main)
Обратите внимание, что вы должны иметь доступ к bot объекту, чтобы вызвать метод delete_message.
Похожие вопросы