feat(userscript): CLOSE_INVALID_DELAY via closePlan pattern (v22.4) - #21
feat(userscript): CLOSE_INVALID_DELAY via closePlan pattern (v22.4)#21danny0119 wants to merge 2 commits into
Conversation
4e26e2d to
f6afbc3
Compare
|
感谢提交,这个 PR 想解决的问题我理解,也认可方向:
但我这边现在最大的顾虑,不是功能点本身,而是 改动边界和插入方式。 1. 当前 PR 的顾虑:不是纯补丁,混入了很多无关历史改动你在描述里说这是基于
这些无关变化包括但不限于:
也就是说,这个 PR 现在不是“只加 CLOSE_INVALID_DELAY”,而是“功能补丁 + 一批历史状态一起带进来”。 这对我们来说风险很大,因为:
所以我们现在不太敢直接合,并不是觉得这个功能不该做,而是这个 PR 目前不是干净增量。 2.
|
- closePlan: single random delay generated once when preview settles (busy/sold_out), never recalculated per-tick - checkPayDialog: only consumes closePlan, no inline random or delay calc - exitTask: uses closePlan instead of hardcoded 2000ms - Config panel: delay input (default 1500ms, +-300ms jitter on plan creation) - scripts/userscripts: precise patch from main copy, no historical cruft This follows the schedule/plan/consume pattern: generate closePlan once → checkPayDialog/exitTask only check if ready
f6afbc3 to
83e5756
Compare
|
感谢继续整理,这一版比上一版干净很多,方向也基本对了。 现在我这边看下来,还差两处收尾,改完我会更倾向直接合:
旧逻辑里,PS.result === 'sold_out' 时,会先 readDialogPrices()。如果弹窗 DOM 里其实已经有有效价格,就 keep,不关闭。 这个保护不是多余逻辑,而是为了防一种前后端不一致的情况:接口层记录成 sold_out,但前端经过覆盖后,弹窗里其实已经出现了可支付内容。 你这版改完以后,sold_out 只要 closePlan 到时,就会直接 close。这样会有回归风险:本来能继续支付的弹窗,也可能被脚本按 sold_out 关掉。 我建议这里把原来这层保护补回去,至少在 sold_out 分支下,close 前先看一眼 readDialogPrices(),有价格就继续保留弹窗。
当前 closePlan = null 只出现在:
但普通的任务退出或切下一个任务时,exitTask() 自己没有统一清掉 closePlan。 这会留下一个风险:上一轮任务生成过 closePlan,但因为别的路径跳出了,没有把它清掉。下一轮任务如果也遇到 busy 或 sold_out,就可能复用上一轮残留的 plan,导致关闭时机串任务。 所以我建议在任务结束或切换的统一收尾点,把 closePlan = null 明确加上,让它真正跟随单轮任务生命周期,而不是只在部分分支里被清掉。 次要建议: delayMs 这行最好也顺手做一下下限保护,比如 Math.max(0, ...)。不然如果用户把 CLOSE_INVALID_DELAY 设得比较小,理论上可能抽出负值,变成立即关闭。 总的来说,这版已经比上一版接近很多了,不是思路问题,主要就是这两处逻辑收尾。把这两点补上之后,我这边会更愿意直接合。 |
…ath.max - sold_out branch: checks readDialogPrices() before closing (prevents closing dialogs that have valid DOM prices despite API sold_out) - exitTask(): adds closePlan = null at unified task cleanup point - delayMs: Math.max(0, ...) prevents negative values from small config
CLOSE_INVALID_DELAY — closePlan pattern (v22.4)
Based on review feedback: uses schedule/plan/consume pattern instead of per-tick recalculation.
Design
Key difference from previous approach:
checkPayDialogno longer calculates elapsed/delay inlineexitTaskno longer has its own hardcoded 2000ms checkChanges
CLOSE_INVALID_DELAY: 1500{startedAt, delayMs, reason}, generated once when preview returns busy/sold_out!isPayDialog()guardVerification