#!/usr/bin/env python3 """ Финальный отчет о состоянии Quiz Bot проекта """ import os import sys from pathlib import Path # Добавляем путь к проекту project_root = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, project_root) def print_banner(): print("🤖 QUIZ BOT - ФИНАЛЬНЫЙ ОТЧЕТ") print("=" * 60) def check_structure(): """Проверка структуры проекта""" print("📁 СТРУКТУРА ПРОЕКТА:") required_structure = { 'src/bot.py': 'Основной файл бота', 'src/database/database.py': 'Менеджер базы данных', 'src/services/csv_service.py': 'Сервис загрузки CSV', 'config/config.py': 'Конфигурация', 'data/quiz_bot.db': 'База данных SQLite', 'requirements.txt': 'Зависимости Python', '.env': 'Переменные окружения', 'README.md': 'Документация', 'Makefile': 'Команды автоматизации' } all_good = True for file_path, description in required_structure.items(): if Path(file_path).exists(): print(f" ✅ {file_path:<30} - {description}") else: print(f" ❌ {file_path:<30} - {description}") all_good = False # Проверим CSV файлы csv_files = list(Path("data").glob("*.csv")) print(f" ✅ data/*.csv - {len(csv_files)} CSV файлов с тестами") return all_good def check_database(): """Проверка базы данных""" print("\n🗄️ БАЗА ДАННЫХ:") try: from src.database.database import DatabaseManager from config.config import config import asyncio async def check(): db = DatabaseManager(config.database_path) tests = await db.get_tests_by_category() print(f" ✅ Подключение к БД работает") print(f" ✅ Найдено тестов: {len(tests)}") total_questions = 0 for test in tests: questions = await db.get_random_questions(test['id'], 100) total_questions += len(questions) print(f" 📚 {test['name']}: {len(questions)} вопросов") print(f" ✅ Всего вопросов в базе: {total_questions}") asyncio.run(check()) return True except Exception as e: print(f" ❌ Ошибка БД: {e}") return False def check_config(): """Проверка конфигурации""" print("\n⚙️ КОНФИГУРАЦИЯ:") try: from config.config import config # Проверяем токен if config.bot_token and config.bot_token not in ['your_bot_token_here', 'test_token_for_demo_purposes']: print(" ✅ BOT_TOKEN настроен") bot_ready = True else: print(" ⚠️ BOT_TOKEN не настроен (нужен для реального запуска)") bot_ready = False print(f" ✅ DATABASE_PATH: {config.database_path}") print(f" ✅ CSV_DATA_PATH: {config.csv_data_path}") print(f" ✅ QUESTIONS_PER_QUIZ: {config.questions_per_quiz}") print(f" ✅ GUEST_MODE_ENABLED: {config.guest_mode_enabled}") print(f" ✅ TEST_MODE_ENABLED: {config.test_mode_enabled}") return bot_ready except Exception as e: print(f" ❌ Ошибка конфигурации: {e}") return False def show_features(): """Показать возможности""" print("\n🎮 ВОЗМОЖНОСТИ:") print(" 🎯 Гостевой режим - быстрые викторины (5 вопросов)") print(" 📚 Режим тестирования - полные тесты (10 вопросов)") print(" 📊 Система статистики и прогресса") print(" 🇰🇷 100 вопросов по корейскому языку (5 уровней)") print(" 📱 Команды: /start, /help, /stats, /stop") print(" 🔄 Легкое добавление новых тестов через CSV") def show_commands(): """Показать команды""" print("\n🚀 КОМАНДЫ ДЛЯ ЗАПУСКА:") print(" make demo - Демонстрация без Telegram") print(" make test - Интерактивный тест в консоли") print(" make test-bot - Проверка импортов") print(" make run - Запуск бота в Telegram") print(" make help - Полная справка") def show_instructions(): """Инструкции по настройке""" print("\n📋 ДЛЯ ЗАПУСКА РЕАЛЬНОГО БОТА:") print(" 1. Найдите @BotFather в Telegram") print(" 2. Создайте нового бота командой /newbot") print(" 3. Скопируйте токен") print(" 4. Откройте файл .env") print(" 5. Замените BOT_TOKEN=... на ваш токен") print(" 6. Запустите: make run") def main(): print_banner() # Проверяем структуру structure_ok = check_structure() # Проверяем базу данных db_ok = check_database() # Проверяем конфигурацию config_ok = check_config() # Показываем возможности show_features() # Показываем команды show_commands() print("\n" + "=" * 60) if structure_ok and db_ok: print("🎉 ПРОЕКТ ГОТОВ К ИСПОЛЬЗОВАНИЮ!") if config_ok: print("✅ Бот настроен и готов к запуску в Telegram!") print("🚀 Команда: make run") else: print("⚠️ Нужно настроить токен для Telegram бота") show_instructions() print("\n🔧 Утилиты для тестирования:") print(" make demo - Работает без токена") print(" make test - Интерактивный режим") else: print("❌ ПРОЕКТ НЕ ГОТОВ!") if not structure_ok: print(" - Отсутствуют необходимые файлы") if not db_ok: print(" - Проблемы с базой данных") print("=" * 60) if __name__ == "__main__": main()