Ответы пользователя по тегу AIOgram
  • Ошибка при скачивании aiohtpps?

    aiogram==2.25.1 и aiohttp>=3.8.0,<3.9.0 указывают, что они поддерживаются максимально до Python 3.10.
    Вы пытаетесь использовать Python 3.12

    Можете скачать и почитать исходники на PyPI
    Ответ написан
    Комментировать
  • Как обрабатывать свои события?

    Я бы в первую очередь прибегнул к такому подходу, однако не могу утверждать, что call_later работает так как предполагается с такими временными рамками. Обычно использовал с временными рамками до 2 минут
    Пример кода
    import asyncio
    import concurrent.futures
    from datetime import datetime, timedelta
    import os
    import shutil
    
    
    def delete_func():
        # Удаление временных файлов и создание каталога заново
        shutil.rmtree('tempfiles/')
        print('Folder deleted')
        os.mkdir(path='tempfiles/')
        print('Folder created')
    
    
    def repeat_delete():
        _loop = asyncio.get_running_loop()
        with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor:
            # Выполнение функции delete_func в отдельном потоке
            _loop.run_in_executor(executor, delete_func)
        # Вычисляем время до 4 утра следующего дня
        now = datetime.now()
        tomorrow_4am = datetime(now.year, now.month, now.day) + timedelta(days=1, hours=4)
        delta = tomorrow_4am - now
    
        # Выполняем повторный запуск repeat_delete через вычисленное время
        _loop.call_later(delta.total_seconds(), repeat_delete)
    
    
    async def main():
        ...
    
    
    if __name__ == '__main__':
        # Создание нового цикла событий asyncio
        loop = asyncio.new_event_loop()
        # Вызов repeat_delete через 1 секунду
        loop.call_later(1, repeat_delete)
        # Запуск основной функции
        loop.run_until_complete(main())
    Ответ написан
    Комментировать
  • Как правильно регистрировать хендлеры для импорта?

    1. Не нашел в вашем тексте упоминаемого файла update.py
    2. В файле main.py вы пытаетесь зарегистрировать хендлеры в хендлере
    main.py
    import logging
    
    
    async def on_startup(dispatcher):
        logging.basicConfig(
            level=logging.DEBUG,
            format=u'%(filename)s:%(lineno)d #%(levelname)-8s [%(asctime)s] - %(name)s - %(message)s',
        )
        logger.info("Starting bot")
    
        # Импортируем функции регистрации хендлеров
        from update_photo import register_new_photo
        # Регистрируем хендлеры
        register_new_photo(dispatcher)
    
    
    async def on_shutdown(dispatcher):
        logging.warning('Shutting down..')
        await dispatcher.storage.close()
        await dispatcher.storage.wait_closed()
        logging.warning('Bye!')
    
    
    if __name__ == '__main__':
        from aiogram.utils import executor
        from loader import dp
    
        executor.start_polling(dp,
                               skip_updates=True,  # Если нужно пропускаем апдейты
                               on_startup=on_startup,
                               on_shutdown=on_shutdown)

    loader.py

    import os
    
    from aiogram import Bot, Dispatcher
    from aiogram.contrib.fsm_storage.memory import MemoryStorage
    
    bot = Bot(token=os.getenv("TOKEN"))
    storage = MemoryStorage()
    dp = Dispatcher(bot=bot, storage=storage)

    Ответ написан