Реорганизация команд добавления игроков

- /adduser заменен на /addgamer (просто username без токена)
- Добавлена команда /addtoken (токен для получения данных по задачам)
- /addtoken добавляет токен к существующему игроку или создает нового
- Обновлены описания команд в /start и документации
- Добавлено описание команды /delgamer
This commit is contained in:
vrubelroman 2025-10-28 23:09:00 +03:00
parent c256d903f2
commit b12ce90874

View file

@ -81,7 +81,8 @@ class LichessBot:
"❌ Поражения: 4\n"
"🤝 Ничьи: 7\n\n"
"📋 Доступные команды:\n"
"/adduser - Добавить игрока Lichess для отслеживания\n"
"/addgamer - Добавить игрока Lichess для отслеживания (только username)\n"
"/addtoken - Добавить игрока с токеном для получения данных по задачам\n"
"/getgamers - Выбрать активного игрока (для которого будут работать команды /today и тд)\n"
"/delgamer - Удалить игрока из списка отслеживаемых\n"
"/today - Статистика за сегодня\n"
@ -91,32 +92,43 @@ class LichessBot:
"(активный игрок меняется в меню команды /getgamers)"
)
async def adduser_start(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Start adduser command"""
async def addgamer_start(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Start addgamer command - simple username only"""
await update.message.reply_text("👤 Введите Lichess username игрока для отслеживания:")
return WAITING_FOR_USERNAME
async def addtoken_start(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Start addtoken command - token required"""
await update.message.reply_text(
"🔑 Введите Lichess API токен, чтобы получать данные по задачам.\n"
"Токен создаётся в настройках профиля — дайте ему только право puzzle:read.\n"
"Если данные по задачам не нужны, то сейчас введите 0, затем укажите Lichess username."
"После этого будет добавлен игрок, соответствующий этому токену."
)
return WAITING_FOR_TOKEN
async def handle_token(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Handle token input"""
"""Handle token input for /addtoken"""
token = update.message.text.strip()
user_id = update.effective_user.id
if token == "0":
await update.message.reply_text("👤 Введите ваш Lichess username:")
return WAITING_FOR_USERNAME
else:
# Get username from token
profile = await self.lichess_api.get_user_profile(token)
if profile:
username = profile.get('username')
if username:
# Add gamer to database (without token)
# Get username from token
profile = await self.lichess_api.get_user_profile(token)
if profile:
username = profile.get('username')
if username:
# Check if this gamer is already tracked by this user
user_gamers = self.db.get_user_gamers(user_id)
existing_gamer = next((g for g in user_gamers if g['username'] == username), None)
if existing_gamer:
# Update token for existing gamer
self.db.add_user_gamer(user_id, existing_gamer['id'], token)
await update.message.reply_text(
f"✅ Токен добавлен для игрока {username}!"
)
else:
# Add new gamer and link with token
gamer_id = self.db.add_gamer(username)
# Link user to gamer WITH token
self.db.add_user_gamer(user_id, gamer_id, token)
# If this is the first gamer for this user, make it active
@ -125,30 +137,30 @@ class LichessBot:
self.db.set_user_active_gamer(user_id, gamer_id)
await update.message.reply_text(
f"✅ Игрок {username} успешно добавлен!"
f"✅ Игрок {username} добавлен с токеном!"
)
return ConversationHandler.END
else:
await update.message.reply_text(
"Не удалось получить username из токена. Попробуйте еще раз или введите 0 для ввода username вручную."
)
return WAITING_FOR_TOKEN
return ConversationHandler.END
else:
await update.message.reply_text(
"Неверный токен. Попробуйте еще раз или введите 0 для ввода username вручную."
"Не удалось получить username из токена. Попробуйте еще раз."
)
return WAITING_FOR_TOKEN
else:
await update.message.reply_text(
"❌ Неверный токен. Попробуйте еще раз."
)
return WAITING_FOR_TOKEN
async def handle_username(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Handle username input"""
"""Handle username input for /addgamer"""
username = update.message.text.strip()
user_id = update.effective_user.id
if username:
# Add gamer to database
# Add gamer to database (without token)
gamer_id = self.db.add_gamer(username)
# Link user to gamer
self.db.add_user_gamer(user_id, gamer_id)
# Link user to gamer (without token)
self.db.add_user_gamer(user_id, gamer_id, None)
# If this is the first gamer for this user, make it active
user_gamers = self.db.get_user_gamers(user_id)
@ -590,19 +602,29 @@ class LichessBot:
def setup_handlers(self, application: Application):
"""Setup all handlers"""
self.application = application # Store application reference
# Conversation handler for adduser
adduser_conv = ConversationHandler(
entry_points=[CommandHandler("adduser", self.adduser_start)],
# Conversation handler for addgamer (simple username only)
addgamer_conv = ConversationHandler(
entry_points=[CommandHandler("addgamer", self.addgamer_start)],
states={
WAITING_FOR_USERNAME: [MessageHandler(filters.TEXT & ~filters.COMMAND, self.handle_username)],
},
fallbacks=[CommandHandler("cancel", lambda u, c: ConversationHandler.END)]
)
# Conversation handler for addtoken (token required)
addtoken_conv = ConversationHandler(
entry_points=[CommandHandler("addtoken", self.addtoken_start)],
states={
WAITING_FOR_TOKEN: [MessageHandler(filters.TEXT & ~filters.COMMAND, self.handle_token)],
WAITING_FOR_USERNAME: [MessageHandler(filters.TEXT & ~filters.COMMAND, self.handle_username)],
},
fallbacks=[CommandHandler("cancel", lambda u, c: ConversationHandler.END)]
)
# Add all handlers
application.add_handler(CommandHandler("start", self.start))
application.add_handler(adduser_conv)
application.add_handler(addgamer_conv)
application.add_handler(addtoken_conv)
application.add_handler(CommandHandler("getgamers", self.getgamers))
application.add_handler(CommandHandler("delgamer", self.delgamer))
application.add_handler(CommandHandler("today", self.today))