Не запускается прослушивание ссылок asyncio
я пишу бота, который прослушивает ссылки в обработчике сообщений и закидывает ссылки в список, при запуске приложения включается шедулер, который для каждой ссылки создает таску и дожидается выполнения всех задач в списке, после чего шедулер засыпает на определенное количество времени. Код:
# Bot initializations.
parser = Bot(TOKEN)
dp = Dispatcher(parser)
# HTML session for data crawling.
session = AsyncHTMLSession()
# List of the tasks.
links = []
tasks = []
async def wait_for_bookmaker(link: str):
response = await session.get(link)
await response.html.arender()
now_date = datetime.datetime.now().strftime('%d.%m.%Y - %H:%M')
deadline_for_match = response.html.find('.list-details__item__date', first=True).text
if now_date < deadline_for_match:
bookmakers_absence_inscription = response.html.find('.nodata', first=True)
if not bookmakers_absence_inscription:
table_contains_bookmakers = response.html.find('tbody', first=True)
bookmakers = table_contains_bookmakers.find('a')
for bookmaker in bookmakers:
if bookmaker.text == LOOKING_BOOKMAKER:
command_names = response.html.find('.list-breadcrumb__item__in')[-1].text
return await send_message_with_link_and_command_names(
{'command_names': command_names, 'link': link}
)
else:
return PINNACLE_LATE
async def send_message_with_link_and_command_names(data: dict):
message_text = data['command_names'] = '\n\n' + data['link']
await parser.send_message(chat_id=OWNER_ID, text=message_text)
async def scheduler(wait_duration: int):
while True:
for link in links:
task = asyncio.create_task(wait_for_bookmaker(link))
tasks.append(task)
await asyncio.gather(*tasks)
await asyncio.sleep(wait_duration)
@dp.message_handler(commands=['check'])
async def start_handler(message: Message):
await message.answer(text='Бот в исправном состоянии.')
@dp.message_handler()
async def listening_to_links(message: Message):
links.append(message.text)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
asyncio.run(scheduler(60))
Это должно работать так:
Пользователь отправил боту ссылку с матчем - программа ее мониторит раз в какое-то время, ожидая необходимый элемент на странице, если он появился, то бот отсылает пользователю об этом уведомление. Если же матч уже начался, то смысл искать этот элемент пропадает и мы закрываем таску.