自动执行任务

#195
This commit is contained in:
BTMuli
2026-01-01 20:06:58 +08:00
parent 15e0a60bb6
commit dc33c0a259
4 changed files with 45 additions and 9 deletions

View File

@@ -429,6 +429,7 @@ async function handleCommands(cmds: CliMatches): Promise<void> {
await router.push({
name: "实用脚本",
query: {
auto: "true",
uids: <Array<string>>usMatch.args.uids.value ?? [],
exit: `${usMatch.args.exit.value ?? false}`,
skip: `${usMatch.args.skip.value ?? false}`,

View File

@@ -155,7 +155,7 @@ async function tryRefresh(): Promise<void> {
loadState.value = false;
}
async function tryAuto(): Promise<void> {
async function tryAuto(skip: boolean = false): Promise<void> {
if (loadScript.value) {
showSnackbar.warn("任务正在执行中,请稍后再试");
return;
@@ -177,7 +177,7 @@ async function tryAuto(): Promise<void> {
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<void> {
await TGLogger.Script("[米游币任务]任务数据合并完成");
}
async function autoSign(ck: TGApp.App.Account.Cookie, ch?: string): Promise<void> {
async function autoSign(ck: TGApp.App.Account.Cookie, skip: boolean, ch?: string): Promise<void> {
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<void
showSnackbar.error(`[${resp.retcode}] ${resp.message}`);
return;
}
if (skip) {
await TGLogger.Script("已设置跳过验证,打卡失败");
return;
}
await TGLogger.Script(`[米游币任务]社区签到触发验证码,正在尝试验证`);
const challenge = await miscReq.challenge(ckSign);
if (challenge === false) {
await TGLogger.Script(`[米游币任务]验证失败`);
return;
}
await autoSign(ck, challenge);
await autoSign(ck, skip, challenge);
return;
}
await TGLogger.Script("[米游币任务]打卡成功");

View File

@@ -169,7 +169,7 @@ async function tryRefresh(): Promise<void> {
loadState.value = false;
}
async function tryAuto(): Promise<void> {
async function tryAuto(skip: boolean = false): Promise<void> {
if (loadScript.value) {
showSnackbar.warn("任务正在执行中,请稍后再试");
return;
@@ -199,7 +199,7 @@ async function tryAuto(): Promise<void> {
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<void> {
}
}
async function trySign(ac: Array<SignAccount>, ck: TGApp.App.Account.Cookie): Promise<void> {
async function trySign(
ac: Array<SignAccount>,
ck: TGApp.App.Account.Cookie,
skip: boolean,
): Promise<void> {
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<SignAccount>, 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) {

View File

@@ -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<boolean>(false);
const exitAfter = ref<boolean>(false);
const skipGeetest = ref<boolean>(true);
const targetUids = shallowRef<Array<string>>([]);
@@ -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 = <Array<string>>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<void> {
let uids: Array<string> = 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<void>((resolve) => setTimeout(resolve, 1000));
await exit();
}
}
async function loadAccount(ac: string): Promise<void> {
if (uid.value && ac === uid.value) {
showSnackbar.warn("该账户已经登录,无需切换");
@@ -196,8 +219,8 @@ async function tryExecAll(): Promise<void> {
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;
}
</script>