mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2026-04-23 22:09:51 +08:00
♻️ 迁移剩余请求
This commit is contained in:
@@ -461,7 +461,7 @@ async function tryGetTokens(ck: TGApp.App.Account.Cookie): Promise<void> {
|
||||
try {
|
||||
const briefRes = await bbsReq.userInfo(ck);
|
||||
console.debug(briefRes);
|
||||
if ("retcode" in briefRes) {
|
||||
if (briefRes.retcode !== 0) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${briefRes.retcode}]${briefRes.message}`);
|
||||
await TGLogger.Warn(`获取用户数据失败:${briefRes.retcode}-${briefRes.message}`);
|
||||
@@ -470,10 +470,10 @@ async function tryGetTokens(ck: TGApp.App.Account.Cookie): Promise<void> {
|
||||
}
|
||||
showSnackbar.success("获取用户信息成功");
|
||||
briefInfoGet = {
|
||||
nickname: briefRes.nickname,
|
||||
uid: briefRes.uid,
|
||||
avatar: briefRes.avatar_url,
|
||||
desc: briefRes.introduce,
|
||||
nickname: briefRes.data.user_info.nickname,
|
||||
uid: briefRes.data.user_info.uid,
|
||||
avatar: briefRes.data.user_info.avatar_url,
|
||||
desc: briefRes.data.user_info.introduce,
|
||||
};
|
||||
await showLoading.update("正在保存用户数据");
|
||||
await TSUserAccount.account.saveAccount({
|
||||
@@ -764,7 +764,7 @@ async function addByCookie(): Promise<void> {
|
||||
let briefInfoGet: TGApp.App.Account.BriefInfo | undefined;
|
||||
try {
|
||||
const briefRes = await bbsReq.userInfo(ck);
|
||||
if ("retcode" in briefRes) {
|
||||
if (briefRes.retcode !== 0) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${briefRes.retcode}]${briefRes.message}`);
|
||||
await TGLogger.Warn(`获取用户数据失败:${briefRes.retcode}-${briefRes.message}`);
|
||||
@@ -772,10 +772,10 @@ async function addByCookie(): Promise<void> {
|
||||
return;
|
||||
}
|
||||
briefInfoGet = {
|
||||
nickname: briefRes.nickname,
|
||||
uid: briefRes.uid,
|
||||
avatar: briefRes.avatar_url,
|
||||
desc: briefRes.introduce,
|
||||
nickname: briefRes.data.user_info.nickname,
|
||||
uid: briefRes.data.user_info.uid,
|
||||
avatar: briefRes.data.user_info.avatar_url,
|
||||
desc: briefRes.data.user_info.introduce,
|
||||
};
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
<script lang="ts" setup>
|
||||
import showSnackbar from "@comp/func/snackbar.js";
|
||||
import bbsReq from "@req/bbsReq.js";
|
||||
import TGHttps from "@utils/TGHttps.js";
|
||||
import { onMounted, onUnmounted, ref, shallowRef, useTemplateRef, watch } from "vue";
|
||||
|
||||
import { LoadingParams } from "./loading.js";
|
||||
@@ -79,16 +80,30 @@ async function getRandomEmoji(): Promise<void> {
|
||||
for (const [k, v] of Object.entries(JSON.parse(emojisRead))) tmpArr.push([`${k}`, `${v}`]);
|
||||
localEmojis.value = tmpArr;
|
||||
} else {
|
||||
const resp = await bbsReq.emojis();
|
||||
if ("retcode" in resp) {
|
||||
console.error(resp);
|
||||
showSnackbar.error("获取表情包失败!");
|
||||
let resp: TGApp.BBS.Emoji.Resp | undefined;
|
||||
try {
|
||||
resp = await bbsReq.emojis();
|
||||
if (resp.retcode !== 0) {
|
||||
console.error(resp);
|
||||
showSnackbar.error("获取表情包失败!");
|
||||
iconUrl.value = defaultIcon;
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
showSnackbar.error(`获取表情包失败:${TGHttps.getErrMsg(e)}`);
|
||||
iconUrl.value = defaultIcon;
|
||||
return;
|
||||
}
|
||||
localStorage.setItem("emojis", JSON.stringify(resp));
|
||||
const emojis: Record<string, string> = {};
|
||||
for (const series of resp.data.list) {
|
||||
for (const emoji of series.list) {
|
||||
emojis[emoji.name] = emoji.icon;
|
||||
}
|
||||
}
|
||||
localStorage.setItem("emojis", JSON.stringify(emojis));
|
||||
let tmpArr: Array<EmojiItem> = [];
|
||||
for (const [k, v] of Object.entries(resp)) {
|
||||
for (const [k, v] of Object.entries(emojis)) {
|
||||
tmpArr.push([k, v]);
|
||||
localEmojis.value = tmpArr;
|
||||
}
|
||||
|
||||
@@ -193,7 +193,7 @@ async function tryGetTokens(ck: TGApp.App.Account.Cookie): Promise<void> {
|
||||
await showLoading.update("正在获取用户信息");
|
||||
try {
|
||||
const briefRes = await bbsReq.userInfo(ck);
|
||||
if ("retcode" in briefRes) {
|
||||
if (briefRes.retcode !== 0) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${briefRes.retcode}]${briefRes.message}`);
|
||||
await TGLogger.Warn(`获取用户数据失败:${briefRes.retcode}-${briefRes.message}`);
|
||||
@@ -201,10 +201,10 @@ async function tryGetTokens(ck: TGApp.App.Account.Cookie): Promise<void> {
|
||||
}
|
||||
showSnackbar.success("获取用户信息成功");
|
||||
briefInfoGet = {
|
||||
nickname: briefRes.nickname,
|
||||
uid: briefRes.uid,
|
||||
avatar: briefRes.avatar_url,
|
||||
desc: briefRes.introduce,
|
||||
nickname: briefRes.data.user_info.nickname,
|
||||
uid: briefRes.data.user_info.uid,
|
||||
avatar: briefRes.data.user_info.avatar_url,
|
||||
desc: briefRes.data.user_info.introduce,
|
||||
};
|
||||
await showLoading.update("正在保存用户数据");
|
||||
await TSUserAccount.account.saveAccount({
|
||||
@@ -371,7 +371,7 @@ async function refreshUser(uid: string, full: boolean) {
|
||||
await showLoading.update("正在获取用户信息");
|
||||
try {
|
||||
const infoRes = await bbsReq.userInfo(ck);
|
||||
if ("retcode" in infoRes) {
|
||||
if (infoRes.retcode !== 0) {
|
||||
await showLoading.update("获取用户信息失败");
|
||||
showSnackbar.error(`[${infoRes.retcode}]${infoRes.message}`);
|
||||
await TGLogger.Warn("[tc-userBadge][refreshUserInfo] 获取用户信息失败");
|
||||
@@ -379,10 +379,10 @@ async function refreshUser(uid: string, full: boolean) {
|
||||
} else {
|
||||
await showLoading.update("获取用户信息成功");
|
||||
account.brief = {
|
||||
nickname: infoRes.nickname,
|
||||
uid: infoRes.uid,
|
||||
avatar: infoRes.avatar_url,
|
||||
desc: infoRes.introduce,
|
||||
nickname: infoRes.data.user_info.nickname,
|
||||
uid: infoRes.data.user_info.uid,
|
||||
avatar: infoRes.data.user_info.avatar_url,
|
||||
desc: infoRes.data.user_info.introduce,
|
||||
};
|
||||
await TGLogger.Info("[tc-userBadge][refreshUserInfo] 获取用户信息成功");
|
||||
}
|
||||
@@ -630,17 +630,17 @@ async function addByCookie(): Promise<void> {
|
||||
let briefGet: TGApp.App.Account.BriefInfo | undefined;
|
||||
try {
|
||||
const briefRes = await bbsReq.userInfo(ck);
|
||||
if ("retcode" in briefRes) {
|
||||
if (briefRes.retcode !== 0) {
|
||||
await showLoading.end();
|
||||
showSnackbar.error(`[${briefRes.retcode}]${briefRes.message}`);
|
||||
await TGLogger.Warn(`获取用户数据失败:${briefRes.retcode}-${briefRes.message}`);
|
||||
return;
|
||||
}
|
||||
briefGet = {
|
||||
nickname: briefRes.nickname,
|
||||
uid: briefRes.uid,
|
||||
avatar: briefRes.avatar_url,
|
||||
desc: briefRes.introduce,
|
||||
nickname: briefRes.data.user_info.nickname,
|
||||
uid: briefRes.data.user_info.uid,
|
||||
avatar: briefRes.data.user_info.avatar_url,
|
||||
desc: briefRes.data.user_info.introduce,
|
||||
};
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
|
||||
@@ -118,39 +118,57 @@ async function share(): Promise<void> {
|
||||
}
|
||||
|
||||
async function freshQr(): Promise<void> {
|
||||
const resp = await hk4eReq.loginQr.create(codeGid.value);
|
||||
if ("retcode" in resp) {
|
||||
showSnackbar.error(`[${resp.retcode}] ${resp.message}`);
|
||||
let resp: TGApp.Game.Login.QrResp | undefined;
|
||||
try {
|
||||
resp = await hk4eReq.loginQr.create(codeGid.value);
|
||||
if (resp.retcode !== 0) {
|
||||
showSnackbar.error(`[${resp.retcode}] ${resp.message}`);
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`创建二维码失败:${errMsg}`);
|
||||
await TGLogger.Error(`[TcoGameLogin][freshQr] 创建二维码异常`);
|
||||
await TGLogger.Error(`[TcoGameLogin][freshQr] ${e}`);
|
||||
return;
|
||||
}
|
||||
codeUrl.value = resp.url;
|
||||
codeUrl.value = resp.data.url;
|
||||
codeTicket.value = new URL(codeUrl.value).searchParams.get("ticket") || "";
|
||||
}
|
||||
|
||||
async function cycleGetDataGame(): Promise<void> {
|
||||
const res = await hk4eReq.loginQr.state(codeTicket.value, codeGid.value);
|
||||
console.log(res);
|
||||
if ("retcode" in res) {
|
||||
showSnackbar.error(`[${res.retcode}] ${res.message}`);
|
||||
if (res.retcode === -106) {
|
||||
await freshQr();
|
||||
} else {
|
||||
if (cycleTimer) clearInterval(cycleTimer);
|
||||
cycleTimer = null;
|
||||
model.value = false;
|
||||
let res: TGApp.Game.Login.StatResp | undefined;
|
||||
try {
|
||||
res = await hk4eReq.loginQr.state(codeTicket.value, codeGid.value);
|
||||
console.log(res);
|
||||
if (res.retcode !== 0) {
|
||||
showSnackbar.error(`[${res.retcode}] ${res.message}`);
|
||||
if (res.retcode === -106) {
|
||||
await freshQr();
|
||||
} else {
|
||||
if (cycleTimer) clearInterval(cycleTimer);
|
||||
cycleTimer = null;
|
||||
model.value = false;
|
||||
}
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取登录状态失败:${errMsg}`);
|
||||
await TGLogger.Error(`[TcoGameLogin][cycleGetDataGame] 获取登录状态异常`);
|
||||
await TGLogger.Error(`[TcoGameLogin][cycleGetDataGame] ${e}`);
|
||||
return;
|
||||
}
|
||||
if (res.stat === "Init" || res.stat === "Scanned") return;
|
||||
if (res.stat === "Confirmed") {
|
||||
if (res.data.stat === "Init" || res.data.stat === "Scanned") return;
|
||||
if (res.data.stat === "Confirmed") {
|
||||
if (cycleTimer) clearInterval(cycleTimer);
|
||||
cycleTimer = null;
|
||||
if (res.payload.proto === "Raw") {
|
||||
showSnackbar.error(`返回数据异常:${res.payload}`);
|
||||
if (res.data.payload.proto === "Raw") {
|
||||
showSnackbar.error(`返回数据异常:${res.data.payload}`);
|
||||
model.value = false;
|
||||
return;
|
||||
}
|
||||
const statusRaw: TGApp.Game.Login.StatPayloadRaw = JSON.parse(res.payload.raw);
|
||||
const statusRaw: TGApp.Game.Login.StatPayloadRaw = JSON.parse(res.data.payload.raw);
|
||||
await showLoading.start("正在获取SToken");
|
||||
let stResp: TGApp.Game.Login.StResp | undefined;
|
||||
try {
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<div v-else-if="gameAccounts.length === 0" class="sign-not-login">暂无游戏账户</div>
|
||||
<div v-else-if="loading" class="sign-loading">
|
||||
<div class="loading-content">
|
||||
<v-progress-linear color="blue" :model-value="loadingProgress" height="6" rounded />
|
||||
<v-progress-linear :model-value="loadingProgress" color="blue" height="6" rounded />
|
||||
<div class="loading-text">{{ loadingText }}</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -36,6 +36,7 @@ import lunaReq from "@req/lunaReq.js";
|
||||
import TSUserAccount from "@Sqlm/userAccount.js";
|
||||
import useAppStore from "@store/app.js";
|
||||
import useUserStore from "@store/user.js";
|
||||
import TGHttps from "@utils/TGHttps.js";
|
||||
import TGLogger from "@utils/TGLogger.js";
|
||||
import { storeToRefs } from "pinia";
|
||||
import { onMounted, ref, watch } from "vue";
|
||||
@@ -72,6 +73,15 @@ watch(
|
||||
|
||||
onMounted(async () => await loadData());
|
||||
|
||||
async function endLoad(): Promise<void> {
|
||||
loadingProgress.value = 100;
|
||||
loadingText.value = "加载完成";
|
||||
await new Promise<void>((resolve) => setTimeout(resolve, 200));
|
||||
loading.value = false;
|
||||
loadingProgress.value = 0;
|
||||
loadingText.value = "";
|
||||
}
|
||||
|
||||
async function loadData(): Promise<void> {
|
||||
if (!isLogin.value || uid.value === undefined || !cookie.value) {
|
||||
gameAccounts.value = [];
|
||||
@@ -79,51 +89,50 @@ async function loadData(): Promise<void> {
|
||||
return;
|
||||
}
|
||||
signAccounts.value = [];
|
||||
try {
|
||||
const accounts = await TSUserAccount.game.getAccount(uid.value);
|
||||
gameAccounts.value = accounts;
|
||||
if (accounts.length === 0) {
|
||||
await TGLogger.Warn("[Sign Card] No game accounts found");
|
||||
emits("success");
|
||||
return;
|
||||
}
|
||||
const accounts = await TSUserAccount.game.getAccount(uid.value);
|
||||
gameAccounts.value = accounts;
|
||||
if (accounts.length === 0) {
|
||||
await TGLogger.Warn("[Sign Card] No game accounts found");
|
||||
emits("success");
|
||||
loading.value = true;
|
||||
loadingProgress.value = 0;
|
||||
const ck = { cookie_token: cookie.value.cookie_token, account_id: cookie.value.account_id };
|
||||
for (let i = 0; i < accounts.length; i++) {
|
||||
const account = accounts[i];
|
||||
loadingText.value = `正在加载 ${account.gameBiz} - ${account.regionName} - ${account.gameUid}...`;
|
||||
loadingProgress.value = (i / accounts.length) * 100;
|
||||
let info, stat;
|
||||
try {
|
||||
const infoResp = await lunaReq.sign.info(account, ck);
|
||||
if ("retcode" in infoResp) {
|
||||
await TGLogger.Error(
|
||||
`[Sign Card] Failed to get rewards for ${account.gameBiz}: ${infoResp.message}`,
|
||||
);
|
||||
} else info = infoResp;
|
||||
const statResp = await lunaReq.sign.stat(account, ck);
|
||||
if ("retcode" in statResp) {
|
||||
await TGLogger.Error(
|
||||
`[Sign Card] Failed to get status for ${account.gameBiz}: ${statResp.message}`,
|
||||
);
|
||||
} else stat = statResp;
|
||||
} catch (error) {
|
||||
await TGLogger.Error(`[Sign Card] Error loading data for ${account.gameBiz}: ${error}`);
|
||||
}
|
||||
signAccounts.value.push({ account, info, stat });
|
||||
}
|
||||
} catch (error) {
|
||||
await TGLogger.Error(`[Sign Card] Error loading data: ${error}`);
|
||||
} finally {
|
||||
loadingProgress.value = 100;
|
||||
loadingText.value = "加载完成";
|
||||
await new Promise<void>((resolve) => setTimeout(resolve, 200));
|
||||
loading.value = false;
|
||||
loadingProgress.value = 0;
|
||||
loadingText.value = "";
|
||||
await endLoad();
|
||||
return;
|
||||
}
|
||||
emits("success");
|
||||
loading.value = true;
|
||||
loadingProgress.value = 0;
|
||||
const ck = { cookie_token: cookie.value.cookie_token, account_id: cookie.value.account_id };
|
||||
for (let i = 0; i < accounts.length; i++) {
|
||||
const account = accounts[i];
|
||||
loadingText.value = `正在加载 ${account.gameBiz} - ${account.regionName} - ${account.gameUid}...`;
|
||||
loadingProgress.value = (i / accounts.length) * 100;
|
||||
let info, stat;
|
||||
let infoResp: TGApp.BBS.Sign.HomeResp | undefined;
|
||||
try {
|
||||
infoResp = await lunaReq.sign.info(account, ck);
|
||||
if (infoResp.retcode !== 0) {
|
||||
await TGLogger.Warn(
|
||||
`[Sign Card] Failed to get rewards for ${account.gameBiz}: [${infoResp.retcode}] ${infoResp.message}`,
|
||||
);
|
||||
} else info = infoResp.data;
|
||||
} catch (error) {
|
||||
const errMsg = TGHttps.getErrMsg(error);
|
||||
await TGLogger.Error(`[Sign Card] Error loading info for ${account.gameBiz}: ${errMsg}`);
|
||||
}
|
||||
let statResp: TGApp.BBS.Sign.InfoResp | undefined;
|
||||
try {
|
||||
statResp = await lunaReq.sign.stat(account, ck);
|
||||
if (statResp.retcode !== 0) {
|
||||
await TGLogger.Warn(
|
||||
`[Sign Card] Failed to get status for ${account.gameBiz}: [${statResp.retcode}] ${statResp.message}`,
|
||||
);
|
||||
} else stat = statResp.data;
|
||||
} catch (error) {
|
||||
const errMsg = TGHttps.getErrMsg(error);
|
||||
await TGLogger.Error(`[Sign Card] Error loading stat for ${account.gameBiz}: ${errMsg}`);
|
||||
}
|
||||
signAccounts.value.push({ account, info, stat });
|
||||
}
|
||||
await endLoad();
|
||||
}
|
||||
|
||||
async function handleUserSwitch(newUid: string): Promise<void> {
|
||||
|
||||
@@ -108,6 +108,7 @@ import lunaReq from "@req/lunaReq.js";
|
||||
import miscReq from "@req/miscReq.js";
|
||||
import useBBSStore from "@store/bbs.js";
|
||||
import useUserStore from "@store/user.js";
|
||||
import TGHttps from "@utils/TGHttps.js";
|
||||
import TGLogger from "@utils/TGLogger.js";
|
||||
import { generateShareImg } from "@utils/TGShare.js";
|
||||
import { storeToRefs } from "pinia";
|
||||
@@ -323,70 +324,74 @@ async function handleSign(): Promise<void> {
|
||||
return;
|
||||
}
|
||||
isSign.value = true;
|
||||
try {
|
||||
const ck = { cookie_token: cookie.value.cookie_token, account_id: cookie.value.account_id };
|
||||
const ckSign = {
|
||||
stoken: cookie.value.stoken,
|
||||
stuid: cookie.value.stuid,
|
||||
mid: cookie.value.mid,
|
||||
};
|
||||
const ck = { cookie_token: cookie.value.cookie_token, account_id: cookie.value.account_id };
|
||||
const ckSign = {
|
||||
stoken: cookie.value.stoken,
|
||||
stuid: cookie.value.stuid,
|
||||
mid: cookie.value.mid,
|
||||
};
|
||||
|
||||
let check = false;
|
||||
let challenge: string | undefined = undefined;
|
||||
let check = false;
|
||||
let challenge: string | undefined = undefined;
|
||||
|
||||
while (!check) {
|
||||
const signResp = await lunaReq.sign.oper(props.account, ck, challenge);
|
||||
if (challenge !== undefined) challenge = undefined;
|
||||
if ("retcode" in signResp) {
|
||||
if (signResp.retcode === 1034) {
|
||||
await TGLogger.Info("[Sign Item] Captcha required");
|
||||
const challengeGet = await miscReq.challenge(ckSign);
|
||||
if (challengeGet === false) {
|
||||
showSnackbar.error("验证码验证失败");
|
||||
break;
|
||||
}
|
||||
challenge = challengeGet;
|
||||
continue;
|
||||
}
|
||||
await TGLogger.Error(`[Sign Item] Sign-in failed: ${signResp.message}`);
|
||||
showSnackbar.error(`签到失败: ${signResp.message}`);
|
||||
break;
|
||||
}
|
||||
|
||||
if (signResp.success === 0) {
|
||||
check = true;
|
||||
} else if (signResp.is_risk) {
|
||||
await TGLogger.Info("[Sign Item] Risk verification required");
|
||||
const gtRes = await showGeetest({
|
||||
gt: signResp.gt,
|
||||
challenge: signResp.challenge,
|
||||
new_captcha: 1,
|
||||
success: 1,
|
||||
});
|
||||
if (gtRes === false) {
|
||||
while (!check) {
|
||||
let signResp: TGApp.BBS.Sign.SignResp | undefined;
|
||||
try {
|
||||
signResp = await lunaReq.sign.oper(props.account, ck, challenge);
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await TGLogger.Error(`[Sign Item] Sign-in error: ${errMsg}`);
|
||||
showSnackbar.error(`签到失败: ${errMsg}`);
|
||||
isSign.value = false;
|
||||
break;
|
||||
}
|
||||
if (challenge !== undefined) challenge = undefined;
|
||||
if (signResp.retcode !== 0) {
|
||||
if (signResp.retcode === 1034) {
|
||||
await TGLogger.Info("[Sign Item] Captcha required");
|
||||
const challengeGet = await miscReq.challenge(ckSign);
|
||||
if (challengeGet === false) {
|
||||
showSnackbar.error("验证码验证失败");
|
||||
isSign.value = false;
|
||||
break;
|
||||
}
|
||||
challenge = signResp.challenge;
|
||||
} else {
|
||||
challenge = challengeGet;
|
||||
continue;
|
||||
}
|
||||
await TGLogger.Error(`[Sign Item] Sign-in failed: ${signResp.message}`);
|
||||
showSnackbar.error(`签到失败: ${signResp.message}`);
|
||||
isSign.value = false;
|
||||
break;
|
||||
}
|
||||
if (signResp.data.success === 0) {
|
||||
check = true;
|
||||
} else if (signResp.data.is_risk) {
|
||||
await TGLogger.Info("[Sign Item] Risk verification required");
|
||||
const gtRes = await showGeetest({
|
||||
gt: signResp.data.gt,
|
||||
challenge: signResp.data.challenge,
|
||||
new_captcha: 1,
|
||||
success: 1,
|
||||
});
|
||||
if (gtRes === false) {
|
||||
showSnackbar.error("验证码验证失败");
|
||||
break;
|
||||
}
|
||||
challenge = signResp.data.challenge;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
if (check) {
|
||||
showSnackbar.success("签到成功");
|
||||
updateLocalDataAfterSign();
|
||||
// Load resign info only if there are missed days
|
||||
const missedDays = signStat.value?.sign_cnt_missed ?? 0;
|
||||
if (missedDays > 0) {
|
||||
await loadResignInfo();
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
await TGLogger.Error(`[Sign Item] Sign-in error: ${error}`);
|
||||
showSnackbar.error("签到失败,请重试");
|
||||
} finally {
|
||||
isSign.value = false;
|
||||
}
|
||||
if (check) {
|
||||
showSnackbar.success("签到成功");
|
||||
updateLocalDataAfterSign();
|
||||
// Load resign info only if there are missed days
|
||||
const missedDays = signStat.value?.sign_cnt_missed ?? 0;
|
||||
if (missedDays > 0) {
|
||||
await loadResignInfo();
|
||||
}
|
||||
}
|
||||
isSign.value = false;
|
||||
}
|
||||
|
||||
async function handleResign(): Promise<void> {
|
||||
@@ -443,30 +448,38 @@ async function handleResign(): Promise<void> {
|
||||
let challenge: string | undefined = undefined;
|
||||
|
||||
while (!check) {
|
||||
const resignResp = await lunaReq.resign.oper(props.account, ck, challenge);
|
||||
if (challenge !== undefined) challenge = undefined;
|
||||
if ("retcode" in resignResp) {
|
||||
if (resignResp.retcode === 1034) {
|
||||
await TGLogger.Info("[Sign Item] Captcha required for resign");
|
||||
const challengeGet = await miscReq.challenge(ckSign);
|
||||
if (challengeGet === false) {
|
||||
showSnackbar.error("验证码验证失败");
|
||||
break;
|
||||
let resignResp: TGApp.BBS.Sign.ResignResp | undefined;
|
||||
try {
|
||||
resignResp = await lunaReq.resign.oper(props.account, ck, challenge);
|
||||
if (challenge !== undefined) challenge = undefined;
|
||||
if (resignResp.retcode !== 0) {
|
||||
if (resignResp.retcode === 1034) {
|
||||
await TGLogger.Info("[Sign Item] Captcha required for resign");
|
||||
const challengeGet = await miscReq.challenge(ckSign);
|
||||
if (challengeGet === false) {
|
||||
showSnackbar.error("验证码验证失败");
|
||||
break;
|
||||
}
|
||||
challenge = challengeGet;
|
||||
continue;
|
||||
}
|
||||
challenge = challengeGet;
|
||||
continue;
|
||||
await TGLogger.Error(`[Sign Item] Resign failed: ${resignResp.message}`);
|
||||
showSnackbar.error(`补签失败: ${resignResp.message}`);
|
||||
break;
|
||||
}
|
||||
await TGLogger.Error(`[Sign Item] Resign failed: ${resignResp.message}`);
|
||||
showSnackbar.error(`补签失败: ${resignResp.message}`);
|
||||
|
||||
// Resign successful
|
||||
check = true;
|
||||
updateLocalDataAfterResign();
|
||||
showSnackbar.success(
|
||||
`补签成功,剩余补签次数${resignCnt - 1}次,剩余米游币${coinCnt - coinCost}`,
|
||||
);
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await TGLogger.Error(`[Sign Item] Resign error: ${errMsg}`);
|
||||
showSnackbar.error(`补签失败: ${errMsg}`);
|
||||
break;
|
||||
}
|
||||
|
||||
// Resign successful
|
||||
check = true;
|
||||
updateLocalDataAfterResign();
|
||||
showSnackbar.success(
|
||||
`补签成功,剩余补签次数${resignCnt - 1}次,剩余米游币${coinCnt - coinCost}`,
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
await TGLogger.Error(`[Sign Item] Resign error: ${error}`);
|
||||
|
||||
@@ -241,21 +241,35 @@ async function refreshState(ck: TGApp.App.Account.Cookie, uid: string): Promise<
|
||||
`[签到任务]刷新${item.info.title}-${item.account.regionName}-${item.account.gameUid}`,
|
||||
);
|
||||
if (item.reward === undefined) {
|
||||
const rewardResp = await lunaReq.sign.info(item.account, cookie);
|
||||
console.log("签到奖励", item, rewardResp);
|
||||
if ("retcode" in rewardResp) {
|
||||
await TGLogger.Script(
|
||||
`[签到任务]获取签到奖励失败:${rewardResp.retcode} ${rewardResp.message}`,
|
||||
);
|
||||
showSnackbar.error(`[${rewardResp.retcode}] ${rewardResp.message}`);
|
||||
} else item.reward = rewardResp.awards[dayNow - 1];
|
||||
let rewardResp: TGApp.BBS.Sign.HomeResp | undefined;
|
||||
try {
|
||||
rewardResp = await lunaReq.sign.info(item.account, cookie);
|
||||
console.log("签到奖励", item, rewardResp);
|
||||
if (rewardResp.retcode !== 0) {
|
||||
await TGLogger.Script(
|
||||
`[签到任务]获取签到奖励失败:${rewardResp.retcode} ${rewardResp.message}`,
|
||||
);
|
||||
showSnackbar.error(`[${rewardResp.retcode}] ${rewardResp.message}`);
|
||||
} else item.reward = rewardResp.data.awards[dayNow - 1];
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await TGLogger.Script(`[签到任务]获取签到奖励异常:${errMsg}`);
|
||||
showSnackbar.error(`获取签到奖励失败:${errMsg}`);
|
||||
}
|
||||
}
|
||||
let statResp: TGApp.BBS.Sign.InfoResp | undefined;
|
||||
try {
|
||||
statResp = await lunaReq.sign.stat(item.account, cookie);
|
||||
console.log("签到状态", item, statResp);
|
||||
if (statResp.retcode !== 0) {
|
||||
await TGLogger.Script(`[签到任务]获取签到状态失败:${statResp.retcode} ${statResp.message}`);
|
||||
showSnackbar.error(`[${statResp.retcode}] ${statResp.message}`);
|
||||
} else item.stat = statResp.data;
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await TGLogger.Script(`[签到任务]获取签到状态异常:${errMsg}`);
|
||||
showSnackbar.error(`获取签到状态失败:${errMsg}`);
|
||||
}
|
||||
const statResp = await lunaReq.sign.stat(item.account, cookie);
|
||||
console.log("签到状态", item, statResp);
|
||||
if ("retcode" in statResp) {
|
||||
await TGLogger.Script(`[签到任务]获取签到状态失败:${statResp.retcode} ${statResp.message}`);
|
||||
showSnackbar.error(`[${statResp.retcode}] ${statResp.message}`);
|
||||
} else item.stat = statResp;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -276,16 +290,18 @@ async function trySign(
|
||||
let check = false;
|
||||
let challenge: string | undefined = undefined;
|
||||
while (!check) {
|
||||
const signResp = await lunaReq.sign.oper(item.account, cookie, challenge);
|
||||
console.log("签到信息", item, signResp);
|
||||
if (challenge !== undefined) challenge = undefined;
|
||||
if (typeof signResp !== "object") {
|
||||
await TGLogger.Script(
|
||||
`[签到任务]${item.info.title}-${item.account.regionName}-${item.account.gameUid} ${signResp}`,
|
||||
);
|
||||
let signResp: TGApp.BBS.Sign.SignResp | undefined;
|
||||
try {
|
||||
signResp = await lunaReq.sign.oper(item.account, cookie, challenge);
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await TGLogger.Script(`[签到任务]签到异常:${errMsg}`);
|
||||
showSnackbar.error(`签到失败:${errMsg}`);
|
||||
break;
|
||||
}
|
||||
if ("retcode" in signResp) {
|
||||
console.log("签到信息", item, signResp);
|
||||
if (challenge !== undefined) challenge = undefined;
|
||||
if (signResp.retcode !== 0) {
|
||||
if (signResp.retcode === 1034) {
|
||||
if (skip) {
|
||||
await TGLogger.Script("已设置跳过验证,打卡失败");
|
||||
@@ -308,12 +324,12 @@ async function trySign(
|
||||
showSnackbar.error(`[${signResp.retcode}] ${signResp.message}`);
|
||||
break;
|
||||
}
|
||||
if (signResp.success === 0) check = true;
|
||||
else if (signResp.is_risk) {
|
||||
if (signResp.data.success === 0) check = true;
|
||||
else if (signResp.data.is_risk) {
|
||||
await TGLogger.Script("[签到任务]触发风险验证,开始验证");
|
||||
const gtRes = await showGeetest({
|
||||
gt: signResp.gt,
|
||||
challenge: signResp.challenge,
|
||||
gt: signResp.data.gt,
|
||||
challenge: signResp.data.challenge,
|
||||
new_captcha: 1,
|
||||
success: 1,
|
||||
});
|
||||
@@ -321,7 +337,7 @@ async function trySign(
|
||||
await TGLogger.Script("[签到任务]验证码验证失败");
|
||||
break;
|
||||
}
|
||||
challenge = signResp.challenge;
|
||||
challenge = signResp.data.challenge;
|
||||
} else break;
|
||||
}
|
||||
if (check) {
|
||||
|
||||
@@ -35,6 +35,8 @@ import { isColorSimilar } from "@utils/colorFunc.js";
|
||||
import { parseLink, parsePost } from "@utils/linkParser.js";
|
||||
import { decodeRegExp } from "@utils/toolFunc.js";
|
||||
import { onMounted, ref, shallowRef, StyleValue, toRaw, useTemplateRef } from "vue";
|
||||
import TGHttps from "@utils/TGHttps.js";
|
||||
import TGLogger from "@utils/TGLogger.js";
|
||||
|
||||
export type TpText = {
|
||||
insert: string;
|
||||
@@ -139,14 +141,26 @@ async function copyLink(): Promise<void> {
|
||||
function getEmojiUrl(): string {
|
||||
if (localEmojis.value === null || !JSON.parse(localEmojis.value)[getEmojiName()]) {
|
||||
console.warn("tpEmoji unknown", getEmojiName());
|
||||
bbsReq.emojis().then((res) => {
|
||||
if ("retcode" in res) {
|
||||
console.error(res);
|
||||
return "";
|
||||
}
|
||||
localEmojis.value = JSON.stringify(res);
|
||||
localStorage.setItem("emojis", localEmojis.value);
|
||||
});
|
||||
bbsReq
|
||||
.emojis()
|
||||
.then((res) => {
|
||||
if (res.retcode !== 0) {
|
||||
console.error(res);
|
||||
return "";
|
||||
}
|
||||
const emojis: Record<string, string> = {};
|
||||
for (const series of res.data.list) {
|
||||
for (const emoji of series.list) {
|
||||
emojis[emoji.name] = emoji.icon;
|
||||
}
|
||||
}
|
||||
localEmojis.value = JSON.stringify(emojis);
|
||||
localStorage.setItem("emojis", localEmojis.value);
|
||||
})
|
||||
.catch(async (e) => {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
await TGLogger.Error(errMsg);
|
||||
});
|
||||
}
|
||||
if (localEmojis.value === null) return "";
|
||||
const emojiName = getEmojiName();
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
:key="index"
|
||||
:class="{ selected: index === props.collection.cur - 1 }"
|
||||
:post
|
||||
@onUserClick="toUserProfile"
|
||||
class="tpoc-item"
|
||||
@onUserClick="toUserProfile"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -57,12 +57,23 @@ watch(
|
||||
onMounted(async () => await Promise.all([refreshInfo(), refreshPosts()]));
|
||||
|
||||
async function refreshInfo(): Promise<void> {
|
||||
const infoResp = await bbsReq.collection(props.collection.collection_id, props.gid);
|
||||
if ("retcode" in infoResp) {
|
||||
// showSnackbar.warn(`[合集信息][${infoResp.retcode}] ${infoResp.message}`);
|
||||
let infoResp: TGApp.BBS.Collection.InfoResp | undefined;
|
||||
try {
|
||||
infoResp = await bbsReq.collection(props.collection.collection_id, props.gid);
|
||||
if (infoResp.retcode !== 0) {
|
||||
// showSnackbar.warn(`[合集信息][${infoResp.retcode}] ${infoResp.message}`);
|
||||
await TGLogger.Warn(
|
||||
`[vp-overlay-collection] 获取合集信息失败:[${infoResp.retcode}] ${infoResp.message}`,
|
||||
);
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取合集信息失败:${errMsg}`);
|
||||
await TGLogger.Error(`[vp-overlay-collection] 获取合集信息异常:${errMsg}`);
|
||||
return;
|
||||
}
|
||||
info.value = infoResp;
|
||||
info.value = infoResp.data;
|
||||
console.log(info.value);
|
||||
}
|
||||
|
||||
|
||||
@@ -30,11 +30,11 @@
|
||||
<div class="vp-ou-divider" />
|
||||
<div ref="listRef" class="vp-ou-list">
|
||||
<TPostCard
|
||||
@onUserClick="toUserProfile()"
|
||||
v-for="post in results"
|
||||
:key="post.post.post_id"
|
||||
:post
|
||||
class="vp-ou-item"
|
||||
@onUserClick="toUserProfile()"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -108,12 +108,21 @@ watch(
|
||||
);
|
||||
|
||||
async function loadUser(): Promise<void> {
|
||||
const resp = await bbsReq.otherUserInfo(props.gid.toString(), props.uid);
|
||||
if ("retcode" in resp) {
|
||||
showSnackbar.warn(`[${resp.retcode}] ${resp.message}`);
|
||||
let resp: TGApp.BBS.User.InfoResp | undefined;
|
||||
try {
|
||||
resp = await bbsReq.otherUserInfo(props.gid.toString(), props.uid);
|
||||
if (resp.retcode !== 0) {
|
||||
showSnackbar.warn(`[${resp.retcode}] ${resp.message}`);
|
||||
await TGLogger.Warn(`[vp-overlay-user] 获取用户信息失败:[${resp.retcode}] ${resp.message}`);
|
||||
return;
|
||||
}
|
||||
} catch (e) {
|
||||
const errMsg = TGHttps.getErrMsg(e);
|
||||
showSnackbar.error(`获取用户信息失败:${errMsg}`);
|
||||
await TGLogger.Error(`[vp-overlay-user] 获取用户信息异常:${errMsg}`);
|
||||
return;
|
||||
}
|
||||
userInfo.value = resp;
|
||||
userInfo.value = resp.data.user_info;
|
||||
}
|
||||
|
||||
async function toUserProfile(): Promise<void> {
|
||||
|
||||
Reference in New Issue
Block a user