forked from FOSS/ASF-Control-Bot
31 lines
927 B
Python
31 lines
927 B
Python
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
|