fix(qdreader): remove inferred adv task filters
This commit is contained in:
@@ -697,6 +697,7 @@ QDReader 签到结果判定补充:
|
||||
- 激励任务 `finishWatch` 的 `Result/result = 9` 是上游可接受状态,要继续回查完成状态,而不是直接失败。
|
||||
- BOSS 明确要求 QDReader 激励任务“依照原项目,不做我以为的逻辑修改”。原项目的激励任务控制流是:读取 `VideoRewardTab.TaskList`;如果最后一项 `IsFinished === 1` 直接完成;否则遍历所有未完成且有 `TaskId` 的列表项,每项提交一次 `/argus/api/v1/video/adv/finishWatch`;最后再回查 `mainPage`,仍以回查后列表最后一项 `IsFinished === 1` 作为完成判断。
|
||||
- 因此不要在激励任务里加入本地推测过滤,例如跳过“每日签到/其它入口任务”、只校验本轮提交的 TaskId、按 `NeedCount - Count` 计算剩余次数、或者输出“跳过 N 个需其它入口任务”。这些看起来更严格/更安全,但已经被现场结果证明会和原项目语义偏离,导致误判未完成。
|
||||
- 如果修改了激励任务,一定补三类 VM 回归:① 非最后项已完成但最后项未完成时仍失败;② 回查最后项完成时即成功,即使前面提交过的条目仍显示未完成;③ 看起来像其它入口/签到的条目只要未完成且有 `TaskId`,也按上游循环提交一次,不做本地过滤。
|
||||
- 可选任务如果被签名网关返回 `url 不在允许的接口列表内`,应标记为跳过 `⏭`,不要污染基础签到成功率。
|
||||
- 大咖荐书必须用 base62 token,并带 `senderId` 拉取具体会话;单次 `pullmessage` 或十进制 token 容易导致“参数错误”。
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
//[author: Hermes]
|
||||
//[service: BOSS]
|
||||
//[class: 工具类]
|
||||
//[version: 2.10.7]
|
||||
//[version: 2.10.8]
|
||||
//[platform: web,qq,wx,tg,tb,fs,we]
|
||||
//[public: false]
|
||||
//[price: 0]
|
||||
@@ -276,7 +276,7 @@ function contentText() {
|
||||
}
|
||||
function usage() {
|
||||
return [
|
||||
"启点读书签到插件 v2.10.7",
|
||||
"启点读书签到插件 v2.10.8",
|
||||
"【一级菜单】",
|
||||
"账号管理:启点账号",
|
||||
"执行查询:启点查询",
|
||||
@@ -623,13 +623,6 @@ function finishVideoTask(taskOrId, cookie, repeat) {
|
||||
}
|
||||
return { ok: ok, total: n, last: last, taskId: tid }
|
||||
}
|
||||
function advTaskActionable(task) {
|
||||
var title = taskTitle(task)
|
||||
var id = taskIdKey(taskIdOf(task || {}))
|
||||
if (/签到|check.?in|每日任务|抽奖|lottery|兑换|exchange|章节|chapter|荐书|消息|message/i.test(title)) return false
|
||||
if (/1165585369246138370$/.test(id)) return false
|
||||
return true
|
||||
}
|
||||
function makeBase62Token(num) {
|
||||
var alphabet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
var n = BigInt(num)
|
||||
|
||||
@@ -159,7 +159,7 @@ set(key, value)
|
||||
4. “今日已签到/已经签到/重复签到”等签到响应按成功处理,避免重复执行时误计失败。
|
||||
5. 按账号读取 `qdreader_task_pref_json` 后追加完全体任务链路:
|
||||
- 固定执行领取奖励:`POST /argus/api/v3/checkin/receivegifts`;
|
||||
- 可选激励任务:`GET /argus/api/v2/video/adv/mainPage`,再对未完成任务调用 `POST /argus/api/v1/video/adv/finishWatch`;上游返回 `result=9` 表示视频完成已受理,需要再拉取 `mainPage` 校验,不应直接判失败;
|
||||
- 可选激励任务:严格按上游原项目控制流执行:`GET /argus/api/v2/video/adv/mainPage` 读取 `Data.VideoRewardTab.TaskList`;若最后一项已完成则直接视为完成;否则按顺序对每个未完成且带 `TaskId` 的条目各调用一次 `POST /argus/api/v1/video/adv/finishWatch`;上游返回 `result=9` 表示视频完成已受理;最后再次拉取 `mainPage`,只按回查后最后一项是否完成判断激励任务是否完成。这里不做本地推测过滤、不按已提交 TaskId 单独验收、不输出“跳过其它入口任务”。
|
||||
- 可选每日任务:`GET /argus/api/v3/checkin/packagelist`,先处理惊喜福利/前置任务,再按标题精确选择“每日任务”执行三次 `finishWatch` 并回查完成状态;
|
||||
- 可选每日抽奖:先 `GET /argus/api/v2/checkin/detail`,有次数时 `POST /argus/api/v2/checkin/lottery`;
|
||||
- 可选每周兑换:`GET /argus/api/v3/checkin/checkinexchangepage`,可兑换时 `POST /argus/api/v3/checkin/exchangegoods`,仅北京时间周日执行;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
//[author: Hermes]
|
||||
//[service: BOSS]
|
||||
//[class: 工具类]
|
||||
//[version: 2.10.7]
|
||||
//[version: 2.10.8]
|
||||
//[platform: web,qq,wx,tg,tb,fs,we]
|
||||
//[public: false]
|
||||
//[price: 0]
|
||||
@@ -276,7 +276,7 @@ function contentText() {
|
||||
}
|
||||
function usage() {
|
||||
return [
|
||||
"启点读书签到插件 v2.10.7",
|
||||
"启点读书签到插件 v2.10.8",
|
||||
"【一级菜单】",
|
||||
"账号管理:启点账号",
|
||||
"执行查询:启点查询",
|
||||
@@ -623,13 +623,6 @@ function finishVideoTask(taskOrId, cookie, repeat) {
|
||||
}
|
||||
return { ok: ok, total: n, last: last, taskId: tid }
|
||||
}
|
||||
function advTaskActionable(task) {
|
||||
var title = taskTitle(task)
|
||||
var id = taskIdKey(taskIdOf(task || {}))
|
||||
if (/签到|check.?in|每日任务|抽奖|lottery|兑换|exchange|章节|chapter|荐书|消息|message/i.test(title)) return false
|
||||
if (/1165585369246138370$/.test(id)) return false
|
||||
return true
|
||||
}
|
||||
function makeBase62Token(num) {
|
||||
var alphabet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
var n = BigInt(num)
|
||||
|
||||
@@ -865,7 +865,7 @@ test('adv task does not report success when only unrelated task is finished afte
|
||||
assert.match(r.replies[0], /汇总:成功 0 \/ 失败 1 \/ 总计 1/);
|
||||
});
|
||||
|
||||
test('adv task reports failure when submitted target ids remain unfinished even if unrelated actionable task exists', () => {
|
||||
test('adv task follows upstream final-item completion instead of submitted-id inference', () => {
|
||||
const store = {
|
||||
qdreader_cookie_json: JSON.stringify({ '12345': cookie }),
|
||||
qdreader_user_bind_json: JSON.stringify({ '12345': 'user-a' }),
|
||||
@@ -891,19 +891,20 @@ test('adv task reports failure when submitted target ids remain unfinished even
|
||||
{ body: { code: 0, data: { headers: { 'QD-Sign': 'sig' } } } },
|
||||
{ statusCode: 200, body: { result: 9, message: '' } },
|
||||
{ body: { code: 0, data: { headers: { 'QD-Sign': 'sig' } } } },
|
||||
{ statusCode: 200, body: { result: 9, message: '' } },
|
||||
{ body: { code: 0, data: { headers: { 'QD-Sign': 'sig' } } } },
|
||||
{ statusCode: 200, body: { code: 0, Data: { VideoRewardTab: { TaskList: [
|
||||
{ TaskId: 'target-a', Title: '看视频领福利A', IsFinished: 0 },
|
||||
{ TaskId: 'target-b', Title: '看视频领福利B', IsFinished: 0 },
|
||||
{ TaskId: 'unrelated-actionable', Title: '其它视频福利', IsFinished: 1 },
|
||||
{ TaskId: '1165585369246138370', Title: '每日签到', IsFinished: 0 },
|
||||
{ TaskId: '1165585369246138370', Title: '每日签到', IsFinished: 1 },
|
||||
] } } } },
|
||||
],
|
||||
});
|
||||
assert.match(r.replies[0], /激励任务❌\(任务未完成\)/);
|
||||
assert.match(r.replies[0], /汇总:成功 0 \/ 失败 1 \/ 总计 1/);
|
||||
assert.match(r.replies[0], /激励任务✅\(已完成\)/);
|
||||
assert.match(r.replies[0], /汇总:成功 1 \/ 失败 0 \/ 总计 1/);
|
||||
});
|
||||
|
||||
test('adv task skips non-ad entries that must be handled by their own modules', () => {
|
||||
test('adv task iterates every unfinished upstream entry without local non-ad filtering', () => {
|
||||
const store = {
|
||||
qdreader_cookie_json: JSON.stringify({ '12345': cookie }),
|
||||
qdreader_user_bind_json: JSON.stringify({ '12345': 'user-a' }),
|
||||
@@ -965,7 +966,7 @@ test('adv task accepts nested data result 9 with empty message from sign gateway
|
||||
});
|
||||
|
||||
|
||||
test('adv task repeats same upstream fragment task until requested count before verification', () => {
|
||||
test('adv task submits each unfinished upstream list item once before verification', () => {
|
||||
const store = {
|
||||
qdreader_cookie_json: JSON.stringify({ '12345': cookie }),
|
||||
qdreader_user_bind_json: JSON.stringify({ '12345': 'user-a' }),
|
||||
|
||||
Reference in New Issue
Block a user