fix(v23.17): 405 冷却 0=不冷却 现可生效(之前 \&\& 守卫会落到 20000 默认值)

两处 (CFG.RISK_CONTROL_COOLDOWN_MS || 20000) 改成 if (cd > 0) 显式判断。
现在配置为 0 真的能关闭冷却机制,脚本立即重试。
This commit is contained in:
OLmatter
2026-07-30 10:27:13 +08:00
parent c1cfa4a6e0
commit 9c4745ae22
2 changed files with 10 additions and 6 deletions
+1
View File
@@ -2,6 +2,7 @@
## 2026-07-29
- 发布用户脚本 v23.17:fix 405 冷却"0 = 不冷却"配置项失效 bug。原代码 `(CFG.RISK_CONTROL_COOLDOWN_MS || 20000)` 用了 `||` 守卫,0 会被当 falsy 走 fallback 20000。等同于用户设 0 想关闭冷却,结果还是冷却 20 秒。改成 `if (cd > 0) riskCooldownUntil = Date.now() + cd;`,0 真的不冷却、不设置 cooldownUntil、脚本立即重试。
- 发布用户脚本 v23.16:状态栏提示中文化。`isAirplanePayDialog` 路径下 `AUTO_CLOSE_INVALID` 未开启时的英文提示改为「⚠️ 自动关闭无效弹窗未开启,请手动确认后关闭此支付/限流弹窗」。
- 发布用户脚本 v23.15:风控冷却状态栏提示加可配置入口。状态栏显示「🛑 风控冷却中(剩 Xs),可在配置面板「405 风控冷却」调整」,告诉用户冷却时间在哪改。
- 发布用户脚本 v23.14:修复 v23.13 405 风控冷却优先级 bug。v23.13 在小飞机弹窗(`hasAirplaneInDialog`)警告前会拦截所有 fallback,导致 405 风控时状态栏继续显示"小飞机警告"而不是"风控冷却中(剩 Xs)",用户看不到冷却提示以为脚本卡死。修:①`checkPayDialog` 情况 D 守卫 `PS.result !== 'risk_control'`,让 405 走关闭 + 冷却路径。②WAITING 阶段(isAirplanePayDialog 路径)小飞机警告加 risk_control 守卫。③WAITING 阶段关弹窗分支(1495 那段)补 risk_control 时设 `riskCooldownUntil`(之前只有 1530 路径有)。④reason 三元加 risk_control 分支显示"🛑 风控拦截(405),关闭弹窗并冷却"。
+9 -6
View File
@@ -1,7 +1,7 @@
// ==UserScript==
// @name 智谱 GLM Coding Plan 抢购助手 + 本地 OCR 自动验证码
// @namespace http://tampermonkey.net/
// @version 23.16
// @version 23.17
// @description GLM Coding Rush / 智谱 GLM Coding Plan 抢购助手,一键抢购油猴脚本 / Tampermonkey userscript,配合本地 CPU/GPU OCR(PP-OCRv6)自动识别中文点选验证码并点击,支持多窗口并发、限流重试和支付页安全保护。订阅入口被风控拦截时手动点「特惠订阅」即可,验证码自动打。
// @author mumumi
// @include https://*bigmodel.cn/glm-coding*
@@ -34,7 +34,7 @@
// ==/UserScript==
(function () {
'use strict';
const SCRIPT_VERSION = '23.16';
const SCRIPT_VERSION = '23.17';
const BOOT_BAR_ID = 'glm-helper-status-bar';
const __glmHost = (() => { try { return location.hostname || ''; } catch { return ''; } })();
const __inMiniMax = __glmHost === 'platform.minimaxi.com';
@@ -646,6 +646,7 @@
HOTKEY_AUTO_CLICK_SUB: 'F9',
// 405 风控冷却(毫秒)。preview 接口返回 405 = 阿里云 WAF 速率风控,
// 立即重试会越撞越多,关弹窗后进入冷却,让 WAF 阈值下降再恢复抢。
// 0 = 不冷却(关闭整个 405 减速机制)。默认 20000ms(20秒)。
RISK_CONTROL_COOLDOWN_MS: 20000,
};
function loadCfg() { try { const s = GM_getValue(STORAGE_KEY, null); return s ? { ...DEF, ...JSON.parse(s) } : { ...DEF }; } catch { return { ...DEF }; } }
@@ -1487,9 +1488,10 @@
}
closeModal(rlw);
const curName = `${TABS_MAP[tab]}·${PKGS_MAP[pkg]}`;
// 405 风控时设冷却,避免立即重试越撞越多
// 405 风控时设冷却。0 = 不冷却(直接重试);非 0 = 冷却对应毫秒。
if (PS.result === 'risk_control') {
riskCooldownUntil = Date.now() + (CFG.RISK_CONTROL_COOLDOWN_MS || 20000);
const cd = CFG.RISK_CONTROL_COOLDOWN_MS;
if (cd > 0) riskCooldownUntil = Date.now() + cd;
}
const nextIdx = qIdx + 1;
const isLoop = nextIdx >= scanQueue.length;
@@ -1536,9 +1538,10 @@
: PS.result === 'risk_control'
? `🛑 风控拦截(405),关闭弹窗并冷却`
: `📉 ${TABS_MAP[taskTarget.tab]}·${PKGS_MAP[taskTarget.pkg]} 售罄`;
// 405 风控时设冷却,避免立即重试越撞越多
// 405 风控时设冷却。0 = 不冷却(直接重试);非 0 = 冷却对应毫秒。
if (PS.result === 'risk_control') {
riskCooldownUntil = Date.now() + (CFG.RISK_CONTROL_COOLDOWN_MS || 20000);
const cd = CFG.RISK_CONTROL_COOLDOWN_MS;
if (cd > 0) riskCooldownUntil = Date.now() + cd;
}
closePayDialog();
lastCloseReason = reason;