furmeet-bot/webproj/bot/tasks.py

65 lines
2.1 KiB
Python
Raw Normal View History

2020-07-10 04:57:06 +00:00
import datetime
2020-07-11 23:43:27 +00:00
import sys
2020-07-12 00:41:08 +00:00
import traceback
2020-07-10 04:57:06 +00:00
2020-07-11 21:01:23 +00:00
import django.utils.timezone
2020-07-10 04:57:06 +00:00
from background_task import background
2020-07-11 23:43:27 +00:00
from background_task import models as taskmodels
from django.db.models import Count
2020-07-12 00:41:08 +00:00
from telegram.bot import Bot
2020-07-10 04:57:06 +00:00
from . import models
@background()
def captcha_kicker():
for pendingCaptchaUser in models.PendingCaptchaUser.objects.all():
2020-07-11 21:01:23 +00:00
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:
2020-07-10 04:57:06 +00:00
pendingCaptchaUser.delete()
continue
bot_token = pendingCaptchaUser.bot_token
bot = Bot(token=bot_token)
2020-07-11 03:34:48 +00:00
try:
2020-07-12 00:41:08 +00:00
bot.delete_message(
2020-07-11 03:34:48 +00:00
chat_id=pendingCaptchaUser.group.telegram_id,
2020-07-12 00:41:08 +00:00
message_id=pendingCaptchaUser.captcha_message_id,
2020-07-11 03:34:48 +00:00
)
except:
2020-07-12 00:41:08 +00:00
traceback.print_exc()
2020-07-11 03:34:48 +00:00
try:
2020-07-12 00:41:08 +00:00
bot.kick_chat_member(
2020-07-11 03:34:48 +00:00
chat_id=pendingCaptchaUser.group.telegram_id,
user_id=pendingCaptchaUser.user.telegram_id,
)
except:
2020-07-12 00:41:08 +00:00
traceback.print_exc()
2020-07-11 03:34:48 +00:00
try:
2020-07-12 00:41:08 +00:00
bot.unban_chat_member(
2020-07-11 03:34:48 +00:00
chat_id=pendingCaptchaUser.group.telegram_id,
2020-07-12 00:41:08 +00:00
user_id=pendingCaptchaUser.user.telegram_id,
2020-07-11 03:34:48 +00:00
)
except:
2020-07-12 00:41:08 +00:00
traceback.print_exc()
2020-07-10 04:57:06 +00:00
pendingCaptchaUser.delete()
captcha_kicker(schedule=1, repeat=10, repeat_until=None)
2020-07-11 23:43:27 +00:00
@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()
2020-07-12 00:41:08 +00:00
clean_logs(schedule=2, repeat=100, repeat_until=None)