import time import random import yaml import aiocron import telethon import pgbotlib.response class Cron: def __init__(self, config: dict, client: telethon.TelegramClient, responder: pgbotlib.response.Responder) -> None: with open(config['schedule'], 'r', encoding='utf-8') as data: self.sched = yaml.safe_load(data.read()) self.responder = responder self.client = client def __mkjob(self, job: dict) -> callable: tokens = frozenset(job['tokens'].split(',')) async def send_message() -> None: if 'rand' in job: time.sleep(random.randint(0, job['rand']) * 60) message = self.responder.get_response(tokens) message = self.responder.api_match(message, '') await self.client.send_message(job['chat'], message) return send_message def plan(self) -> None: for job in self.sched: aiocron.crontab(job['cron'], func=self.__mkjob(job))