diff --git a/src/App.vue b/src/App.vue index 927212b9..93ae4178 100644 --- a/src/App.vue +++ b/src/App.vue @@ -429,6 +429,7 @@ async function handleCommands(cmds: CliMatches): Promise { await router.push({ name: "实用脚本", query: { + auto: "true", uids: >usMatch.args.uids.value ?? [], exit: `${usMatch.args.exit.value ?? false}`, skip: `${usMatch.args.skip.value ?? false}`, diff --git a/src/components/userScripts/tus-mission.vue b/src/components/userScripts/tus-mission.vue index 7690629f..e4352407 100644 --- a/src/components/userScripts/tus-mission.vue +++ b/src/components/userScripts/tus-mission.vue @@ -155,7 +155,7 @@ async function tryRefresh(): Promise { loadState.value = false; } -async function tryAuto(): Promise { +async function tryAuto(skip: boolean = false): Promise { if (loadScript.value) { showSnackbar.warn("任务正在执行中,请稍后再试"); return; @@ -177,7 +177,7 @@ async function tryAuto(): Promise { loadMission.value = false; return; } - await autoSign(cookie.value); + await autoSign(cookie.value, skip); const postFilter = parseMissions.value.filter((i) => i.key !== "continuous_sign"); if (postFilter.every((i) => i.status)) { await TGLogger.Script("[米游币任务]所有任务已完成"); @@ -297,7 +297,7 @@ async function refreshState(ck: TGApp.App.Account.Cookie): Promise { await TGLogger.Script("[米游币任务]任务数据合并完成"); } -async function autoSign(ck: TGApp.App.Account.Cookie, ch?: string): Promise { +async function autoSign(ck: TGApp.App.Account.Cookie, skip: boolean, ch?: string): Promise { const signFind = parseMissions.value.find((i) => i.key === "continuous_sign"); if (!signFind) { await TGLogger.Script("[米游币任务]未找到打卡任务"); @@ -318,13 +318,17 @@ async function autoSign(ck: TGApp.App.Account.Cookie, ch?: string): Promise { loadState.value = false; } -async function tryAuto(): Promise { +async function tryAuto(skip: boolean = false): Promise { if (loadScript.value) { showSnackbar.warn("任务正在执行中,请稍后再试"); return; @@ -199,7 +199,7 @@ async function tryAuto(): Promise { loadSign.value = false; return; } - await trySign(selected, cookie.value); + await trySign(selected, cookie.value, skip); await refreshState(cookie.value); await TGLogger.Script("[签到任务]签到任务执行完毕"); await TGLogger.ScriptSep("签到任务", false); @@ -254,7 +254,11 @@ async function refreshState(ck: TGApp.App.Account.Cookie): Promise { } } -async function trySign(ac: Array, ck: TGApp.App.Account.Cookie): Promise { +async function trySign( + ac: Array, + ck: TGApp.App.Account.Cookie, + skip: boolean, +): Promise { const cookie = { cookie_token: ck.cookie_token, account_id: ck.account_id }; const ckSign = { stoken: ck.stoken, stuid: ck.stuid, mid: ck.mid }; for (const item of ac) { @@ -272,6 +276,10 @@ async function trySign(ac: Array, ck: TGApp.App.Account.Cookie): Pr if (challenge !== undefined) challenge = undefined; if ("retcode" in signResp) { if (signResp.retcode === 1034) { + if (skip) { + await TGLogger.Script("已设置跳过验证,签到失败"); + break; + } await TGLogger.Script(`[签到任务]触发验证码,正在尝试验证`); const challengeGet = await miscReq.challenge(ckSign); if (challengeGet === false) { diff --git a/src/pages/User/Scripts.vue b/src/pages/User/Scripts.vue index bb327fad..a1294d7d 100644 --- a/src/pages/User/Scripts.vue +++ b/src/pages/User/Scripts.vue @@ -79,6 +79,7 @@ import miscReq from "@req/miscReq.js"; import painterReq from "@req/painterReq.js"; import TSUserAccount from "@Sqlm/userAccount.js"; import useUserStore from "@store/user.js"; +import { exit } from "@tauri-apps/plugin-process"; import { storeToRefs } from "pinia"; import { onBeforeMount, onMounted, ref, shallowRef, useTemplateRef } from "vue"; import { useRoute, useRouter } from "vue-router"; @@ -89,6 +90,7 @@ const router = useRouter(); const { uid, briefInfo, cookie, account } = storeToRefs(useUserStore()); // 路由参数 +const autoRun = ref(false); const exitAfter = ref(false); const skipGeetest = ref(true); const targetUids = shallowRef>([]); @@ -104,6 +106,7 @@ onBeforeMount(async () => { if (Object.keys(route.query).length > 0) { exitAfter.value = route.query.exit === "true"; skipGeetest.value = route.query.skip === "true"; + autoRun.value = route.query.auto === "true"; if (route.query.uids) { if (Array.isArray(route.query.uids)) { targetUids.value = >route.query.uids; @@ -117,10 +120,30 @@ onBeforeMount(async () => { onMounted(async () => { accounts.value = await TSUserAccount.account.getAllAccount(); + targetUids.value = targetUids.value.filter((u) => accounts.value.some((a) => a.uid === u)); curAccount.value = accounts.value.find((i) => i.uid === uid.value); await showLoading.end(); + if (autoRun.value) await tryAutoRun(); }); +async function tryAutoRun(): Promise { + let uids: Array = accounts.value.map((u) => u.uid); + if (targetUids.value.length === 0) { + showSnackbar.warn("未接收到合法UID列表,默认全部执行"); + } else { + uids = targetUids.value; + } + for (const uid of uids) { + await loadAccount(uid); + await tryExecAll(); + } + if (exitAfter.value) { + showSnackbar.success("任务执行完成,即将自动退出"); + await new Promise((resolve) => setTimeout(resolve, 1000)); + await exit(); + } +} + async function loadAccount(ac: string): Promise { if (uid.value && ac === uid.value) { showSnackbar.warn("该账户已经登录,无需切换"); @@ -196,8 +219,8 @@ async function tryExecAll(): Promise { return; } runAll.value = true; - await missionEl.value?.tryAuto(); - await signEl.value?.tryAuto(); + await missionEl.value?.tryAuto(skipGeetest.value); + await signEl.value?.tryAuto(skipGeetest.value); runAll.value = false; }