LichessStatTgWeb/LichessClientTG_bot/migrate_tokens.py
vrubelroman 6cb5a9b99f Исправление двойного ответа и улучшение системы
- Исправлен баг с двойным ответом в /getgamers (добавлена обработка ошибок)
- Добавлена автоматическая миграция токенов при инициализации БД
- Исправлен веб-интерфейс - теперь берет токены из user_gamers
- Улучшен start.sh - создает бэкап базы перед перезапуском
- Добавлен export_db.sh для экспорта базы данных
- start.sh безопасно обновляет проект и сохраняет все данные
2025-10-28 21:34:35 +03:00

66 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
Миграция токенов из старой таблицы gamers в новую таблицу user_gamers
"""
import sqlite3
import sys
def migrate_tokens():
"""Migrate tokens from gamers table to user_gamers table"""
db_path = "/app/data/lichess_bot.db"
try:
with sqlite3.connect(db_path) as conn:
cursor = conn.cursor()
# Проверяем есть ли токены в gamers
cursor.execute("SELECT id, username, token FROM gamers WHERE token IS NOT NULL")
gamers_with_tokens = cursor.fetchall()
if not gamers_with_tokens:
print("В базе нет токенов для миграции")
return
print(f"Найдено {len(gamers_with_tokens)} игроков с токенами")
migrated = 0
for gamer_id, gamer_username, token in gamers_with_tokens:
# Находим всех пользователей, отслеживающих этого игрока
cursor.execute("SELECT user_id FROM user_gamers WHERE gamer_id = ?", (gamer_id,))
users = cursor.fetchall()
for (user_id,) in users:
# Проверяем есть ли уже токен у этого пользователя для этого игрока
cursor.execute(
"SELECT token FROM user_gamers WHERE user_id = ? AND gamer_id = ?",
(user_id, gamer_id)
)
existing_token = cursor.fetchone()
if existing_token and existing_token[0]:
# Токен уже есть, пропускаем
continue
# Переносим токен
cursor.execute(
"UPDATE user_gamers SET token = ? WHERE user_id = ? AND gamer_id = ?",
(token, user_id, gamer_id)
)
cursor.execute("SELECT username FROM telegram_users WHERE user_id = ?", (user_id,))
user_data = cursor.fetchone()
user_name = user_data[0] if user_data else f"ID:{user_id}"
print(f" - Перенесен токен для {gamer_username} -> пользователю @{user_name}")
migrated += 1
conn.commit()
print(f"\n✅ Миграция завершена. Перенесено {migrated} токенов")
except Exception as e:
print(f"❌ Ошибка при миграции: {e}")
sys.exit(1)
if __name__ == "__main__":
migrate_tokens()