diff --git a/autman/qdreader_sign_autman.js b/autman/qdreader_sign_autman.js index 2c097c6..9e403d8 100644 --- a/autman/qdreader_sign_autman.js +++ b/autman/qdreader_sign_autman.js @@ -4,7 +4,7 @@ //[author: Hermes] //[service: BOSS] //[class: 工具类] -// [version: 2.15.6] +// [version: 2.15.7] // [platform: web,qq,wx,tg,tb,fs,we] // [public: false] // [price: 0] @@ -447,13 +447,27 @@ function resultOk(obj) { if (String(status) === "401" || String(status) === "403") return false return code === undefined || code === 0 || code === "0" || code === 200 || code === "200" || status === "ok" || status === "success" } +function isLoginExpiredMsg(msg) { + msg = String(msg || "") + return /登录状态已失效|登录已失效|登录状态.*过期|登录.*过期|用户未登录|未登录|请登录|重新登录|Cookie.*失效|CK.*失效|cookie.*expired|login.*expired|not\s*login/i.test(msg) +} function resultMsg(obj) { obj = responseEnvelope(obj) if (!obj) return "" var status = obj.status || obj.Status || obj.statusCode || obj.StatusCode if (String(status) === "401") return "登录状态已失效,请更新 Cookie" if (String(status) === "403") return "接口鉴权失败,请更新 Cookie" - return obj.Message || obj.Msg || obj.message || obj.msg || obj.error || obj.toast || (obj.data && (obj.data.message || obj.data.msg || obj.data.error || obj.data.toast || obj.data.Message || obj.data.Msg)) || (obj.Data && (obj.Data.message || obj.Data.msg || obj.Data.error || obj.Data.toast || obj.Data.Message || obj.Data.Msg)) || "" + var msg = obj.Message || obj.Msg || obj.message || obj.msg || obj.error || obj.toast || (obj.data && (obj.data.message || obj.data.msg || obj.data.error || obj.data.toast || obj.data.Message || obj.data.Msg)) || (obj.Data && (obj.Data.message || obj.Data.msg || obj.Data.error || obj.Data.toast || obj.Data.Message || obj.Data.Msg)) || "" + if (isLoginExpiredMsg(msg)) return "登录状态已失效,请更新 Cookie" + return msg +} +function isCookieExpiredResult(obj) { + var env = responseEnvelope(obj) + if (!env) return false + var status = env.status || env.Status || env.statusCode || env.StatusCode + if (String(status) === "401") return true + var rawMsg = env.Message || env.Msg || env.message || env.msg || env.error || env.toast || (env.data && (env.data.message || env.data.msg || env.data.error || env.data.toast || env.data.Message || env.data.Msg)) || (env.Data && (env.Data.message || env.Data.msg || env.Data.error || env.Data.toast || env.Data.Message || env.Data.Msg)) || "" + return isLoginExpiredMsg(rawMsg) } function successLikeMsg(msg) { msg = String(msg || "") @@ -708,12 +722,18 @@ function taskRunCount(task, def) { if (n > 10) n = 10 return n } -function taskAccepted(res) { return taskResultOk(res) || Number(resultCode(res)) === 9 } +function taskAccepted(res) { return (taskResultOk(res) || Number(resultCode(res)) === 9) && !riskConf(res) } function riskConf(res) { res = responseEnvelope(res) var data = res && (res.Data || res.data || res.ResultData || res.resultData) return data && (data.RiskConf || data.riskConf || data.Risk || data.risk) } +function riskBlockedMsg(res) { + var rc = riskConf(res) + if (!rc) return "" + var url = rc.CaptchaURL || rc.captchaUrl || rc.Url || rc.url || "" + return url ? "触发风控验证,任务未确认完成" : "触发风控验证,任务未确认完成" +} function finishVideoTask(taskOrId, cookie, repeat) { var tid = typeof taskOrId === "object" ? taskIdOf(taskOrId || {}) : taskOrId var n = repeat || (typeof taskOrId === "object" ? taskRunCount(taskOrId, 1) : 1) @@ -758,13 +778,13 @@ function doAdvTask(cookie) { var fr = finishVideoTask(tid, cookie, 1) submittedCount += fr.ok if (riskConf(fr.last)) riskSubmitted = true - if (fr.ok < fr.total) return { name: "激励任务", ok: false, msg: resultMsg(fr.last) || ("第 " + (i + 1) + " 个任务失败"), path: "/argus/api/v1/video/adv/finishWatch" } + if (fr.ok < fr.total) return { name: "激励任务", ok: false, msg: riskBlockedMsg(fr.last) || resultMsg(fr.last) || ("第 " + (i + 1) + " 个任务失败"), path: "/argus/api/v1/video/adv/finishWatch" } } var verify = qdGet("/argus/api/v2/video/adv/mainPage", {}, cookie) var after = advTaskList(verify) var finished = !!(after && after.length && after.every(function (t) { return taskFinished(t) })) if (finished) return { name: "激励任务", ok: true, msg: "任务已完成", path: "/argus/api/v2/video/adv/mainPage" } - if (submittedCount > 0 && riskSubmitted) return { name: "激励任务", ok: true, msg: "已提交,状态待刷新", path: "/argus/api/v2/video/adv/mainPage" } + if (submittedCount > 0 && riskSubmitted) return { name: "激励任务", ok: false, msg: "触发风控验证,任务未确认完成", path: "/argus/api/v2/video/adv/mainPage" } return { name: "激励任务", ok: false, msg: submittedCount ? "部分任务未完成" : "未找到可提交任务", path: "/argus/api/v2/video/adv/mainPage" } } function taskReceived(task) { @@ -781,7 +801,7 @@ function doDailyTask(cookie) { var pr = finishVideoTask(taskIdOf(pre), cookie, 1) done += pr.ok if (riskConf(pr.last)) riskSubmitted = true - if (pr.ok < pr.total) return { name: "每日任务", ok: false, msg: resultMsg(pr.last) || "惊喜福利任务失败", path: "/argus/api/v1/video/adv/finishWatch" } + if (pr.ok < pr.total) return { name: "每日任务", ok: false, msg: riskBlockedMsg(pr.last) || resultMsg(pr.last) || "惊喜福利任务失败", path: "/argus/api/v1/video/adv/finishWatch" } } var tasks = dailyTaskList(main) if (!tasks.length) return { name: "每日任务", ok: false, msg: "任务列表为空", path: "/argus/api/v2/video/adv/mainPage" } @@ -796,7 +816,7 @@ function doDailyTask(cookie) { var ar = finishVideoTask(taskIdOf(oneAd), cookie, 1) done += ar.ok if (riskConf(ar.last)) riskSubmitted = true - if (ar.ok < ar.total) return { name: "每日任务", ok: false, msg: resultMsg(ar.last) || "完成1个广告任务失败", path: "/argus/api/v1/video/adv/finishWatch" } + if (ar.ok < ar.total) return { name: "每日任务", ok: false, msg: riskBlockedMsg(ar.last) || resultMsg(ar.last) || "完成1个广告任务失败", path: "/argus/api/v1/video/adv/finishWatch" } } if (!target) return { name: "每日任务", ok: false, msg: "未找到每日任务任务", path: "/argus/api/v2/video/adv/mainPage" } if (taskReceived(target)) return { name: "每日任务", ok: true, msg: "任务已完成", path: "/argus/api/v2/video/adv/mainPage" } @@ -805,13 +825,13 @@ function doDailyTask(cookie) { var tr = finishVideoTask(tid, cookie, 3) done += tr.ok if (riskConf(tr.last)) riskSubmitted = true - if (tr.ok < tr.total) return { name: "每日任务", ok: false, msg: resultMsg(tr.last) || "每日任务广告失败", path: "/argus/api/v1/video/adv/finishWatch" } + if (tr.ok < tr.total) return { name: "每日任务", ok: false, msg: riskBlockedMsg(tr.last) || resultMsg(tr.last) || "每日任务广告失败", path: "/argus/api/v1/video/adv/finishWatch" } var verify = qdGet("/argus/api/v2/video/adv/mainPage", {}, cookie) var after = dailyTaskList(verify) var finished = false for (var v = 0; v < after.length; v++) if (taskTitle(after[v]) === "完成3个广告任务得奖励" && taskReceived(after[v])) { finished = true; break } if (finished) return { name: "每日任务", ok: true, msg: "任务已完成", path: "/argus/api/v2/video/adv/mainPage" } - if (done > 0 && riskSubmitted) return { name: "每日任务", ok: true, msg: "已提交,状态待刷新", path: "/argus/api/v2/video/adv/mainPage" } + if (done > 0 && riskSubmitted) return { name: "每日任务", ok: false, msg: "触发风控验证,任务未确认完成", path: "/argus/api/v2/video/adv/mainPage" } return { name: "每日任务", ok: false, msg: "任务未完成", path: "/argus/api/v2/video/adv/mainPage" } } function doLotteryTask(cookie) { @@ -907,9 +927,9 @@ function doMessageBox(cookie) { var bookId = data.BookId || "" if (data.Status !== undefined && Number(data.Status) !== 1) continue if (chance <= 0 && bookStatus !== 0 && bookStatus !== 1 && bookStatus !== 2) continue - if (chance > 0) { var cb = qdPost("/argus/api/v1/interaction/rewardcallback", { orderId: orderId, checkRisk: "1" }, cookie); if (taskResultOk(cb) || String(resultCode(cb)) === "0") handled++; continue } - if (bookStatus === 0 || bookStatus === 1) { if (!bookId) continue; var add = qdPost("/argus/api/v1/interaction/rewardaddshelf", { orderId: orderId, bookId: bookId }, cookie); if (taskResultOk(add) || String(resultCode(add)) === "0") handled++; continue } - if (bookStatus === 2) { var rc = qdPost("/argus/api/v1/interaction/rewardcallback", { orderId: orderId, checkRisk: "1" }, cookie); if (!taskResultOk(rc) && String(resultCode(rc)) !== "0") continue; var r2 = qdPost("/argus/api/v1/interaction/rewardcallback", { orderId: orderId, checkRisk: "0" }, cookie); if (taskResultOk(r2) || String(resultCode(r2)) === "0") handled++ } + if (chance > 0) { var cb = qdPost("/argus/api/v1/interaction/rewardcallback", { orderId: orderId, checkRisk: "1" }, cookie); if (!riskConf(cb) && (taskResultOk(cb) || String(resultCode(cb)) === "0")) handled++; continue } + if (bookStatus === 0 || bookStatus === 1) { if (!bookId) continue; var add = qdPost("/argus/api/v1/interaction/rewardaddshelf", { orderId: orderId, bookId: bookId }, cookie); if (!riskConf(add) && (taskResultOk(add) || String(resultCode(add)) === "0")) handled++; continue } + if (bookStatus === 2) { var rc = qdPost("/argus/api/v1/interaction/rewardcallback", { orderId: orderId, checkRisk: "1" }, cookie); if (riskConf(rc) || (!taskResultOk(rc) && String(resultCode(rc)) !== "0")) continue; var r2 = qdPost("/argus/api/v1/interaction/rewardcallback", { orderId: orderId, checkRisk: "0" }, cookie); if (!riskConf(r2) && (taskResultOk(r2) || String(resultCode(r2)) === "0")) handled++ } } } return { name: "大咖荐书", ok: true, msg: handled ? ("成功处理 " + handled + " 个荐书") : "无待处理荐书", path: "https://magev6.if.qidian.com/argus/api/v2/message/pullmessage" } @@ -932,6 +952,13 @@ function doTaskChain(uid, cookie, source, runId) { var startedAt = nowIso() var details = [] var checkin = qidianRequest(CHECKIN_PATH, "POST", {}, cookie) + if (isCookieExpiredResult(checkin)) { + var expiredMsg = resultMsg(checkin) || "登录状态已失效,请更新 Cookie" + var expiredDetail = { name: "签到结果", ok: false, msg: expiredMsg, path: CHECKIN_PATH, cookieExpired: true } + var expiredResult = { uid: String(uid), ok: false, msg: expiredMsg, time: nowIso(), startedAt: startedAt, source: source || "manual", runId: runId || "", tasks: [expiredDetail], cookieExpired: true } + setLastResult(uid, expiredResult) + return { uid: uid, ok: false, msg: expiredMsg, raw: checkin, log: expiredResult, cookieExpired: true } + } var ok = taskResultOk(checkin) var msg = resultMsg(checkin) || (ok ? "签到请求成功" : ("签到失败" + (resultCode(checkin) !== undefined ? " code=" + resultCode(checkin) : ""))) details.push({ name: "签到结果", ok: !!ok, msg: String(msg || ""), path: CHECKIN_PATH })