diff --git a/docs/wechat_ipad多版本Server适配路线图.md b/docs/wechat_ipad多版本Server适配路线图.md index 69b5341..ce93c06 100644 --- a/docs/wechat_ipad多版本Server适配路线图.md +++ b/docs/wechat_ipad多版本Server适配路线图.md @@ -30,6 +30,7 @@ - 已为 864 接入补充 `wechat_ipad.server_key` 统一配置项,支持通过 `.env` 的 `WECHAT_SERVER_KEY` 注入 - 已在 [wechat_ipad/gateway.py](/d:/learn/abot/wechat_ipad/gateway.py:1) 中注册 `server_864 / 864` 别名 - 已实现 864 第一版登录、初始化等待、HTTP 消息轮询、联系人、群信息、资料与朋友圈基础接口 +- 已在 [robot.py](/d:/learn/abot/robot.py:1) 中为 864 增加登录态硬隔离,默认不再回读 855 的历史 `config.toml` 与动态字段 当前尚未完成的关键项: diff --git a/robot.py b/robot.py index 193fbe6..e8e4e68 100644 --- a/robot.py +++ b/robot.py @@ -345,6 +345,7 @@ class Robot: 3. 最后兼容历史 `wechat_ipad/config.toml`,让老环境升级后可以平滑迁移。 """ base_config = dict(getattr(self.config, "wechat_ipad", {}) or {}) + normalized_provider_key = self._normalize_wechat_provider_key(base_config.get("server_type", "legacy_855")) state_path = str(base_config.get("state_file", "") or self._default_wechat_state_path(base_config)) legacy_config_path = str( base_config.get("legacy_config_path", "wechat_ipad/config.toml") or "wechat_ipad/config.toml" @@ -352,7 +353,11 @@ class Robot: state_config = self._load_toml_config_if_exists(state_path) legacy_config = {} - if os.path.abspath(state_path) != os.path.abspath(legacy_config_path): + # 只有 855 家族继续兼容历史 `wechat_ipad/config.toml`: + # 1. 用户当前明确担心 864 调试时误用本地 855 登录信息; + # 2. 864 的静态鉴权已经切到 `server_key`,不需要再借助旧 TOML 补状态; + # 3. 因此从这一层开始做硬隔离,避免 provider 切换时把 855 缓存带进 864 运行链路。 + if normalized_provider_key == "legacy_855" and os.path.abspath(state_path) != os.path.abspath(legacy_config_path): legacy_config = self._load_toml_config_if_exists(legacy_config_path) merged_config = dict(base_config) @@ -381,6 +386,14 @@ class Robot: if legacy_value not in (None, ""): merged_config[field_name] = legacy_value + # 对 864 这类新 provider,进一步清理可能残留的 855 动态字段: + # 1. `wxid/device_name/device_id` 对 864 不是主鉴权参数; + # 2. 若用户历史上跑过 855,本地 `.env` 或旧缓存里残留这些字段,最容易让人误以为“复用了旧号”; + # 3. 这里直接在构建运行时快照时清空,保证 864 启动只依赖 `server_key + 远端登录态`。 + if normalized_provider_key != "legacy_855": + for field_name in ("wxid", "device_name", "device_id"): + merged_config[field_name] = "" + merged_config["state_file"] = state_path merged_config["legacy_config_path"] = legacy_config_path return merged_config