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