Еще один человек бросился писать ботов, не озаботившись изучить азы асинхронного программирования.
Если очень коротко: пока твой код делает что угодно кроме await-вызова,
остальной бот стоит.
То есть:
time.sleep(10) - весь бот стоит и спит 10 секунд
await asyncio.sleep(10) - текущая корутина стоит и спит 10 секунд, но в это время могут выполняться другие корутины. Например, реакция на внешние события.
Что это тут у нас?
while True:
schedule.run_pending()
time.sleep(1)
Мало того, что бесконечный цикл, так ещё и ожидание делаешь через time.sleep(), который про асинхронность не знает.
И далее. А на кой овощ тебе вообще использовать schedule, если тебе требуется простое периодическое действие? Особенно с учётом того, что schedule - это тоже синхронная библиотека. Т.е. ты из асихронного бота вызывает синхронный код schedule, а потом оттуда будешь вызывать асинхронные методы отправки сообщений? Хороший способ усложнить себе жизнь!
async def check_if_notifications_are_needed(self):
pass
#а ниже будет что-то типа
async def run_check(self):
while True:
await self.check_if_notifications_are_needed()
await asyncio.sleep(3600) #серьезно, зачем проверять каждые 5 секунд если достаточно раз в час?