from bot.db.engine import get_db async def get_or_create( telegram_id: int, username: str | None = None, first_name: str | None = None, lang: str = "en", ) -> dict: db = await get_db() row = await db.execute_fetchall( "SELECT * FROM users WHERE telegram_id = ?", (telegram_id,) ) if row: return dict(row[0]) await db.execute( "INSERT INTO users (telegram_id, username, first_name, lang) VALUES (?, ?, ?, ?)", (telegram_id, username, first_name, lang), ) await db.commit() row = await db.execute_fetchall( "SELECT * FROM users WHERE telegram_id = ?", (telegram_id,) ) return dict(row[0]) async def update_lang(telegram_id: int, lang: str) -> None: db = await get_db() await db.execute("UPDATE users SET lang = ? WHERE telegram_id = ?", (lang, telegram_id)) await db.commit() async def increment_free(telegram_id: int) -> int: db = await get_db() await db.execute( "UPDATE users SET free_used = free_used + 1 WHERE telegram_id = ?", (telegram_id,), ) await db.commit() row = await db.execute_fetchall( "SELECT free_used FROM users WHERE telegram_id = ?", (telegram_id,) ) return row[0][0] async def get_free_used(telegram_id: int) -> int: db = await get_db() row = await db.execute_fetchall( "SELECT free_used FROM users WHERE telegram_id = ?", (telegram_id,) ) return row[0][0] if row else 0