как удалять предыдущие сообщения 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()
)