fix(qdreader): restore upstream ad task flow
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
//[author: Hermes]
|
||||
//[service: BOSS]
|
||||
//[class: 工具类]
|
||||
//[version: 2.10.3]
|
||||
//[version: 2.10.5]
|
||||
//[platform: web,qq,wx,tg,tb,fs,we]
|
||||
//[public: false]
|
||||
//[price: 0]
|
||||
@@ -276,7 +276,7 @@ function contentText() {
|
||||
}
|
||||
function usage() {
|
||||
return [
|
||||
"启点读书签到插件 v2.10.2",
|
||||
"启点读书签到插件 v2.10.5",
|
||||
"【一级菜单】",
|
||||
"账号管理:启点账号",
|
||||
"执行查询:启点查询",
|
||||
@@ -602,6 +602,34 @@ function field(obj, names, def) {
|
||||
function taskTitle(task) { return String(field(task, ["Title", "TaskName", "Name", "TaskTitle", "Desc", "Description"], "")) }
|
||||
function taskIdOf(task) { return field(task, ["TaskId", "TaskID", "taskId", "TaskIDStr", "Id", "id"], "") }
|
||||
function taskFinished(task) { return Number(field(task, ["IsFinished", "Finished", "Status", "status"], 0)) === 1 }
|
||||
function taskIdKey(id) { return String(id === undefined || id === null ? "" : id) }
|
||||
function taskRunCount(task, def) {
|
||||
var n = Number(field(task, ["NeedCount", "needCount", "Count", "count", "TotalCount", "totalCount", "Times", "times", "Limit", "limit"], def || 1))
|
||||
if (!n || isNaN(n) || n < 1) n = def || 1
|
||||
if (n > 10) n = 10
|
||||
return n
|
||||
}
|
||||
function taskAccepted(res) { return taskResultOk(res) || Number(resultCode(res)) === 9 }
|
||||
function finishVideoTask(taskOrId, cookie, repeat) {
|
||||
var tid = typeof taskOrId === "object" ? taskIdOf(taskOrId || {}) : taskOrId
|
||||
var n = repeat || (typeof taskOrId === "object" ? taskRunCount(taskOrId, 1) : 1)
|
||||
var ok = 0
|
||||
var last = null
|
||||
if (!tid) return { ok: 0, total: 0, last: null }
|
||||
for (var i = 0; i < n; i++) {
|
||||
last = qdPost("/argus/api/v1/video/adv/finishWatch", makeVideoPayload(tid), cookie)
|
||||
if (taskAccepted(last)) ok++
|
||||
else break
|
||||
}
|
||||
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)
|
||||
@@ -624,41 +652,64 @@ function doAdvTask(cookie) {
|
||||
if (!tasks.length) return { name: "激励任务", ok: true, msg: "无待完成任务", path: "/argus/api/v2/video/adv/mainPage" }
|
||||
if (taskFinished(tasks[tasks.length - 1])) return { name: "激励任务", ok: true, msg: "已完成", path: "/argus/api/v2/video/adv/mainPage" }
|
||||
var done = 0
|
||||
var attempted = false
|
||||
var blocked = 0
|
||||
for (var i = 0; i < tasks.length; i++) {
|
||||
var t = tasks[i] || {}
|
||||
if (taskFinished(t)) continue
|
||||
var tid = taskIdOf(t)
|
||||
if (!tid) continue
|
||||
var r = qdPost("/argus/api/v1/video/adv/finishWatch", makeVideoPayload(tid), cookie)
|
||||
if (taskResultOk(r) || Number(resultCode(r)) === 9) done++
|
||||
else return { name: "激励任务", ok: false, msg: resultMsg(r) || ("任务 " + tid + " 失败"), path: "/argus/api/v1/video/adv/finishWatch" }
|
||||
if (!advTaskActionable(t)) { blocked++; continue }
|
||||
attempted = true
|
||||
var fr = finishVideoTask(t, cookie)
|
||||
done += fr.ok
|
||||
if (fr.ok < fr.total) return { name: "激励任务", ok: false, msg: resultMsg(fr.last) || ("任务 " + tid + " 失败"), path: "/argus/api/v1/video/adv/finishWatch" }
|
||||
}
|
||||
var verify = qdGet("/argus/api/v2/video/adv/mainPage", {}, cookie)
|
||||
var after = firstArray(nested(verify, ["Data", "VideoRewardTab", "TaskList"]), nested(verify, ["data", "VideoRewardTab", "TaskList"]), nested(verify, ["Data", "TaskList"]), nested(verify, ["data", "TaskList"]))
|
||||
var finished = false
|
||||
for (var v = 0; v < after.length; v++) if (taskFinished(after[v])) { finished = true; break }
|
||||
return { name: "激励任务", ok: finished || done > 0, msg: finished ? "已完成" : (done ? ("完成 " + done + " 个视频任务") : "无待完成任务"), path: "/argus/api/v2/video/adv/mainPage" }
|
||||
var actionableLeft = 0
|
||||
for (var v = 0; v < after.length; v++) if (!taskFinished(after[v]) && taskIdOf(after[v]) && advTaskActionable(after[v])) actionableLeft++
|
||||
var finished = actionableLeft === 0
|
||||
var suffix = blocked ? (",跳过 " + blocked + " 个需其它入口任务") : ""
|
||||
return { name: "激励任务", ok: finished, msg: finished ? (attempted ? ("已完成" + suffix) : ("无待完成任务" + suffix)) : (done ? ("已提交 " + done + " 个视频任务,仍有 " + actionableLeft + " 个未完成" + suffix) : ("仍有 " + actionableLeft + " 个未完成" + suffix)), path: "/argus/api/v2/video/adv/mainPage" }
|
||||
}
|
||||
function doDailyTask(cookie) {
|
||||
var list = qdGet("/argus/api/v3/checkin/packagelist", {}, cookie)
|
||||
if (!taskResultOk(list)) return { name: "每日任务", ok: false, msg: resultMsg(list) || "获取任务列表失败", path: "/argus/api/v3/checkin/packagelist" }
|
||||
var data = list.Data || list.data || {}
|
||||
var pre = field(data, ["Task", "SurpriseTask", "CurrentTask"], null)
|
||||
if (pre && !taskFinished(pre) && taskIdOf(pre)) qdPost("/argus/api/v1/video/adv/finishWatch", makeVideoPayload(taskIdOf(pre)), cookie)
|
||||
var done = 0
|
||||
if (pre && !taskFinished(pre) && taskIdOf(pre)) {
|
||||
var pr = finishVideoTask(pre, cookie, 1)
|
||||
done += pr.ok
|
||||
if (pr.ok < pr.total) return { name: "每日任务", ok: false, msg: resultMsg(pr.last) || "惊喜福利任务失败", path: "/argus/api/v1/video/adv/finishWatch" }
|
||||
}
|
||||
var tasks = firstArray(nested(list, ["Data", "PackageList", "TaskList"]), nested(list, ["data", "PackageList", "TaskList"]), nested(list, ["Data", "TaskList"]), nested(list, ["data", "TaskList"]), nested(list, ["Data", "PackageList"]), nested(list, ["data", "PackageList"]))
|
||||
var oneAd = null
|
||||
var target = null
|
||||
for (var i = 0; i < tasks.length; i++) { var n = taskTitle(tasks[i]); if (n === "每日任务") { target = tasks[i]; break } }
|
||||
for (var i = 0; i < tasks.length; i++) {
|
||||
var n = taskTitle(tasks[i])
|
||||
if (!oneAd && /完成\s*1\s*个广告任务|1个广告|one.?ad/i.test(n)) oneAd = tasks[i]
|
||||
if (!target && n === "每日任务") target = tasks[i]
|
||||
}
|
||||
if (!target) for (var k = 0; k < tasks.length; k++) { var n2 = taskTitle(tasks[k]); if (/每日|daily/i.test(n2)) { target = tasks[k]; break } }
|
||||
if (!target) return { name: "每日任务", ok: true, msg: "无每日任务", path: "/argus/api/v3/checkin/packagelist" }
|
||||
if (oneAd && oneAd !== target && !taskFinished(oneAd) && taskIdOf(oneAd)) {
|
||||
var ar = finishVideoTask(oneAd, cookie, 1)
|
||||
done += ar.ok
|
||||
if (ar.ok < ar.total) return { name: "每日任务", ok: false, msg: resultMsg(ar.last) || "完成1个广告任务失败", path: "/argus/api/v1/video/adv/finishWatch" }
|
||||
}
|
||||
if (!target) return { name: "每日任务", ok: true, msg: done ? ("完成 " + done + " 次") : "无每日任务", path: "/argus/api/v3/checkin/packagelist" }
|
||||
if (taskFinished(target)) return { name: "每日任务", ok: true, msg: "已完成", path: "/argus/api/v3/checkin/packagelist" }
|
||||
var tid = taskIdOf(target)
|
||||
if (!tid) return { name: "每日任务", ok: true, msg: "无每日任务", path: "/argus/api/v3/checkin/packagelist" }
|
||||
var done = 0
|
||||
for (var j = 0; j < 3; j++) { var r = qdPost("/argus/api/v1/video/adv/finishWatch", makeVideoPayload(tid), cookie); if (taskResultOk(r) || Number(resultCode(r)) === 9) done++ }
|
||||
if (!tid) return { name: "每日任务", ok: true, msg: done ? ("完成 " + done + " 次") : "无每日任务", path: "/argus/api/v3/checkin/packagelist" }
|
||||
var tr = finishVideoTask(target, cookie, taskRunCount(target, 3))
|
||||
done += tr.ok
|
||||
if (tr.ok < tr.total) return { name: "每日任务", ok: false, msg: resultMsg(tr.last) || "每日任务广告失败", path: "/argus/api/v1/video/adv/finishWatch" }
|
||||
var verify = qdGet("/argus/api/v2/video/adv/mainPage", {}, cookie)
|
||||
var after = firstArray(nested(verify, ["Data", "VideoRewardTab", "TaskList"]), nested(verify, ["data", "VideoRewardTab", "TaskList"]))
|
||||
var after = firstArray(nested(verify, ["Data", "VideoRewardTab", "TaskList"]), nested(verify, ["data", "VideoRewardTab", "TaskList"]), nested(verify, ["Data", "TaskList"]), nested(verify, ["data", "TaskList"]))
|
||||
var finished = false
|
||||
for (var v = 0; v < after.length; v++) if (taskTitle(after[v]) === "每日任务" && taskFinished(after[v])) { finished = true; break }
|
||||
for (var v = 0; v < after.length; v++) if (taskIdKey(taskIdOf(after[v])) === taskIdKey(tid) && taskFinished(after[v])) { finished = true; break }
|
||||
if (!finished) for (var x = 0; x < after.length; x++) if (taskTitle(after[x]) === "每日任务" && taskFinished(after[x])) { finished = true; break }
|
||||
return { name: "每日任务", ok: finished || done > 0, msg: finished ? "已完成" : (done > 0 ? ("完成 " + done + " 次") : "任务未完成"), path: "/argus/api/v3/checkin/packagelist" }
|
||||
}
|
||||
function doLotteryTask(cookie) {
|
||||
|
||||
Reference in New Issue
Block a user