автоудаление сообщений, истории

В телеграм есть стандартная функция - автоудаление сообщений чата.

Как настроить в боте в aiogram так же, чтобы в общем история в чате хранилась только одни сутки, например.


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

Автор решения: Turbo Bum

Для настройки автоудаления сообщений в чате с помощью бота на aiogram можно использовать следующий подход:

  1. Импортируйте необходимые библиотеки:

    from aiogram import Bot, Dispatcher, types
    from datetime import datetime, timedelta
    
  2. Создать функцию, которая будет удалять сообщения старше одного дня:

    async def delete_old_messages(bot: Bot, chat_id: int):
    """
    Функция для удаления сообщений старше 1 дня в указанном чате.
    """
    one_day_ago = datetime.now() - timedelta(days=1)
    async for message in bot.get_chat_history(chat_id):
        if message.date < one_day_ago:
            try:
            await bot.delete_message(chat_id, message.message_id)
        except:
            pass
    
  3. Вызывайте эту функцию периодически, например, каждый день:

    from aiogram.utils.executor import start_polling
    async def on_startup(dp: Dispatcher):
        print('Bot started')
        chat_id = 'YOUR_CHAT_ID'  # Замените на ID вашего чата
        while True:
            await delete_old_messages(dp.bot, chat_id)
            await asyncio.sleep(86400)  # Ждем 1 день перед следующим вызовом
    
    if __name__ == '__main__':
        start_polling(on_startup)
    

Попробуйте такой подход, и не забудьте подставить нужные вам значения. (Всё сработает, если у бота есть права на удаление).

→ Ссылка