import asyncio import random import yaml import aiocron import telethon import pgbotlib.response import pgbotlib.misc class Cron: def __init__(self, config: dict, client: telethon.TelegramClient, responder: pgbotlib.response.Responder) -> None: schedule_conf = config.get('schedule', pgbot.misc.Paths.SCHEDULE) with open(schedule_conf, '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: wait_seconds = random.randint(0, job['rand']) * 60 await asyncio.sleep(wait_seconds) 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))