Spaces:
Sleeping
Sleeping
| """ | |
| Strategy Factory | |
| Фабрика для создания стратегий регистрации. | |
| Упрощает выбор и конфигурацию стратегий. | |
| """ | |
| from typing import Optional | |
| from .auth_strategy import RegistrationStrategy | |
| from .strategies.automated_strategy import AutomatedRegistrationStrategy | |
| from .strategies.webview_strategy import WebViewRegistrationStrategy | |
| class StrategyFactory: | |
| """Фабрика стратегий регистрации""" | |
| def create(strategy_name: str, **kwargs) -> RegistrationStrategy: | |
| """ | |
| Создать стратегию по имени | |
| Args: | |
| strategy_name: Имя стратегии ("automated", "webview") | |
| **kwargs: Параметры для стратегии | |
| Returns: | |
| RegistrationStrategy instance | |
| Raises: | |
| ValueError: Если стратегия не найдена | |
| """ | |
| strategy_name = strategy_name.lower() | |
| if strategy_name == "automated": | |
| return AutomatedRegistrationStrategy( | |
| headless=kwargs.get('headless', False), | |
| check_quota_immediately=kwargs.get('check_quota_immediately', False), | |
| human_delays=kwargs.get('human_delays', True) | |
| ) | |
| elif strategy_name == "webview": | |
| return WebViewRegistrationStrategy( | |
| browser_path=kwargs.get('browser_path'), | |
| port=kwargs.get('port', 43210), | |
| proxy=kwargs.get('proxy') | |
| ) | |
| else: | |
| raise ValueError( | |
| f"Unknown strategy: {strategy_name}. " | |
| f"Available: automated, webview" | |
| ) | |
| def list_strategies() -> dict: | |
| """ | |
| Список доступных стратегий с описанием | |
| Returns: | |
| Dict с информацией о стратегиях | |
| """ | |
| return { | |
| 'automated': { | |
| 'name': 'Automated (Legacy)', | |
| 'description': 'DrissionPage automation - works for some users', | |
| 'ban_risk': 'high (80-90% if quota checked immediately)', | |
| 'manual_input': False, | |
| 'headless': True, | |
| 'recommended': False, | |
| 'notes': 'Use --no-check-quota to reduce ban risk to ~40-60%' | |
| }, | |
| 'webview': { | |
| 'name': 'WebView (Anti-Ban)', | |
| 'description': 'Real browser with manual input - minimal ban risk', | |
| 'ban_risk': 'low (<10%)', | |
| 'manual_input': True, | |
| 'headless': False, | |
| 'recommended': True, | |
| 'notes': 'Requires user to manually enter credentials' | |
| } | |
| } | |
| def get_recommended() -> str: | |
| """Получить рекомендуемую стратегию""" | |
| return "webview" | |
| def print_strategies(): | |
| """Вывести список стратегий в консоль""" | |
| strategies = StrategyFactory.list_strategies() | |
| print("\n" + "="*70) | |
| print("AVAILABLE REGISTRATION STRATEGIES") | |
| print("="*70) | |
| for name, info in strategies.items(): | |
| recommended = " [RECOMMENDED]" if info['recommended'] else "" | |
| print(f"\n{name.upper()}{recommended}") | |
| print(f" Name: {info['name']}") | |
| print(f" Description: {info['description']}") | |
| print(f" Ban Risk: {info['ban_risk']}") | |
| print(f" Manual Input: {info['manual_input']}") | |
| print(f" Headless Support: {info['headless']}") | |
| if info.get('notes'): | |
| print(f" Notes: {info['notes']}") | |
| print("\n" + "="*70) | |
| print(f"Recommended: {StrategyFactory.get_recommended()}") | |
| print("="*70 + "\n") | |