61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
"""
|
|
网络连接恢复技能 - 断网时尝试恢复上网(仅合法操作)
|
|
|
|
通过 Hawk 模块执行:开 WiFi、打开系统网络设置、连接已保存网络等。
|
|
不涉及且永不涉及:破解密码、未授权访问等任何违规行为。
|
|
若设备无可用已保存网络,仅打开 WiFi 设置供用户手动连接或输入密码。
|
|
"""
|
|
|
|
import logging
|
|
import sys
|
|
import os
|
|
from typing import Dict, Any
|
|
|
|
# 兼容独立运行和包导入
|
|
_agent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
if _agent_dir not in sys.path:
|
|
sys.path.insert(0, _agent_dir)
|
|
|
|
try:
|
|
from skills.base import BaseSkill
|
|
except ImportError:
|
|
from ..base import BaseSkill
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class NetworkReconnectSkill(BaseSkill):
|
|
"""网络连接恢复技能 - 与 Hawk 协同,仅做合法网络恢复"""
|
|
|
|
PACKAGE = ""
|
|
NAME = "网络恢复"
|
|
|
|
def try_reconnect(self) -> Dict[str, Any]:
|
|
"""
|
|
尝试恢复网络:委托 Hawk 执行开 WiFi、打开设置、连接已保存网络等合法操作。
|
|
若仍连不上,返回建议(如「请在设置中手动连接或输入密码」)。
|
|
"""
|
|
try:
|
|
from hawk import try_reconnect_network, is_network_available
|
|
|
|
if self.d is None:
|
|
return {"success": False, "message": "无设备,无法执行网络恢复", "steps": []}
|
|
|
|
if is_network_available(self.d):
|
|
return {"success": True, "message": "当前已有网络", "steps": ["检测到网络"]}
|
|
|
|
result = try_reconnect_network(self.d)
|
|
if self.bus:
|
|
self.bus.append(self.NAME, result.get("message", ""), data=result)
|
|
return result
|
|
except ImportError as e:
|
|
logger.warning("Hawk 模块未安装,无法执行网络恢复: %s", e)
|
|
return {
|
|
"success": False,
|
|
"message": "Hawk 模块不可用,请检查网络或手动连接 WiFi",
|
|
"steps": [],
|
|
}
|
|
except Exception as e:
|
|
logger.exception("网络恢复失败")
|
|
return {"success": False, "message": str(e), "steps": []}
|