85 lines
3.4 KiB
Python
85 lines
3.4 KiB
Python
"""
|
|
Полный сброс прогресса пользователя.
|
|
Очищает ВСЕ данные по играм, урокам, чат-учителю, достижениям.
|
|
Не трогает: users (остаётся), tts_cache (аудио).
|
|
|
|
Запуск: python3 full_reset.py
|
|
"""
|
|
import asyncio
|
|
import asyncpg
|
|
from config import DB_CONFIG
|
|
|
|
USER_ID = 6694989403
|
|
|
|
|
|
async def main():
|
|
pool = await asyncpg.create_pool(**DB_CONFIG)
|
|
|
|
async with pool.acquire() as conn:
|
|
# Проверяем пользователя
|
|
user_exists = await conn.fetchval("""
|
|
SELECT 1 FROM users WHERE telegram_id = $1
|
|
""", USER_ID)
|
|
|
|
if not user_exists:
|
|
print(f"❌ Пользователь {USER_ID} не найден!")
|
|
await pool.close()
|
|
return
|
|
|
|
# Список таблиц для очистки (по user_id)
|
|
user_tables = [
|
|
"user_progress", # Филворды
|
|
"sentence_progress", # Предложения
|
|
"typing_progress", # Печать
|
|
"word_quiz_progress", # Выбери слово
|
|
"bubble_words_progress", # Пузыри слов
|
|
"user_learning_answers", # Ответы на уроки
|
|
"user_lesson_progress", # Прогресс уроков
|
|
"user_topic_progress", # Прогресс тем
|
|
"user_skill_mastery", # Мастерство
|
|
"learning_sessions", # Сессии обучения
|
|
"teacher_chat_history", # История чата учителя
|
|
"teacher_ai_usage", # AI-команды
|
|
"chat_history", # AI-чат
|
|
"chat_usage", # Использование AI
|
|
"user_achievements", # Достижения
|
|
"daily_logins", # Входы
|
|
"ai_user_context", # AI-контекст
|
|
]
|
|
|
|
total_deleted = 0
|
|
|
|
for table in user_tables:
|
|
try:
|
|
result = await conn.execute(f"""
|
|
DELETE FROM {table} WHERE user_id = $1
|
|
""", USER_ID)
|
|
affected = int(result.split()[-1])
|
|
total_deleted += affected
|
|
print(f"🗑️ {table}: удалено {affected}")
|
|
except Exception as e:
|
|
print(f"⚠️ {table}: {str(e)}")
|
|
|
|
# Сбрасываем last_completed_level
|
|
await conn.execute("""
|
|
UPDATE users SET last_completed_level = 0, current_level = 'A1'
|
|
WHERE telegram_id = $1
|
|
""", USER_ID)
|
|
print("✅ last_completed_level = 0, current_level = A1")
|
|
|
|
# Очищаем архив ответов
|
|
try:
|
|
result = await conn.execute("""
|
|
DELETE FROM user_learning_answers_archive WHERE user_id = $1
|
|
""", USER_ID)
|
|
print(f"🗑️ user_learning_answers_archive: удалено {result.split()[-1]}")
|
|
except Exception as e:
|
|
print(f"⚠️ archive: {str(e)}")
|
|
|
|
await pool.close()
|
|
print(f"\n🎉 Готово! Удалено {total_deleted} записей.")
|
|
print("Можно начинать тестирование с чистого листа!")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main()) |