furmeet-bot/webproj/bot/tasks.py
2020-07-11 21:41:08 -03:00

65 lines
2.1 KiB
Python

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)