добавлены картинки с подсказкой как добавить игрока
This commit is contained in:
parent
ce586dcddb
commit
6ed6ab866e
4 changed files with 163 additions and 16 deletions
|
|
@ -1,8 +1,10 @@
|
|||
import asyncio
|
||||
import logging
|
||||
import sqlite3
|
||||
import os
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Dict, Any, Optional
|
||||
from pathlib import Path
|
||||
|
||||
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
|
||||
from telegram.ext import (
|
||||
|
|
@ -286,32 +288,153 @@ class LichessBot:
|
|||
pass
|
||||
|
||||
async def addgamer_start(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
"""Start addgamer command - simple username only"""
|
||||
"""Start addgamer command - show menu with options"""
|
||||
user_id = update.effective_user.id
|
||||
logger.info(f"addgamer_start called for user {user_id}")
|
||||
|
||||
# Check if we're already awaiting a username (prevent duplicate messages)
|
||||
if context and hasattr(context, "user_data") and context.user_data.get('awaiting_addgamer_username'):
|
||||
logger.info(f"addgamer_start: Already awaiting username for user {user_id}, skipping duplicate call")
|
||||
return
|
||||
|
||||
lang = self.get_user_language_from_update(update)
|
||||
try:
|
||||
# Mark that we are awaiting a username reply
|
||||
if context and hasattr(context, "user_data"):
|
||||
context.user_data['awaiting_addgamer_username'] = True
|
||||
await update.message.reply_text(t('addgamer_prompt', lang), parse_mode='HTML')
|
||||
logger.info(f"Addgamer prompt sent to user {user_id}")
|
||||
self.counters.increment('addgamer')
|
||||
keyboard = [
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
text=t('addgamer_btn_add', lang),
|
||||
callback_data="addgamer_add"
|
||||
)
|
||||
],
|
||||
[
|
||||
InlineKeyboardButton(
|
||||
text=t('addgamer_btn_how', lang),
|
||||
callback_data="addgamer_how"
|
||||
)
|
||||
],
|
||||
]
|
||||
reply_markup = InlineKeyboardMarkup(keyboard)
|
||||
await update.message.reply_text(
|
||||
t('addgamer_menu', lang),
|
||||
reply_markup=reply_markup
|
||||
)
|
||||
logger.info(f"Addgamer menu sent to user {user_id}")
|
||||
except Exception as e:
|
||||
logger.error(f"Error sending addgamer prompt: {e}")
|
||||
logger.error(f"Error sending addgamer menu: {e}")
|
||||
import traceback
|
||||
logger.error(traceback.format_exc())
|
||||
# Clear flag on error
|
||||
if context and hasattr(context, "user_data"):
|
||||
context.user_data['awaiting_addgamer_username'] = False
|
||||
# No conversation state returned; handler-based flow
|
||||
return
|
||||
|
||||
async def addgamer_show_prompt(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
"""Callback: show username prompt after user presses 'Add player'"""
|
||||
query = update.callback_query
|
||||
await query.answer()
|
||||
|
||||
user_id = query.from_user.id
|
||||
logger.info(f"addgamer_show_prompt called for user {user_id}")
|
||||
|
||||
# Clear previous state and mark that we're waiting for username
|
||||
if context and hasattr(context, "user_data"):
|
||||
context.user_data.clear()
|
||||
context.user_data['awaiting_addgamer_username'] = True
|
||||
|
||||
# Language from DB (for callbacks)
|
||||
if update.effective_user:
|
||||
self.db.add_or_get_telegram_user(
|
||||
user_id=update.effective_user.id,
|
||||
username=update.effective_user.username,
|
||||
first_name=update.effective_user.first_name,
|
||||
last_name=update.effective_user.last_name,
|
||||
language_code=update.effective_user.language_code
|
||||
)
|
||||
lang = self.db.get_user_language(user_id)
|
||||
|
||||
await query.message.reply_text(
|
||||
t('addgamer_prompt', lang),
|
||||
parse_mode='HTML'
|
||||
)
|
||||
logger.info(f"Addgamer prompt (from button) sent to user {user_id}")
|
||||
# Count real start of username input flow
|
||||
self.counters.increment('addgamer')
|
||||
|
||||
async def addgamer_show_help(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
"""Callback: show how to find username on Lichess (with images)"""
|
||||
query = update.callback_query
|
||||
if not query or not query.message:
|
||||
logger.error("addgamer_show_help: Invalid query or message")
|
||||
return
|
||||
|
||||
await query.answer()
|
||||
|
||||
user_id = query.from_user.id
|
||||
logger.info(f"addgamer_show_help called for user {user_id}")
|
||||
|
||||
# Language from DB (for callbacks)
|
||||
if update.effective_user:
|
||||
self.db.add_or_get_telegram_user(
|
||||
user_id=update.effective_user.id,
|
||||
username=update.effective_user.username,
|
||||
first_name=update.effective_user.first_name,
|
||||
last_name=update.effective_user.last_name,
|
||||
language_code=update.effective_user.language_code
|
||||
)
|
||||
lang = self.db.get_user_language(user_id)
|
||||
|
||||
# Определяем имя файла картинки в зависимости от языка
|
||||
# Для русской локализации - helpRU.jpeg, для английской - helpEN.jpeg
|
||||
image_filename = "helpRU.jpeg" if lang == 'ru' else "helpEN.jpeg"
|
||||
|
||||
# Определяем путь к картинке (она находится в той же папке, что и bot.py)
|
||||
bot_dir = Path(__file__).resolve().parent
|
||||
image_path = bot_dir / image_filename
|
||||
|
||||
# Пробуем альтернативные пути, если основной не найден
|
||||
possible_paths = [
|
||||
image_path, # В папке бота
|
||||
bot_dir.parent / image_filename, # В корне проекта
|
||||
Path("/home/vrubel/PROJECTS/LichessStatTgWeb/LichessClientTG_bot") / image_filename, # Абсолютный путь
|
||||
]
|
||||
|
||||
# Ищем существующий файл
|
||||
found_path = None
|
||||
for candidate in possible_paths:
|
||||
if candidate and candidate.exists():
|
||||
found_path = candidate
|
||||
logger.info(f"✅ Found {image_filename} at: {found_path}")
|
||||
break
|
||||
|
||||
if not found_path or not found_path.exists():
|
||||
error_msg = f"❌ Error: Could not find {image_filename}\n\nChecked paths:\n"
|
||||
for path in possible_paths:
|
||||
exists = path.exists() if path else False
|
||||
error_msg += f" • {path} (exists: {exists})\n"
|
||||
logger.error(error_msg)
|
||||
await query.message.reply_text(f"❌ Error: Could not find image file. Please check bot logs.")
|
||||
return
|
||||
|
||||
try:
|
||||
logger.info(f"Sending help image: {found_path} (language: {lang})")
|
||||
with open(found_path, "rb") as img:
|
||||
await query.message.reply_photo(photo=img)
|
||||
|
||||
logger.info(f"Successfully sent help image to user {user_id}")
|
||||
|
||||
# Устанавливаем флаг ожидания username, чтобы пользователь мог ввести его после просмотра картинки
|
||||
if context and hasattr(context, "user_data"):
|
||||
context.user_data['awaiting_addgamer_username'] = True
|
||||
|
||||
# Отправляем текст с запросом username
|
||||
await query.message.reply_text(
|
||||
t('addgamer_prompt', lang),
|
||||
parse_mode='HTML'
|
||||
)
|
||||
|
||||
# Считаем это началом процесса добавления игрока
|
||||
self.counters.increment('addgamer')
|
||||
except Exception as e:
|
||||
logger.error(f"Error sending lichess help images: {e}")
|
||||
import traceback
|
||||
logger.error(traceback.format_exc())
|
||||
try:
|
||||
await query.message.reply_text(f"❌ Error sending images: {e}")
|
||||
except Exception as e2:
|
||||
logger.error(f"Failed to send error message: {e2}")
|
||||
|
||||
async def addtoken_start(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
"""Start addtoken command - token required"""
|
||||
|
|
@ -1561,6 +1684,8 @@ class LichessBot:
|
|||
application.add_handler(CommandHandler("test_admin_notify", self.test_admin_notify))
|
||||
|
||||
# Callback handlers (order matters - more specific patterns first)
|
||||
application.add_handler(CallbackQueryHandler(self.addgamer_show_prompt, pattern="^addgamer_add$"))
|
||||
application.add_handler(CallbackQueryHandler(self.addgamer_show_help, pattern="^addgamer_how$"))
|
||||
application.add_handler(CallbackQueryHandler(self.handle_language_selection, pattern="^lang_"))
|
||||
application.add_handler(CallbackQueryHandler(self.handle_profile_selection, pattern="^profile_"))
|
||||
application.add_handler(CallbackQueryHandler(self.select_gamer_for_period, pattern="^select_gamer_period_"))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue