switch ru/en
This commit is contained in:
parent
c16a11cf63
commit
123749415a
4 changed files with 241 additions and 81 deletions
|
|
@ -133,17 +133,19 @@ class LichessBot:
|
|||
logger.error(f"test_admin_notify failed: {e}")
|
||||
await update.message.reply_text(f"❌ Failed to trigger admin notification: {e}")
|
||||
def get_user_language_from_update(self, update: Update) -> str:
|
||||
"""Always return English language"""
|
||||
# Update user info in database
|
||||
"""Get user's selected bot language from database"""
|
||||
user = update.effective_user
|
||||
if user:
|
||||
# Update user info in database (this will auto-detect language for new users)
|
||||
self.db.add_or_get_telegram_user(
|
||||
user_id=user.id,
|
||||
username=user.username,
|
||||
first_name=user.first_name,
|
||||
last_name=user.last_name,
|
||||
language_code=None
|
||||
language_code=user.language_code
|
||||
)
|
||||
# Get user's selected bot language from database
|
||||
return self.db.get_user_language(user.id)
|
||||
return 'en'
|
||||
|
||||
async def start_existing_periodic_tasks(self):
|
||||
|
|
@ -1121,58 +1123,61 @@ class LichessBot:
|
|||
# Start periodic task for this gamer (send to user's personal messages)
|
||||
await self.start_periodic_task(selected_gamer, user_id, period)
|
||||
|
||||
async def check_language(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
"""Check and display current language settings"""
|
||||
async def set_lang(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
"""Show language selection menu"""
|
||||
user = update.effective_user
|
||||
if user:
|
||||
# Обновляем язык из update
|
||||
lang = self.get_user_language_from_update(update)
|
||||
|
||||
# Получаем язык из БД для отображения
|
||||
db_lang = self.db.get_user_language(user.id)
|
||||
|
||||
# Получаем language_code из БД напрямую
|
||||
with sqlite3.connect(self.db.db_path) as conn:
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("SELECT language_code FROM telegram_users WHERE user_id = ?", (user.id,))
|
||||
row = cursor.fetchone()
|
||||
db_language_code = row[0] if row and row[0] else None
|
||||
|
||||
message = (
|
||||
f"🌐 Language Info:\n"
|
||||
f"Current language: {lang}\n"
|
||||
f"DB language: {db_lang}\n"
|
||||
f"DB language_code: {db_language_code}\n"
|
||||
f"Update language_code: {user.language_code}\n\n"
|
||||
f"Language used: {lang}\n\n"
|
||||
f"Bot uses English language only."
|
||||
)
|
||||
await update.message.reply_text(message)
|
||||
self.counters.increment('lang')
|
||||
else:
|
||||
if not user:
|
||||
await update.message.reply_text("❌ Failed to get user information")
|
||||
return
|
||||
|
||||
# Get current language to show menu in user's language
|
||||
lang = self.get_user_language_from_update(update)
|
||||
|
||||
# Create keyboard with language buttons
|
||||
keyboard = [
|
||||
[
|
||||
InlineKeyboardButton("🇬🇧 English", callback_data="lang_en"),
|
||||
InlineKeyboardButton("🇷🇺 Русский", callback_data="lang_ru")
|
||||
]
|
||||
]
|
||||
reply_markup = InlineKeyboardMarkup(keyboard)
|
||||
|
||||
await update.message.reply_text(
|
||||
t('select_language', lang),
|
||||
reply_markup=reply_markup,
|
||||
parse_mode='HTML'
|
||||
)
|
||||
|
||||
async def reset_language(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
"""Reset user language in database - will be detected from /start"""
|
||||
user = update.effective_user
|
||||
if user:
|
||||
# Сбрасываем язык в БД (устанавливаем NULL)
|
||||
with sqlite3.connect(self.db.db_path) as conn:
|
||||
cursor = conn.cursor()
|
||||
cursor.execute(
|
||||
"UPDATE telegram_users SET language_code = NULL WHERE user_id = ?",
|
||||
(user.id,)
|
||||
)
|
||||
conn.commit()
|
||||
|
||||
# Language is always English
|
||||
lang = 'en'
|
||||
await update.message.reply_text(
|
||||
"✅ Language reset! Bot uses English language only."
|
||||
)
|
||||
self.counters.increment('resetlang')
|
||||
async def handle_language_selection(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
"""Handle language selection callback"""
|
||||
query = update.callback_query
|
||||
await query.answer()
|
||||
|
||||
user = query.from_user
|
||||
user_id = user.id
|
||||
selected_lang = query.data.split('_')[1] # 'en' or 'ru'
|
||||
|
||||
# Update user info in database
|
||||
self.db.add_or_get_telegram_user(
|
||||
user_id=user_id,
|
||||
username=user.username,
|
||||
first_name=user.first_name,
|
||||
last_name=user.last_name,
|
||||
language_code=user.language_code
|
||||
)
|
||||
|
||||
# Save selected language to database
|
||||
success = self.db.set_user_language(user_id, selected_lang)
|
||||
|
||||
if success:
|
||||
# Get message in selected language
|
||||
message = t('language_set_ru', selected_lang) if selected_lang == 'ru' else t('language_set_en', selected_lang)
|
||||
await query.edit_message_text(message)
|
||||
else:
|
||||
await update.message.reply_text("❌ Failed to get user information")
|
||||
# Use current language for error message
|
||||
lang = self.db.get_user_language(user_id)
|
||||
error_msg = "❌ Не удалось установить язык" if lang == 'ru' else "❌ Failed to set language"
|
||||
await query.edit_message_text(error_msg)
|
||||
|
||||
async def start_periodic_task(self, gamer: Dict[str, Any], user_id: int, period_minutes: int):
|
||||
"""Start periodic task for a gamer"""
|
||||
|
|
@ -1408,11 +1413,11 @@ class LichessBot:
|
|||
application.add_handler(CommandHandler("lastYear_or_1000games", self.last_year_or_1000games))
|
||||
application.add_handler(CommandHandler("support", self.support))
|
||||
application.add_handler(CommandHandler("setperiod", self.setperiod))
|
||||
application.add_handler(CommandHandler("lang", self.check_language))
|
||||
application.add_handler(CommandHandler("resetlang", self.reset_language))
|
||||
application.add_handler(CommandHandler("set_lang", self.set_lang))
|
||||
application.add_handler(CommandHandler("test_admin_notify", self.test_admin_notify))
|
||||
|
||||
# Callback handlers (order matters - more specific patterns first)
|
||||
application.add_handler(CallbackQueryHandler(self.handle_language_selection, pattern="^lang_"))
|
||||
application.add_handler(CallbackQueryHandler(self.select_gamer_for_period, pattern="^select_gamer_period_"))
|
||||
application.add_handler(CallbackQueryHandler(self.select_gamer, pattern="^select_"))
|
||||
application.add_handler(CallbackQueryHandler(self.handle_delete_gamer, pattern="^delete_"))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue