switch ru/en

This commit is contained in:
vrubelroman 2025-11-20 12:43:00 +03:00
parent c16a11cf63
commit 123749415a
4 changed files with 241 additions and 81 deletions

View file

@ -28,13 +28,23 @@ class Database:
)
''')
# Add language_code column if it doesn't exist
# Add language_code column if it doesn't exist (Telegram language)
try:
cursor.execute("ALTER TABLE telegram_users ADD COLUMN language_code TEXT")
except sqlite3.OperationalError:
# Column already exists
pass
# Add bot_language column if it doesn't exist (user-selected bot language)
try:
cursor.execute("ALTER TABLE telegram_users ADD COLUMN bot_language TEXT DEFAULT 'en'")
# Set default value for existing users
cursor.execute("UPDATE telegram_users SET bot_language = 'en' WHERE bot_language IS NULL")
conn.commit()
except sqlite3.OperationalError:
# Column already exists
pass
# Create gamers table (Lichess players only)
cursor.execute('''
CREATE TABLE IF NOT EXISTS gamers (
@ -144,22 +154,30 @@ class Database:
def add_or_get_telegram_user(self, user_id: int, username: Optional[str] = None,
first_name: Optional[str] = None, last_name: Optional[str] = None,
language_code: Optional[str] = None) -> bool:
"""Add or update Telegram user"""
"""
Add or update Telegram user.
For new users, automatically sets bot_language based on Telegram language_code:
- 'ru' -> 'ru' (Russian)
- anything else -> 'en' (English)
"""
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute("SELECT user_id FROM telegram_users WHERE user_id = ?", (user_id,))
cursor.execute("SELECT user_id, bot_language FROM telegram_users WHERE user_id = ?", (user_id,))
existing = cursor.fetchone()
if not existing:
# New user - determine bot language from Telegram language_code
bot_language = 'ru' if language_code and language_code.lower().startswith('ru') else 'en'
cursor.execute(
"INSERT INTO telegram_users (user_id, username, first_name, last_name, language_code) VALUES (?, ?, ?, ?, ?)",
(user_id, username, first_name, last_name, language_code)
"INSERT INTO telegram_users (user_id, username, first_name, last_name, language_code, bot_language) VALUES (?, ?, ?, ?, ?, ?)",
(user_id, username, first_name, last_name, language_code, bot_language)
)
conn.commit()
logger.info(f"New user {user_id} added with bot_language={bot_language} (from Telegram language_code={language_code})")
return True
else:
# Update language_code if provided (always update, even if None to clear old value)
# Existing user - update language_code but keep bot_language unchanged
cursor.execute(
"UPDATE telegram_users SET language_code = ? WHERE user_id = ?",
(language_code, user_id)
@ -168,8 +186,28 @@ class Database:
return False
def get_user_language(self, user_id: int) -> str:
"""Always return English language"""
return 'en'
"""Get user's selected bot language from database"""
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute("SELECT bot_language FROM telegram_users WHERE user_id = ?", (user_id,))
result = cursor.fetchone()
if result and result[0]:
return result[0]
# Default to English if not set
return 'en'
def set_user_language(self, user_id: int, language: str) -> bool:
"""Set user's selected bot language"""
if language not in ['en', 'ru']:
return False
with sqlite3.connect(self.db_path) as conn:
cursor = conn.cursor()
cursor.execute(
"UPDATE telegram_users SET bot_language = ? WHERE user_id = ?",
(language, user_id)
)
conn.commit()
return cursor.rowcount > 0
def add_gamer(self, username: str) -> int:
"""Add a new gamer to the database (return gamer_id)"""