fix registration,add filter

This commit is contained in:
2025-09-25 22:41:11 +03:00
parent bbf2b1e6f9
commit 9fae1cbe1c

View File

@@ -1,17 +1,18 @@
import os import os
from asyncio import Event, wait_for, TimeoutError from asyncio import Event, wait_for, TimeoutError
from aiogram import Router, Bot from aiogram import Router, Bot
from aiogram.filters import CommandStart from aiogram.filters import CommandStart
from aiogram.types import Message, User from aiogram.types import Message, User
from sqlalchemy import insert, select from sqlalchemy import insert, select
from loguru import logger
from keyboards import create_inline_kb from keyboards import create_inline_kb
from database import async_session_, Worker from database import async_session_, Worker
from filters import IsRegister
registration_router = Router() registration_router = Router()
registration_router.message.filter(IsRegister() or CommandStart())
registration_confirm: dict[int, Event] = {} registration_confirm: dict[int, Event] = {}
user_info_template = ("Новый пользователь ждет регистрации:\n" user_info_template = ("Новый пользователь ждет регистрации:\n"
"Имя: {}\n" "Имя: {}\n"
@@ -23,13 +24,11 @@ admins_ids = list(map(int, os.getenv("BOT_ADMINS").split(",")))
@registration_router.message(CommandStart()) @registration_router.message(CommandStart())
async def registration_command(message: Message, bot: Bot): async def start_command(message: Message, bot: Bot):
async with async_session_() as session: async with async_session_() as session:
async with session.begin(): result = await session.execute(select(Worker).where(Worker.telegram_id == message.from_user.id))
result = await session.execute(select(Worker).where(Worker.telegram_id == message.from_user.id)) user = result.scalars().first()
user = result.scalars().first()
if not user: if not user:
user = message.from_user user = message.from_user
dict_for_inline = {f'reg_@{user.id}': 'Allow', f'del_@{user.id}': 'Reject'} dict_for_inline = {f'reg_@{user.id}': 'Allow', f'del_@{user.id}': 'Reject'}
user_info = user_info_template.format(user.first_name, user.last_name if user.last_name else 'Не указана', user_info = user_info_template.format(user.first_name, user.last_name if user.last_name else 'Не указана',
@@ -39,8 +38,11 @@ async def registration_command(message: Message, bot: Bot):
await bot.send_message(chat_id=admin, text=user_info) await bot.send_message(chat_id=admin, text=user_info)
await bot.send_message(chat_id=admin, text='Зарегистрировать пользователя', await bot.send_message(chat_id=admin, text='Зарегистрировать пользователя',
reply_markup=create_inline_kb(width=2, **dict_for_inline)) reply_markup=create_inline_kb(width=2, **dict_for_inline))
except Exception as err: await message.answer("Запрос на регистрацию отправлен администратору, ожидайте подтверждения.")
pass
except Exception:
logger.error(f"{start_command.__name__} failed")
reg_confirm = Event() reg_confirm = Event()
registration_confirm[user.id] = reg_confirm registration_confirm[user.id] = reg_confirm
try: try:
@@ -49,7 +51,7 @@ async def registration_command(message: Message, bot: Bot):
async with local_session.begin(): async with local_session.begin():
local_session.add(Worker(telegram_id=user.id, name=user.first_name)) local_session.add(Worker(telegram_id=user.id, name=user.first_name))
await message.answer("Регистрация подтверждена") await message.answer("Регистрация подтверждена, для просмотра доступных действий нажмите кнопку 'MENU'")
except TimeoutError: except TimeoutError:
await message.answer("Время ожидания истекло.") await message.answer("Время ожидания истекло.")
@@ -57,3 +59,8 @@ async def registration_command(message: Message, bot: Bot):
else: else:
await message.answer("Работа бота возобновлена") await message.answer("Работа бота возобновлена")
@registration_router.message()
async def catch_message(message: Message):
await message.answer("Для работы с ботом, требуется регистрация\nНажмите /start для регистрации")