Skip to content

refactor: 将 anti_ban 作息逻辑从 script.py 抽出为 AntiBanGuard - #1760

Open
qiyh99 wants to merge 1 commit into
runhey:devfrom
qiyh99:refactor/antiban-guard
Open

refactor: 将 anti_ban 作息逻辑从 script.py 抽出为 AntiBanGuard#1760
qiyh99 wants to merge 1 commit into
runhey:devfrom
qiyh99:refactor/antiban-guard

Conversation

@qiyh99

@qiyh99 qiyh99 commented Aug 28, 2026

Copy link
Copy Markdown

回应上个 PR 合并时「script.py 已经变成一坨了」的反馈。

问题

防风控 PR(#1755)把 anti_ban 作息调度逻辑散插进了 script.py 的 4 处,运行时状态用 getattr(self, '_active_*', default) 隐式挂在 Script 类上,让本就庞大的 Script 更臃肿。

改动(纯结构调整,行为不变)

  • 新增 module/config/anti_ban.pyAntiBanGuard:自持状态(_active_date/_active_seconds_today/_rest_until),把睡眠窗/每日活跃上限/强制休息逻辑收拢为 reset() / record_active() / wake_time(),镜像现有 InstanceGuard 范式。
  • script.py 抽空散插逻辑,只留 1 个 import + 1 个构造 + 3 处一行调用;删掉挂在 Script 上的隐式 anti_ban 状态。净减约 35 行。

验证

  • py_compile + 导入无环通过。
  • 逐条行为等价核对:关闭返回 None、睡眠窗(含跨午夜)唤醒点、每日上限触发强制休息、跨午夜累计重置,全部与原实现一致。

Sourcery 总结

增强功能:

  • 将防封禁调度和活动跟踪逻辑从 Script 中提取到专用的 AntiBanGuard 中,在保持现有行为不变的同时降低 Script 的复杂性。
Original summary in English

Summary by Sourcery

Enhancements:

  • Extract anti-ban scheduling and activity tracking from Script into a dedicated AntiBanGuard, reducing Script complexity while preserving existing behavior.

Copilot AI lite review requested due to automatic review settings August 28, 2026 06:55

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

嘿——我已经审阅了你的更改,看起来很棒!

Sourcery 评估

已批准。


Sourcery 对开源项目免费——如果你喜欢我们的评审,请考虑分享它们 ✨
请帮助我变得更有用!请在每条评论上点击 👍 或 👎,我会利用这些反馈来改进评审。
Original comment in English

Hey - I've reviewed your changes and they look great!

Sourcery assessment

Approved.


Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

变更为结构性重构且新旧逻辑路径(唤醒点计算、跨日重置、强制休息触发与清零)在关键分支上与原实现保持一致,未发现行为偏差或集成问题。

Pull request overview

script.py 中分散的 anti_ban 作息/活跃累计/强制休息逻辑抽离为独立的 AntiBanGuard,以降低 Script 类体积与隐式状态耦合,并保持原有调度行为不变。

Changes:

  • 新增 module/config/anti_ban.py:引入 AntiBanGuard,封装睡眠窗判断、跨日重置、每日活跃上限与强制长休息的唤醒时间计算。
  • 精简 script.py:移除原先散插的 anti_ban 辅助函数与挂在 Script 上的隐式状态,改为通过 anti_ban_guard.reset()/wake_time()/record_active() 调用。
  • 调度点保持一致:在 get_next_task() 处抬高 task.next_run,在任务结束处累计活跃秒数。
File summaries
File Description
script.py AntiBanGuard 替代原先散落在 Script 内部的 anti_ban 状态与计算逻辑,减少类内复杂度与隐式属性。
module/config/anti_ban.py 新增看守器类,集中实现睡眠窗/每日活跃上限/强制休息的状态维护与唤醒时间计算。
Review details
  • Files reviewed: 2/2 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@github-actions

Copy link
Copy Markdown

Findings

  • C2 [风险]
    位置:script.py:Script.wait_until
    原因:等待循环仍直接调用 time.sleep(5);该 wait_* 方法符合清单明确禁止的睡眠式等待实现。
    修改:改用可被配置重载、停止事件或超时机制唤醒的等待方式,移除该循环中的 time.sleep

Generated by PR Review Checklist for #1760 · gpt56 · 2.68 AIC · ⌖ 0.432 AIC · ⊞ 11.9K ·

@github-actions

Copy link
Copy Markdown

Change Summary

  • 新增 AntiBanGuard,集中持有每日活跃日期、累计时长和强制休息截止时间。
  • 将睡眠窗、每日活跃上限及跨午夜重置逻辑从 script.py 移入 guard。
  • Script 改为在初始化时持有 guard,并在调度前、任务结束后分别调用 wake_time() / record_active();循环启动时重置状态。

Reconstructed Intent

点击此处展开
  • 这次改动最可能是为了在不改变 anti_ban 调度行为的前提下,消除 Script 上的隐式状态和散落逻辑,形成独立的状态持有者。
  • 调度入口仍以唤醒时间推迟 task.next_run,任务完成后仍按任务耗时累计活跃时长。

Observed Constraints

点击此处展开
  • 一个 Script 实例必须持续持有同一个 AntiBanGuard,否则每日累计和强制休息状态会丢失。
  • reset() 只在 scheduler loop 启动时调用;因此循环重启会清空 anti_ban 当日累计,这是原实现已有的生命周期约束。
  • wake_time() 依赖传入配置具备 enable、睡眠起止时间、每日上限和长休息时长字段;日期判断使用运行进程的本地时间。
  • 睡眠窗仍采用左闭右开区间,且跨午夜窗口依赖 start != end 的配置语义。

Intent Alignment

  • 基本一致。新类的方法与原 script.py 中的四段逻辑逐项对应,未从 diff 看到额外的调度行为变化。
  • record_active() 使用 datetime.now().date(),与原来的 date.today() 在同一进程本地时区下保持等价。

Release Risk

  • 风险等级:中
  • 这是调度状态与等待时间的控制流重构;若 guard 生命周期、跨午夜边界或配置字段契约出错,会导致任务提前执行或额外等待。
  • 当前 PR 状态显示 mergeable_state 为 unstable,提交状态为 pending 且没有已完成 check 结果,发布前不能仅凭结构等价判断安全。

Validation Gaps

点击此处展开
  • diff 中未新增测试;未看到针对普通/跨午夜睡眠窗、边界时刻、每日上限触发、长休息期间、跨日期累计重置的单元测试。
  • 应至少验证重复调用 wake_time() 不会重复延长 _rest_until,以及 scheduler loop 重启后的状态重置行为。
  • 需要补充或确认 py_compile、导入检查及实际 scheduler 流程检查已在当前 head SHA 上完成;目前 GitHub check 状态仍为 pending。

Generated by PR Review Intent for #1760 · gpt56 · 1.95 AIC · ⌖ 0.291 AIC · ⊞ 11.9K ·

原本散插进 script.py 四处的睡眠窗/每日活跃上限/强制休息逻辑与隐式状态
(_active_*/_rest_until) 收拢为 module/config/anti_ban.py 的 AntiBanGuard,
镜像 InstanceGuard 范式。script.py 只留 import + 构造 + 三处一行调用,
行为完全不变。回应 script.py 变臃肿的反馈。
@qiyh99
qiyh99 force-pushed the refactor/antiban-guard branch from f383c2c to 7de0cd1 Compare August 28, 2026 07:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants