forked from FOSS/ASF-Control-Bot
feat(bot): add async DB and FSM state handling
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
from aiogram.types import User as TelegramUser
|
||||
from sqlalchemy import select
|
||||
|
||||
from bot.config import ADMIN_ID
|
||||
from bot.db.models import User
|
||||
from bot.db.session import async_session
|
||||
|
||||
|
||||
async def upsert_user_from_telegram(telegram_user: TelegramUser | None) -> User | None:
|
||||
if telegram_user is None:
|
||||
return None
|
||||
|
||||
async with async_session() as session:
|
||||
result = await session.execute(
|
||||
select(User).where(User.telegram_id == telegram_user.id)
|
||||
)
|
||||
user = result.scalar_one_or_none()
|
||||
|
||||
if user is None:
|
||||
user = User(telegram_id=telegram_user.id)
|
||||
session.add(user)
|
||||
|
||||
user.username = telegram_user.username
|
||||
user.first_name = telegram_user.first_name
|
||||
user.last_name = telegram_user.last_name
|
||||
user.is_admin = telegram_user.id == ADMIN_ID
|
||||
|
||||
await session.commit()
|
||||
await session.refresh(user)
|
||||
return user
|
||||
Reference in New Issue
Block a user