65 lines
2.1 KiB
Python
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)
|