Files
telegram-bot-for-manipulate…/app/handlers/registration.py

66 lines
3.0 KiB
Python
Raw Normal View History

2025-07-27 22:17:28 +03:00
import os
from asyncio import Event, wait_for, TimeoutError
2025-07-27 22:17:28 +03:00
from aiogram import Router, Bot
from aiogram.filters import CommandStart
from aiogram.types import Message, User
from sqlalchemy import insert, select
2025-09-25 22:41:11 +03:00
from loguru import logger
2025-07-27 22:17:28 +03:00
from keyboards import create_inline_kb
from database import async_session_, Worker
2025-09-25 22:41:11 +03:00
from filters import IsRegister
2025-07-27 22:17:28 +03:00
registration_router = Router()
2025-09-25 22:41:11 +03:00
registration_router.message.filter(IsRegister() or CommandStart())
2025-07-27 22:17:28 +03:00
registration_confirm: dict[int, Event] = {}
user_info_template = ("Новый пользователь ждет регистрации:\n"
"Имя: {}\n"
"Фамилия: {}\n"
"Юзернейм: @{}\n"
"ID: @msg_{}\n")
admins_ids = list(map(int, os.getenv("BOT_ADMINS").split(",")))
2025-07-27 22:17:28 +03:00
@registration_router.message(CommandStart())
2025-09-25 22:41:11 +03:00
async def start_command(message: Message, bot: Bot):
2025-07-27 22:17:28 +03:00
async with async_session_() as session:
2025-09-25 22:41:11 +03:00
result = await session.execute(select(Worker).where(Worker.telegram_id == message.from_user.id))
user = result.scalars().first()
2025-07-27 22:17:28 +03:00
if not user:
user = message.from_user
dict_for_inline = {f'reg_@{user.id}': 'Allow', f'del_@{user.id}': 'Reject'}
2025-07-27 22:17:28 +03:00
user_info = user_info_template.format(user.first_name, user.last_name if user.last_name else 'Не указана',
user.username if user.username else 'Не указан', user.id)
for admin in admins_ids:
try:
await bot.send_message(chat_id=admin, text=user_info)
await bot.send_message(chat_id=admin, text='Зарегистрировать пользователя',
reply_markup=create_inline_kb(width=2, **dict_for_inline))
2025-09-25 22:41:11 +03:00
await message.answer("Запрос на регистрацию отправлен администратору, ожидайте подтверждения.")
except Exception:
logger.error(f"{start_command.__name__} failed")
2025-07-27 22:17:28 +03:00
reg_confirm = Event()
registration_confirm[user.id] = reg_confirm
try:
await wait_for(reg_confirm.wait(), timeout=60)
2025-07-27 22:17:28 +03:00
async with async_session_() as local_session:
async with local_session.begin():
local_session.add(Worker(telegram_id=user.id, name=user.first_name))
2025-09-25 22:41:11 +03:00
await message.answer("Регистрация подтверждена, для просмотра доступных действий нажмите кнопку 'MENU'")
except TimeoutError:
await message.answer("Время ожидания истекло.")
del registration_confirm[user.id]
2025-07-27 22:17:28 +03:00
else:
await message.answer("Работа бота возобновлена")
2025-09-25 22:41:11 +03:00
@registration_router.message()
async def catch_message(message: Message):
await message.answer("Для работы с ботом, требуется регистрация\nНажмите /start для регистрации")