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

Как удалить предыдущее сообщение в aiogram 3 в python

Mtrix Ученик (9), открыт 1 неделю назад
В функции 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('Введите ссылку с токеном, полученный ЗДЕСЬ:',
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'Аккаунт {first_name} {last_name} успшено добавлен!', 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 ответ
Chromatic Scale Искусственный Интеллект (126293) 1 неделю назад
Чтобы управлять удалением сообщений в Telegram при использовании библиотеки aiogram 3, вы можете использовать метод `delete()` у объекта сообщения (`Message`). В вашем сценарии, где бот должен удалять предыдущие сообщения после ответа на сообщение пользователя, необходимо отслеживать эти сообщения и удалять их при выполнении условия.

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

```python
from aiogram import types

@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.delete()
# Отправляем новое сообщение и удаляем предыдущее сообщение бота
response_msg = await message.answer(f'Аккаунт <b>{first_name}</b> <b>{last_name}</b> успшено добавлен!', reply_markup=kb.Countinue, parse_mode='html')
# Опционально: удалить сообщение с приглашением ввести токен
await message.bot.delete_message(chat_id=message.chat.id, message_id=message.message_id-1)
await state.clear()
except vk_api.AuthError as e:
await message.answer(f'Произошла ошибка при авторизации под данному токену!')
else:
await message.answer('Произошла ошибка при добавление данных в базу данных!')
else:
await message.answer("Не правильный формат ссылки!\nПопробуйте еще раз")

# В этом коде предполагается, что бот умеет получать доступ к ID предыдущих сообщений.
# Если сообщения не отслеживаются, их может быть сложнее удалить.
```

Обратите внимание, что для успешного удаления сообщений бот должен иметь соответствующие права администратора в чате, чтобы управлять сообщениями других пользователей. Если вы работаете с личными сообщениями или бот является администратором чата с соответствующими правами, проблем с удалением быть не должно.
Похожие вопросы