[O] Create separate class for scheduler

This commit is contained in:
Hykilpikonna
2020-11-27 09:05:24 -05:00
parent c776ae3ca6
commit 927ab842f9
2 changed files with 72 additions and 50 deletions
+63
View File
@@ -0,0 +1,63 @@
import difflib
from datetime import datetime
from io import BytesIO
from telegram.ext import Job, CallbackContext, Updater
from src.commands import sendRequest
from src.database import Database
from src.utils import wrap, render
class Scheduler:
tasks: {str: {str: Job}} = {}
cache: {str: {str: str}} = {}
def __init__(self, database: Database, updater: Updater):
self.database = database
self.updater = updater
def create(self, user: str, taskName: str, request):
if user not in self.cache:
self.cache[user] = {}
def task(context: CallbackContext):
# Send request
text = wrap(sendRequest(request))
# First time http request
if taskName not in self.cache[user]:
self.cache[user][taskName] = text
# Compare diff
else:
# Generate diff
diffRaw = difflib.unified_diff(self.cache[user][taskName].splitlines(1), text.splitlines(1),
fromfile='before', tofile='after')
diff = ''.join(diffRaw)
self.cache[user][taskName] = text
if diff != '':
# Render diff
doc = BytesIO(render(diff))
time = datetime.now().strftime('%b %d %Y %H-%M-%S')
fileName = 'diff %s %s.png' % (taskName, time)
caption = '*%s Changed!*' % taskName
# Send as file
context.bot.send_document(int(user), doc, fileName, caption, parse_mode='markdown')
return task
def startTask(self, user: str, request):
name = request['name']
if user not in self.tasks:
self.tasks[user] = {}
self.tasks[user][name] = self.updater.job_queue.run_repeating(self.create(user, name, request), interval=request.get('interval', 120), first=0)
# Keep record
if not request['enabled']:
request['enabled'] = True
self.database.save()