File start_robot.py of Package fint-bot

#!/usr/bin/env python3
"""
СТАРТОВЫЙ СКРИПТ ТОРГОВОГО РОБОТА
Обязательная проверка безопасности перед запуском
"""
import sys
import os
import subprocess
from pathlib import Path

# Добавим цветной вывод
try:
    from colorama import init, Fore, Style
    init(autoreset=True)
except ImportError:
    class Fore:
        RED = YELLOW = GREEN = CYAN = MAGENTA = WHITE = RESET = ""
    class Style:
        BRIGHT = DIM = NORMAL = RESET_ALL = ""


def print_header(text):
    """Печать заголовка"""
    print(f"\n{Fore.CYAN}{Style.BRIGHT}{'='*60}")
    print(f"{text}")
    print(f"{'='*60}{Style.RESET_ALL}")


def run_safety_check():
    """Запуск проверки безопасности"""
    print_header("ШАГ 1: ПРОВЕРКА БЕЗОПАСНОСТИ")
    
    # Проверяем наличие модуля безопасности
    if not Path("safety_check.py").exists():
        print(f"{Fore.RED}❌ Модуль безопасности не найден!{Style.RESET_ALL}")
        print(f"{Fore.YELLOW}Скачайте safety_check.py и поместите в директорию робота{Style.RESET_ALL}")
        return False
    
    # Запускаем проверку безопасности
    try:
        result = subprocess.run(
            [sys.executable, "safety_check.py"],
            capture_output=True,
            text=True
        )
        
        # Выводим результат
        print(result.stdout)
        
        if result.stderr:
            print(f"{Fore.YELLOW}Предупреждения:{Style.RESET_ALL}")
            print(result.stderr)
        
        return result.returncode == 0
        
    except Exception as e:
        print(f"{Fore.RED}❌ Ошибка при проверке безопасности: {e}{Style.RESET_ALL}")
        return False


def run_config_tool():
    """Запуск мастера конфигурации (если нужно)"""
    if not Path("config.json").exists():
        print_header("ШАГ 2: НАСТРОЙКА КОНФИГУРАЦИИ")
        print(f"{Fore.YELLOW}Конфигурационный файл не найден.{Style.RESET_ALL}")
        
        response = input(f"{Fore.CYAN}Запустить мастер настройки? (да/НЕТ): {Style.RESET_ALL}").strip().lower()
        
        if response in ['да', 'yes', 'y', 'д']:
            try:
                subprocess.run([sys.executable, "config_tool.py", "wizard"])
                return True
            except Exception as e:
                print(f"{Fore.RED}❌ Ошибка при настройке: {e}{Style.RESET_ALL}")
                return False
        
    return True


def run_main_robot():
    """Запуск основного робота"""
    print_header("ШАГ 3: ЗАПУСК ТОРГОВОГО РОБОТА")
    
    print(f"{Fore.GREEN}✅ Все проверки пройдены.{Style.RESET_ALL}")
    print(f"{Fore.CYAN}Запускаю торгового робота...{Style.RESET_ALL}")
    
    try:
        # Передаём управление основному скрипту
        subprocess.run([sys.executable, "main.py"])
        return True
    except KeyboardInterrupt:
        print(f"\n{Fore.YELLOW}Робот остановлен пользователем.{Style.RESET_ALL}")
        return True
    except Exception as e:
        print(f"{Fore.RED}❌ Ошибка при запуске робота: {e}{Style.RESET_ALL}")
        return False


def show_menu():
    """Показать меню опций"""
    print_header("МЕНЮ ТОРГОВОГО РОБОТА")
    
    print(f"{Fore.CYAN}Выберите действие:{Style.RESET_ALL}")
    print(f"  1. {Fore.GREEN}Полный запуск (проверка + робот){Style.RESET_ALL}")
    print(f"  2. {Fore.YELLOW}Только проверка безопасности{Style.RESET_ALL}")
    print(f"  3. {Fore.CYAN}Настройка конфигурации{Style.RESET_ALL}")
    print(f"  4. {Fore.MAGENTA}Показать текущую конфигурацию{Style.RESET_ALL}")
    print(f"  5. {Fore.RED}Выход{Style.RESET_ALL}")
    
    try:
        choice = input(f"\n{Fore.CYAN}Ваш выбор (1-5): {Style.RESET_ALL}").strip()
        
        if choice == '1':
            # Полный запуск
            if run_safety_check() and run_config_tool():
                run_main_robot()
        
        elif choice == '2':
            # Только проверка безопасности
            run_safety_check()
        
        elif choice == '3':
            # Настройка конфигурации
            subprocess.run([sys.executable, "config_tool.py", "wizard"])
        
        elif choice == '4':
            # Показать конфигурацию
            subprocess.run([sys.executable, "config_tool.py", "show"])
        
        elif choice == '5':
            print(f"{Fore.GREEN}Выход.{Style.RESET_ALL}")
            sys.exit(0)
        
        else:
            print(f"{Fore.RED}Неверный выбор{Style.RESET_ALL}")
    
    except KeyboardInterrupt:
        print(f"\n{Fore.YELLOW}Отменено пользователем.{Style.RESET_ALL}")


def main():
    """Основная функция стартового скрипта"""
    print(f"{Fore.CYAN}{Style.BRIGHT}")
    print("╔══════════════════════════════════════════════════════════╗")
    print("║               ТОРГОВЫЙ РОБОТ TINKOFF INVEST             ║")
    print("║            СИСТЕМА КОНТРОЛЯ БЕЗОПАСНОСТИ               ║")
    print("╚══════════════════════════════════════════════════════════╝")
    print(f"{Style.RESET_ALL}")
    
    # Проверяем наличие необходимых файлов
    required_files = ['main.py', 'robot.py', 'strategy.py']
    missing_files = [f for f in required_files if not Path(f).exists()]
    
    if missing_files:
        print(f"{Fore.RED}❌ Отсутствуют необходимые файлы:{Style.RESET_ALL}")
        for f in missing_files:
            print(f"  - {f}")
        print(f"\n{Fore.YELLOW}Убедитесь, что все файлы робота находятся в текущей директории.{Style.RESET_ALL}")
        sys.exit(1)
    
    # Показываем меню
    show_menu()


if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print(f"\n{Fore.YELLOW}Программа завершена.{Style.RESET_ALL}")
        sys.exit(0)
openSUSE Build Service is sponsored by