Добавлена команда /delgamer для удаления игроков
- Добавлен метод remove_user_gamer в database.py - Добавлена команда /delgamer с интерактивным списком игроков - Добавлен callback handler для удаления игроков - Если игрок удаляется у всех пользователей, он удаляется из gamers - Игроки показываются с рейтингами и статусом
This commit is contained in:
parent
539e0f3aa4
commit
e59bbb7d0e
2 changed files with 123 additions and 0 deletions
|
|
@ -83,6 +83,7 @@ class LichessBot:
|
|||
"📋 Доступные команды:\n"
|
||||
"/adduser - Добавить игрока Lichess для отслеживания\n"
|
||||
"/getgamers - Выбрать активного игрока (для которого будут работать команды /today и тд)\n"
|
||||
"/delgamer - Удалить игрока из списка отслеживаемых\n"
|
||||
"/today - Статистика за сегодня\n"
|
||||
"/yesterday - Статистика за вчера\n"
|
||||
"/week - Статистика за неделю\n"
|
||||
|
|
@ -269,6 +270,100 @@ class LichessBot:
|
|||
else:
|
||||
await query.edit_message_text("❌ Игрок не найден")
|
||||
|
||||
async def delgamer(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
"""Show gamers list for deletion"""
|
||||
user_id = update.effective_user.id
|
||||
gamers = self.db.get_user_gamers(user_id)
|
||||
|
||||
if not gamers:
|
||||
await update.message.reply_text("📭 У вас нет отслеживаемых игроков.")
|
||||
return
|
||||
|
||||
# Show loading message
|
||||
loading_msg = await update.message.reply_text("🔄 Загружаем список игроков...")
|
||||
|
||||
# Create text message with stats
|
||||
text_lines = []
|
||||
keyboard = []
|
||||
|
||||
for gamer in gamers:
|
||||
status = "🟢" if gamer['is_active'] else "⚪"
|
||||
username = gamer['username']
|
||||
|
||||
# Get user ratings from Lichess API
|
||||
ratings_data = await self.lichess_api.get_user_ratings(username)
|
||||
|
||||
if ratings_data and 'perfs' in ratings_data:
|
||||
perfs = ratings_data['perfs']
|
||||
bullet_rating = perfs.get('bullet', {}).get('rating', 'N/A')
|
||||
blitz_rating = perfs.get('blitz', {}).get('rating', 'N/A')
|
||||
rapid_rating = perfs.get('rapid', {}).get('rating', 'N/A')
|
||||
else:
|
||||
bullet_rating = blitz_rating = rapid_rating = 'N/A'
|
||||
|
||||
period_minutes = gamer.get('period_minutes', 0)
|
||||
period_text = f" · {period_minutes}м" if period_minutes > 0 else ""
|
||||
|
||||
text_lines.append(
|
||||
f"{status} <b>{username}</b> "
|
||||
f"⚡ {bullet_rating} 🔥 {blitz_rating} 🐇 {rapid_rating}{period_text}"
|
||||
)
|
||||
|
||||
# Add delete button
|
||||
keyboard.append([InlineKeyboardButton(
|
||||
text=f"🗑️ {username}",
|
||||
callback_data=f"delete_{gamer['id']}"
|
||||
)])
|
||||
|
||||
gamers_text = "🗑️ <b>Выберите игрока для удаления:</b>\n\n" + "\n".join(text_lines)
|
||||
|
||||
reply_markup = InlineKeyboardMarkup(keyboard)
|
||||
|
||||
# Edit the loading message with the results
|
||||
try:
|
||||
await loading_msg.edit_text(
|
||||
gamers_text,
|
||||
parse_mode='HTML',
|
||||
reply_markup=reply_markup
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"Error editing message: {e}")
|
||||
try:
|
||||
await loading_msg.delete()
|
||||
except:
|
||||
pass
|
||||
await update.message.reply_text(
|
||||
gamers_text,
|
||||
parse_mode='HTML',
|
||||
reply_markup=reply_markup
|
||||
)
|
||||
|
||||
async def handle_delete_gamer(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||
"""Handle gamer deletion"""
|
||||
query = update.callback_query
|
||||
await query.answer()
|
||||
|
||||
user_id = query.from_user.id
|
||||
gamer_id = int(query.data.split('_')[1])
|
||||
|
||||
# Get gamer info before deletion
|
||||
gamers = self.db.get_user_gamers(user_id)
|
||||
gamer_to_delete = next((g for g in gamers if g['id'] == gamer_id), None)
|
||||
|
||||
if gamer_to_delete:
|
||||
username = gamer_to_delete['username']
|
||||
deleted = self.db.remove_user_gamer(user_id, gamer_id)
|
||||
|
||||
if deleted:
|
||||
await query.edit_message_text(
|
||||
f"✅ Игрок <b>{username}</b> удален из списка отслеживаемых.",
|
||||
parse_mode='HTML'
|
||||
)
|
||||
else:
|
||||
await query.edit_message_text("❌ Не удалось удалить игрока")
|
||||
else:
|
||||
await query.edit_message_text("❌ Игрок не найден")
|
||||
|
||||
async def get_stats(self, update: Update, context: ContextTypes.DEFAULT_TYPE, period: str):
|
||||
"""Get statistics for a period"""
|
||||
user_id = update.effective_user.id
|
||||
|
|
@ -509,6 +604,7 @@ class LichessBot:
|
|||
application.add_handler(CommandHandler("start", self.start))
|
||||
application.add_handler(adduser_conv)
|
||||
application.add_handler(CommandHandler("getgamers", self.getgamers))
|
||||
application.add_handler(CommandHandler("delgamer", self.delgamer))
|
||||
application.add_handler(CommandHandler("today", self.today))
|
||||
application.add_handler(CommandHandler("yesterday", self.yesterday))
|
||||
application.add_handler(CommandHandler("week", self.week))
|
||||
|
|
@ -516,6 +612,7 @@ class LichessBot:
|
|||
|
||||
# Callback handlers
|
||||
application.add_handler(CallbackQueryHandler(self.select_gamer, pattern="^select_"))
|
||||
application.add_handler(CallbackQueryHandler(self.handle_delete_gamer, pattern="^delete_"))
|
||||
application.add_handler(CallbackQueryHandler(self.select_period, pattern="^period_"))
|
||||
|
||||
def main():
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue