mirror of
https://gitflic.ru/project/maks1ms/ocab.git
synced 2025-03-14 22:33:48 +03:00
91 lines
3.4 KiB
Python
91 lines
3.4 KiB
Python
# flake8: noqa
|
||
|
||
import asyncio
|
||
import random
|
||
from threading import Thread
|
||
|
||
from aiogram import Bot
|
||
from aiogram.types import Message
|
||
from aiogram.types import inline_keyboard_button as types
|
||
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
||
|
||
from src.ocab_modules.standard.config.config import get_telegram_check_bot
|
||
from src.ocab_modules.standard.database.db_api import *
|
||
from src.ocab_modules.standard.moderation.moderation import (
|
||
ban_user,
|
||
mute_user,
|
||
unmute_user,
|
||
)
|
||
from src.ocab_modules.standard.roles.roles import Roles
|
||
|
||
|
||
async def create_math_task():
|
||
first_number = random.randint(1, 100) # nosec
|
||
second_number = random.randint(1, 100) # nosec
|
||
answer = first_number + second_number
|
||
fake_answers = []
|
||
for i in range(3):
|
||
diff = random.randint(1, 10) # nosec
|
||
diff_sign = random.choice(["+", "-"]) # nosec
|
||
fake_answers.append(answer + diff if diff_sign == "+" else answer - diff)
|
||
fake_answers.append(answer)
|
||
random.shuffle(fake_answers)
|
||
return [answer, first_number, second_number, fake_answers]
|
||
|
||
|
||
async def ban_user_timer(chat_id: int, user_id: int, time: int, bot: Bot):
|
||
await asyncio.sleep(time)
|
||
if get_user(user_id) is not None:
|
||
pass
|
||
else:
|
||
await ban_user()
|
||
|
||
|
||
async def check_new_user(message: Message, bot: Bot):
|
||
print("check_new_user")
|
||
if get_telegram_check_bot():
|
||
# Проверяем наличие пользователя в базе данных
|
||
|
||
if get_user(message.from_user.id) is None:
|
||
# Выдаём пользователю ограничение на отправку сообщений на 3 минуты
|
||
ban_task = Thread(
|
||
target=ban_user_timer,
|
||
args=(message.chat.id, message.from_user.id, 180, bot),
|
||
)
|
||
ban_task.start()
|
||
# Создаём задачу с отложенным выполнением на 3 минуты
|
||
|
||
math_task = await create_math_task()
|
||
text = f"{math_task[1]} + {math_task[2]}"
|
||
builder = InlineKeyboardBuilder()
|
||
for answer in math_task[3]:
|
||
if answer == math_task[0]:
|
||
builder.add(
|
||
types.InlineKeyboardButton(
|
||
text=answer, callback_data=f"check_math_task_true"
|
||
)
|
||
)
|
||
else:
|
||
builder.add(
|
||
types.InlineKeyboardButton(
|
||
text=answer, callback_data=f"check_math_task_false"
|
||
)
|
||
)
|
||
await message.reply(
|
||
f"Приветствую, {message.from_user.first_name}!\n"
|
||
f"Для продолжения работы с ботом, пожалуйста, решите математический пример в течении 3х минут:\n"
|
||
f"*{text}*",
|
||
reply_markup=builder.as_markup(),
|
||
)
|
||
|
||
|
||
async def math_task_true(message: Message, bot: Bot):
|
||
await message.reply(f"Верно! Добро пожаловать в чат {message.from_user.first_name}")
|
||
await unmute_user(message.chat.id, message.from_user.id, bot)
|
||
add_user(
|
||
message.from_user.id,
|
||
message.from_user.first_name + " " + message.from_user.last_name,
|
||
message.from_user.username,
|
||
)
|
||
pass
|