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)