import datetime import sys import traceback import django.utils.timezone from background_task import background from background_task import models as taskmodels from django.db.models import Count from telegram.bot import Bot from . import models @background() def captcha_kicker(): for pendingCaptchaUser in models.PendingCaptchaUser.objects.all(): td: datetime.timedelta = (pendingCaptchaUser.created + datetime.timedelta(seconds=pendingCaptchaUser.lifetime)) - django.utils.timezone.now() sec_remain = int(td.total_seconds()) if sec_remain < 0: if sec_remain < -1800: pendingCaptchaUser.delete() continue bot_token = pendingCaptchaUser.bot_token bot = Bot(token=bot_token) try: bot.delete_message( chat_id=pendingCaptchaUser.group.telegram_id, message_id=pendingCaptchaUser.captcha_message_id, ) except: traceback.print_exc() try: bot.kick_chat_member( chat_id=pendingCaptchaUser.group.telegram_id, user_id=pendingCaptchaUser.user.telegram_id, ) except: traceback.print_exc() try: bot.unban_chat_member( chat_id=pendingCaptchaUser.group.telegram_id, user_id=pendingCaptchaUser.user.telegram_id, ) except: traceback.print_exc() pendingCaptchaUser.delete() captcha_kicker(schedule=1, repeat=10, repeat_until=None) @background() def clean_logs(): TaskModels = [ taskmodels.CompletedTask, taskmodels.Task, ] for TaskModel in TaskModels: for task_name in set(map(lambda a: a['task_name'], TaskModel.objects.values('task_name'))): for unwanted_object in taskmodels.Task.objects.filter(task_name=task_name).order_by('-id').all()[100:]: unwanted_object.delete() clean_logs(schedule=2, repeat=100, repeat_until=None)