Реорганизация команд добавления игроков
- /adduser заменен на /addgamer (просто username без токена) - Добавлена команда /addtoken (токен для получения данных по задачам) - /addtoken добавляет токен к существующему игроку или создает нового - Обновлены описания команд в /start и документации - Добавлено описание команды /delgamer
This commit is contained in:
parent
c256d903f2
commit
b12ce90874
1 changed files with 55 additions and 33 deletions
|
|
@ -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))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue