86 lines
2.6 KiB
Python
Executable File
86 lines
2.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
import time
|
|
from datetime import datetime
|
|
|
|
ADDRESS = os.getenv("ADB_ADDRESS", "127.0.0.1:5555")
|
|
REDROID = os.getenv("REDROID_CONTAINER", "redroid")
|
|
TASKS = ["startup", "recruit", "infrast", "fight", "mall", "award"]
|
|
DIRECT = {k: v for k, v in os.environ.items() if k.lower() not in ("http_proxy", "https_proxy", "all_proxy")}
|
|
|
|
|
|
def command(args, proxy=False):
|
|
print(f"[{datetime.now():%H:%M:%S}] {' '.join(args)}", flush=True)
|
|
return subprocess.run(args, env=os.environ if proxy else DIRECT).returncode
|
|
|
|
|
|
def retry(args):
|
|
for attempt in range(3):
|
|
if command(args) == 0:
|
|
return True
|
|
print(f"命令失败,第 {attempt + 1}/3 次", flush=True)
|
|
time.sleep(1)
|
|
return False
|
|
|
|
|
|
def maa(*args):
|
|
return ["maa", *args, "--batch", "-a", ADDRESS]
|
|
|
|
|
|
def wait_android():
|
|
print("等待 Android 启动……", flush=True)
|
|
deadline = time.monotonic() + 180
|
|
while time.monotonic() < deadline:
|
|
try:
|
|
subprocess.run(["adb", "connect", ADDRESS], env=DIRECT, capture_output=True, timeout=10)
|
|
result = subprocess.run(["adb", "-s", ADDRESS, "shell", "getprop", "sys.boot_completed"],
|
|
env=DIRECT, capture_output=True, text=True, timeout=10)
|
|
if result.returncode == 0 and result.stdout.strip() == "1":
|
|
return True
|
|
except subprocess.TimeoutExpired:
|
|
pass
|
|
time.sleep(2)
|
|
print("Android 启动超时", flush=True)
|
|
return False
|
|
|
|
|
|
def task(name):
|
|
for _ in range(3):
|
|
if retry(maa("run", name)):
|
|
return True
|
|
print(f"任务 {name} 失败,重新打开游戏后重试", flush=True)
|
|
retry(maa("closedown"))
|
|
retry(maa("run", "startup"))
|
|
return False
|
|
|
|
|
|
def main():
|
|
# 更新走代理;失败时仍尝试使用已有版本,与原脚本一致。
|
|
command(["maa", "update"], proxy=True)
|
|
command(["maa", "self", "update"], proxy=True)
|
|
if command(["docker", "restart", REDROID]):
|
|
return 1
|
|
failed = False
|
|
ready = False
|
|
try:
|
|
ready = wait_android()
|
|
if not ready:
|
|
return 1
|
|
retry(["adb", "-s", ADDRESS, "shell", "am", "start", "--windowingMode", "4",
|
|
"com.hypergryph.arknights/com.u8.sdk.U8UnityContext"])
|
|
for name in TASKS:
|
|
if not task(name):
|
|
failed = True
|
|
finally:
|
|
if ready and not retry(maa("closedown")):
|
|
failed = True
|
|
if command(["docker", "stop", REDROID]):
|
|
failed = True
|
|
return int(failed)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|