增加自动切换等级的功能
This commit is contained in:
@@ -883,6 +883,60 @@ class EFCourseAutopilot:
|
|||||||
self._log(f"下一单元已激活 (status={put_resp.status_code})")
|
self._log(f"下一单元已激活 (status={put_resp.status_code})")
|
||||||
return True
|
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
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user