Как удалить предыдущее сообщение в aiogram 3
В функции send_GetAccounts
пользователь отправляет сообщение боту и дальше в зависимости от условия бот отвечает на сообщение пользователя. Как сделать так что бы после того как бот ответит на сообщение пользователя, все предыдущие сообщение удалились ?
ПРИМЕР:
БОТ: Введите ссылку с токеном, полученный ЗДЕСЬ
ЮЗЕР: (ОТПРАВЛЯЕТ ССЫЛКУ)
БОТ: ССЫЛКА УСПЕШНО ПОЛУЧЕНА
И дальше после последнего сообщения бота все предыдущие сообщения должны быть удалены.
@router.callback_query(StateFilter(None), F.data == 'addAcc')
async def send_GetAccounts(callback: CallbackQuery, state: FSMContext):
await state.set_state(Auth.token)
await callback.message.edit_text('Введите ссылку с токеном, полученный <a href=vkhost.github.io>ЗДЕСЬ</a>:',
reply_markup=kb.AddingAccount, parse_mode='html', disable_web_page_preview=True)
@router.message(Auth.token)
async def get_token_and_auth(message: Message, state: FSMContext):
token_text = message.text
#получение токена из ссылки пользователя
token_match = re.search(r'token=(.*?)&expires_in', token_text)
if token_match:
token = token_match.group(1)
await state.update_data(token=token)
user_id = message.from_user.id
insert_into_db = await insert_token_into_database(user_id, token)
if insert_into_db:
try:
vk_auth = vk_api.VkApi(token=token)
vk = vk_auth.get_api()
user_info = vk.users.get()
first_name = user_info[0]['first_name']
last_name = user_info[0]['last_name']
await message.answer(f'Аккаунт <b>{first_name}</b> <b>{last_name}</b> успшено добавлен!', reply_markup=kb.Countinue, parse_mode='html')
await state.clear()
await message.delete()
except vk_api.AuthError as e:
await message.answer(f'Произошла ошибка при авторизации под данному токену!')
else:
await message.answer('Произошла ошибка при добавление данных в базу данных!')
else:
await message.answer("Не правильный формат ссылки!\nПопробуйте еще раз")```
Ответы (1 шт):
Автор решения: Сергей Иванов
→ Ссылка
Предварительно сохраняя chat_id
и message_id
:
from aiogram.types import Message
from aiogram.methods.delete_message import DeleteMessage
from config import Token
import asyncio
from aiogram import Bot, Dispatcher
dp = Dispatcher()
@dp.message(Command("start"))
async def start(message: Message):
await message.answer(f'{message.chat.id}\n{message.message_id}')
@dp.message(Command("delete"))
async def delete_msg(message:Message):
text = message.text.split()
chat_id, message_id = text[1], text[2]
global bot
await bot(DeleteMessage(chat_id=chat_id, message_id=str(message_id)))
async def main() -> None:
global bot
bot = Bot(token=Token)
await dp.start_polling(bot)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
asyncio.run(main())
/start
присылает мне chat_id
и message_id
:
/delete
я удаляю сообщение бота:
Вот одна из реализаций. Еще ты можешь сделать через:
await bot.delete_message(...)
ИЛИ:
msg = await message.answer("Синхронизация с сайтом")
#Между ними нужная логика
await msg.delete()