From 703e3956f474d8a325e8047e145c3fb8e91b170d Mon Sep 17 00:00:00 2001 From: cat_shark <1716967236@qq.com> Date: Thu, 21 May 2026 18:00:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E7=AD=89=E7=BA=A7=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ef_course_autopilot.py | 54 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/ef_course_autopilot.py b/ef_course_autopilot.py index 49d26ff..d2ba6c6 100755 --- a/ef_course_autopilot.py +++ b/ef_course_autopilot.py @@ -883,6 +883,60 @@ class EFCourseAutopilot: self._log(f"下一单元已激活 (status={put_resp.status_code})") return True + if is_completed and not next_unit_id: + self._log("当前等级所有单元已完成,尝试切换至下一等级") + try: + levels_url = f"{self.base_url}/wl/api/change-level/levels" + levels_resp = self.session.get( + levels_url, params={"locale": self.locale}, + headers=headers, timeout=REQUEST_TIMEOUT, + ) + levels_resp.raise_for_status() + levels_data = levels_resp.json() + + current_level_id = levels_data.get("currentLevelId") + levels = levels_data.get("levels", []) + if not current_level_id or not levels: + self._log("无法获取等级信息,跳过等级切换") + return False + + # 找到 currentLevelId 之后的第一个未开始的等级 + found_current = False + next_level = None + for level in levels: + lid = level.get("id") or level.get("levelId") + if not found_current: + if lid == current_level_id: + found_current = True + continue + status = level.get("progress", {}).get("status", "") + if status == "not_started": + next_level = level + break + if status == "started": + next_level = level + break + + if next_level: + next_level_id = next_level.get("id") or next_level.get("levelId") + self._log(f"切换至下一等级 (levelId={next_level_id})") + study_plan_url = f"{self.base_url}/wl/api/study-plan/study-plan" + put_resp = self.session.put( + study_plan_url, + params={"locale": self.locale}, + json={"courseId": self.ctx.course_id, "levelId": next_level_id}, + headers=headers, timeout=REQUEST_TIMEOUT, + ) + put_resp.raise_for_status() + self._log(f"等级切换成功 (status={put_resp.status_code})") + return True + else: + self._log("未找到可切换的下一等级") + except Exception as e: + self._log(f"等级切换失败: {e}") + + return False + return False