python
#!/usr/bin/env python3
-*- coding: utf-8 -*-
"""
电竞教练辅助系统 - 完整版(适配真实LCU字段)
功能:加密狗绑定 → 游戏检测 → 环形录屏 → 事件检测 → 推送
"""
import os
import sys
import time
import json
import threading
import subprocess
import hashlib
import tempfile
import re
from datetime import datetime
from pathlib import Path
from collections import deque
from dataclasses import dataclass, field
from typing import List, Dict, Optional, Tuple, Callable
import requests
import win32com.client
import pythoncom
==================== 配置区 ====================
CONFIG = {
----- 加密狗 -----
"DONGLE_VID": 0x1234,
"DONGLE_PID": 0x5678,
"DONGLE_SERIAL": "YOUR_SERIAL",
----- 录屏 -----
"SCREEN_FPS": 30,
"SCREEN_RESOLUTION": (1920, 1080),
"BUFFER_SECONDS": 30,
"RECORD_DIR": "./recordings",
----- 游戏检测 -----
"LOL_PROCESS_NAMES": "League of Legends.exe", "LeagueClient.exe",
----- 暴击检测(基于真实字段)-----
"CRITICAL_STRIKE_THRESHOLD": 2.5, # 次/秒,连续3秒内超过2.5次触发
"CRITICAL_WINDOW": 3.0,
"MIN_CRIT_COUNT": 3, # 窗口内至少3次暴击才触发
----- 成功率阈值 -----
"SUCCESS_RATE_THRESHOLD": 0.3,
----- 推送 -----
"WECHAT_WEBHOOK": "",
"QQ_EMAIL": "",
"SMTP_PASSWORD": "",
"TARGET_EMAIL": "",
----- 防重复 -----
"EVENT_COOLDOWN": 10, # 同类事件10秒内不重复触发
}
==================== 工具函数 ====================
def get_lcu_credentials() -> TupleOptional\[str, Optionalstr]:
"""从进程命令行获取LCU端口和Token"""
try:
result = subprocess.run(
'wmic', 'process', 'where', 'name="LeagueClientUx.exe"', 'get', 'commandline',
capture_output=True, text=True, creationflags=subprocess.CREATE_NO_WINDOW
)
for line in result.stdout.split('\n'):
port_match = re.search(r'--app-port=(\d+)', line)
token_match = re.search(r'--remoting-auth-token=(\\w-+)', line)
if port_match and token_match:
return port_match.group(1), token_match.group(1)
except:
pass
return None, None