迁移wechat_ipad配置到环境变量并清理本地状态文件

This commit is contained in:
liuwei
2026-05-07 10:22:40 +08:00
parent fe8b7171fd
commit d0acd33b66
16 changed files with 271 additions and 67 deletions

View File

@@ -203,6 +203,28 @@ class Config(object):
plugin_hot_reload["interval_seconds"] = self._safe_int(plugin_hot_reload.get("interval_seconds", 600), 600)
normalized["plugin_hot_reload"] = plugin_hot_reload
# wechat_ipad 配置归一化:
# 1. 静态连接参数现在统一走 config.yaml + .env而不是要求用户维护独立 TOML
# 2. 登录后的 wxid / device_id / device_name 会落到本地状态文件,因此这里保留 state_file 配置;
# 3. legacy_config_path 仅用于兼容历史仓库中的 `wechat_ipad/config.toml`,迁移完成后可逐步淡出。
wechat_ipad_config = dict(normalized.get("wechat_ipad", {}) or {})
wechat_ipad_config["server_port"] = self._safe_int(wechat_ipad_config.get("server_port", 8059), 8059)
wechat_ipad_config["server_url"] = str(wechat_ipad_config.get("server_url", "") or "").strip()
wechat_ipad_config["server_ip"] = str(wechat_ipad_config.get("server_ip", "") or "").strip()
wechat_ipad_config["server_type"] = str(
wechat_ipad_config.get("server_type", "legacy_855") or "legacy_855"
).strip()
wechat_ipad_config["wxid"] = str(wechat_ipad_config.get("wxid", "") or "").strip()
wechat_ipad_config["device_name"] = str(wechat_ipad_config.get("device_name", "") or "").strip()
wechat_ipad_config["device_id"] = str(wechat_ipad_config.get("device_id", "") or "").strip()
wechat_ipad_config["state_file"] = str(
wechat_ipad_config.get("state_file", "temp/wechat_ipad/config.toml") or "temp/wechat_ipad/config.toml"
).strip()
wechat_ipad_config["legacy_config_path"] = str(
wechat_ipad_config.get("legacy_config_path", "wechat_ipad/config.toml") or "wechat_ipad/config.toml"
).strip()
normalized["wechat_ipad"] = wechat_ipad_config
return normalized
@classmethod
@@ -317,6 +339,37 @@ class Config(object):
"已配置告警接收人,但发件邮箱配置不完整,告警链路不可用。",
)
def _validate_wechat_ipad_config(self, report: dict) -> None:
"""检查 wechat_ipad 静态连接配置是否完整。"""
wechat_ipad_config = self.wechat_ipad or {}
server_url = str(wechat_ipad_config.get("server_url", "") or "").strip()
server_ip = str(wechat_ipad_config.get("server_ip", "") or "").strip()
server_port = wechat_ipad_config.get("server_port", 0)
if not server_url:
self._append_issue(
report["errors"],
"missing_wechat_server_url",
"wechat_ipad.server_url",
"wechat_ipad server_url 未配置,机器人无法连接 wechat_ipad server。",
)
if not server_ip:
self._append_issue(
report["errors"],
"missing_wechat_server_ip",
"wechat_ipad.server_ip",
"wechat_ipad server_ip 未配置,机器人无法连接 wechat_ipad server。",
)
if not server_port:
self._append_issue(
report["errors"],
"missing_wechat_server_port",
"wechat_ipad.server_port",
"wechat_ipad server_port 未配置,机器人无法连接 wechat_ipad server。",
)
def _validate_llm_config(self, report: dict) -> None:
"""检查 LLM 配置的完整性与路由一致性。"""
llm_config = self.llm or {}
@@ -396,6 +449,7 @@ class Config(object):
self._validate_unresolved_placeholders(report)
self._validate_required_sections(report)
self._validate_email_config(report)
self._validate_wechat_ipad_config(report)
self._validate_llm_config(report)
self._validate_plaintext_secrets(report)
return report
@@ -451,6 +505,7 @@ class Config(object):
self.redis = self.resolved_config.get("redis_config", {})
self.email = self.resolved_config.get("email_config", {})
self.wx_config = self.resolved_config.get("wx_config", {})
self.wechat_ipad = self.resolved_config.get("wechat_ipad", {})
self.llm = self.resolved_config.get("llm", {})
self.validation_report = self.validate()