# В этом гайде мы посмотрим, как задавать программе регулярные задачи без aioschedule.
# Сначала нужно создать функцию, которая будет выполняться через равные промежутки времени.
# Свою функцию я приводить не буду, потому что у нее очень много зависимостей, которые тогда тоже нужно будет привести)
# Назовем нашу функцию check_updates.
# Но есть один очень важный момент: после всех значимых строк этой функции обязательно нужно ставить asyncio.sleep,
# хотя бы на короткое время, пусть даже на 1 секунду. Это позволит высвободить потоки под новые задачи.
# Иначе ваша программа будет непредсказуемо останавливаться и выдавать такую ошибку:
"""
ERROR:asyncio:Task was destroyed but it is pending!
task: <Task pending name='Task-32' coro=<Dispatcher._process_polling_updates() running at C:\Users\...\lib\site-packages\aiogram\dispatcher\dispatcher.py:415> wait_for=<_GatheringFuture pending cb=[Task.task_wakeup()]>>
"""
# Единственное известное мне решение — asyncio.sleep(1) в конце повторяемой функции.
# P.s.: задумалась и поняла, что такая функция не может иметь ключевое слово return, так как тогда интерпретатор просто не дойдет до asyncio.cleep.
# Тепеь нам надо "обернуть" ее в инструкцию для программы: выполнил - подождал - выполнил - подождал.
# Вот эту функцию кладем в файл __main__, до функции main:
async def timer(wait, bot):
while True:
await check_updates(bot)
await asyncio.sleep(wait)
# Аргумент wait тоже необходим. Получается, после каждого повторения подождать нужно целых 2 раза.
# Наконец, эту строчку пишем в функцию main файла __main__
# Думаю, вместо 10 в wait можно передать и время поменьше
asyncio.create_task(timer(10, bot))
# Готово! Бот будет выполнять задание каждые 10 (ну, чуть больше) секунд