48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
|
import logging
|
||
|
from typing import Dict, Any
|
||
|
|
||
|
from aiogram.types import User
|
||
|
from aiogram_dialog import DialogManager
|
||
|
from sqlalchemy import select
|
||
|
from sqlalchemy.exc import SQLAlchemyError
|
||
|
|
||
|
from bot.database.models import UserModel
|
||
|
from bot.database.db import async_session
|
||
|
|
||
|
|
||
|
async def username_getter(
|
||
|
dialog_manager: DialogManager, event_from_user: User, **kwargs
|
||
|
) -> Dict[str, Any]:
|
||
|
try:
|
||
|
async with async_session() as session:
|
||
|
user = await session.scalar(
|
||
|
select(UserModel).where(UserModel.tg_id == event_from_user.id)
|
||
|
)
|
||
|
|
||
|
if user:
|
||
|
return {
|
||
|
"username": user.username,
|
||
|
"balance": user.balance,
|
||
|
"purchased": user.purchased,
|
||
|
}
|
||
|
else:
|
||
|
logging.warning(f"User with tg_id {event_from_user.id} not found in database.")
|
||
|
return {
|
||
|
"username": event_from_user.username,
|
||
|
"balance": 0,
|
||
|
"purchased": 0,
|
||
|
}
|
||
|
except SQLAlchemyError as e:
|
||
|
logging.error(f"Database error: {e}", exc_info=True)
|
||
|
return {
|
||
|
"username": event_from_user.username,
|
||
|
"balance": 0,
|
||
|
"purchased": 0,
|
||
|
}
|
||
|
except Exception as e:
|
||
|
logging.error(f"An unexpected error occurred: {e}", exc_info=True)
|
||
|
return {
|
||
|
"username": event_from_user.username,
|
||
|
"balance": 0,
|
||
|
"purchased": 0,
|
||
|
}
|