LichessStatTgWeb/LichessClientTG_bot/migrate_tokens.py

67 lines
2.9 KiB
Python
Raw Normal View History

#!/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()