как удалять предыдущие сообщения aiogram3

вот мой код надо сделать так, чтобы при отправке сообщения предыдущие сообщения удалялись

from aiogram import Router, Bot, F
from aiogram.filters import CommandStart, Command
from aiogram.types import Message, CallbackQuery
from app.inline import kbmain as kb
from app.inline import kbcurses
from aiogram.methods.delete_message import DeleteMessage

router = Router()

@router.message(Command('menu'))
async def echo(message: Message):
    await message.answer('menu: ')


@router.message(F.text == '/start')
async def inline(message: Message):
    await message.answer("Здравствуй! Я стилист. что вас интересует?", reply_markup=kb)


@router.callback_query(F.data == 'Зачем нужны курсы?')
async def whyneedcourses(callback: CallbackQuery):
    await callback.message.answer('Эти курсы нужны чтобы помочь вам сформировать личный гардероб')

Ответы (1 шт):

Автор решения: Рустам Рысаев

В вашем коде можно использовать метод delete_message для удаления предыдущих сообщений. Для этого необходимо сохранять ID сообщений, которые вы хотите удалить. Вот пример, как можно доработать ваш код, чтобы реализовать удаление предыдущих сообщений:

# Словарь для хранения ID предыдущих сообщений
last_messages = {}

@router.message(Command('menu'))
async def echo(message: Message):
    # Удаляем предыдущее сообщение, если оно есть
    if message.chat.id in last_messages:
        try:
            await bot.delete_message(chat_id=message.chat.id, message_id=last_messages[message.chat.id])
        except Exception:
            pass  # Игнорируем ошибки при удалении

    # Отправляем новое сообщение
    sent_message = await message.answer('menu: ')
    
    # Сохраняем ID нового сообщения
    last_messages[message.chat.id] = sent_message.message_id

@router.message(F.text == '/start')
async def inline(message: Message):
    # Удаляем предыдущее сообщение, если оно есть
    if message.chat.id in last_messages:
        try:
            await bot.delete_message(chat_id=message.chat.id, message_id=last_messages[message.chat.id])
        except Exception:
            pass

    # Отправляем новое сообщение
    sent_message = await message.answer("Здравствуй! Я стилист. что вас интересует?", reply_markup=kb)
    
    # Сохраняем ID нового сообщения
    last_messages[message.chat.id] = sent_message.message_id

@router.callback_query(F.data == 'Зачем нужны курсы?')
async def whyneedcourses(callback: CallbackQuery):
    # Удаляем предыдущее сообщение, если оно есть
    if callback.message.chat.id in last_messages:
        try:
            await bot.delete_message(chat_id=callback.message.chat.id, message_id=last_messages[callback.message.chat.id])
        except Exception:
            pass

    # Отправляем новое сообщение
    sent_message = await callback.message.answer(
        'Эти курсы нужны чтобы помочь вам сформировать личный гардероб'
    )
    
    # Сохраняем ID нового сообщения
    last_messages[callback.message.chat.id] = sent_message.message_id

либо еще проще, можно создать 1 клавиатуру:

from aiogram import Router, Bot, F
from aiogram.types import Message, CallbackQuery, InlineKeyboardButton, InlineKeyboardMarkup

router = Router()

# Создаем инлайн-клавиатуры с кнопками
def get_main_menu():
    return InlineKeyboardMarkup(inline_keyboard=[
        [InlineKeyboardButton(text="Зачем нужны курсы?", callback_data="why_courses")],
        [InlineKeyboardButton(text="Вернуться в меню", callback_data="main_menu")]
    ])

def get_why_courses_menu():
    return InlineKeyboardMarkup(inline_keyboard=[
        [InlineKeyboardButton(text="Подробнее", callback_data="details")],
        [InlineKeyboardButton(text="Вернуться в меню", callback_data="main_menu")]
    ])

@router.message(F.text == "/start")
async def start_menu(message: Message):
    await message.answer(
        "Здравствуй! Я стилист. Что вас интересует?",
        reply_markup=get_main_menu()
    )

@router.callback_query(F.data == "main_menu")
async def main_menu(callback: CallbackQuery):
    await callback.message.edit_text(
        "Здравствуй! Я стилист. Что вас интересует?",
        reply_markup=get_main_menu()
    )

@router.callback_query(F.data == "why_courses")
async def why_courses(callback: CallbackQuery):
    await callback.message.edit_text(
        "Эти курсы нужны, чтобы помочь вам сформировать личный гардероб.",
        reply_markup=get_why_courses_menu()
    )

@router.callback_query(F.data == "details")
async def course_details(callback: CallbackQuery):
    await callback.message.edit_text(
        "Подробности: Курсы включают базовые знания о стиле, подборе одежды и практические занятия.",
        reply_markup=get_main_menu()
    )

→ Ссылка