From c2ab1c550ce4de755a21ec253e1c6f41590f9ace Mon Sep 17 00:00:00 2001 From: BTMuli Date: Sun, 12 Apr 2026 21:14:31 +0800 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86=EF=BC=8C=E8=BF=81=E7=A7=BB?= =?UTF-8?q?painterReq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/app/t-gameNav.vue | 10 +- src/components/pageArchive/pao-birth-card.vue | 5 +- src/components/userScripts/tus-mission.vue | 29 ++++- src/components/viewPost/tp-video.vue | 5 +- src/components/viewPost/tp-vod.vue | 5 +- src/components/viewPost/vp-overlay-follow.vue | 34 +++-- src/components/viewPost/vp-overlay-image.vue | 5 +- .../viewPost/vp-overlay-lottery.vue | 38 ++++-- src/pages/User/Abyss.vue | 5 +- src/pages/User/Characters.vue | 5 +- src/pages/User/Gacha.vue | 5 +- src/pages/User/Record.vue | 5 +- src/pages/User/Scripts.vue | 2 - src/pages/common/PageTest.vue | 5 +- src/pages/common/PostForum.vue | 106 ++++++++++++---- src/pages/common/PostNews.vue | 78 ++++++++++-- src/plugins/Bili/utils.ts | 5 +- src/request/painterReq.ts | 117 +++++++----------- src/types/BBS/Forum.d.ts | 22 ++++ src/utils/Github.ts | 5 +- src/utils/TGHttps.ts | 34 +++-- src/utils/TGLogger.ts | 13 +- src/utils/TGShare.ts | 10 +- 23 files changed, 336 insertions(+), 212 deletions(-) diff --git a/src/components/app/t-gameNav.vue b/src/components/app/t-gameNav.vue index d1128529..e5941c7a 100644 --- a/src/components/app/t-gameNav.vue +++ b/src/components/app/t-gameNav.vue @@ -74,10 +74,7 @@ async function loadNav(): Promise { nav.value = resp.data.data.navigator; if (loadCode.value) loadCode.value = false; } catch (e) { - let errMsg = String(e); - if (TGHttps.isHttpErr(e)) { - errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message; - } + const errMsg = TGHttps.getErrMsg(e); showSnackbar.error(`加载组件数据失败: ${errMsg}`); await TGLogger.Error(`[TGameNav][loadNav] 加载组件数据失败:${e}`); } @@ -113,10 +110,7 @@ async function tryGetCode(): Promise { loadCode.value = false; } catch (e) { loadCode.value = false; - let errMsg = String(e); - if (TGHttps.isHttpErr(e)) { - errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message; - } + const errMsg = TGHttps.getErrMsg(e); showSnackbar.error(`获取兑换码失败: ${errMsg}`); await TGLogger.Error(`[TGameNav][tryGetCode] 获取兑换码失败:${e}`); } diff --git a/src/components/pageArchive/pao-birth-card.vue b/src/components/pageArchive/pao-birth-card.vue index c3b85c49..1a1fe40b 100644 --- a/src/components/pageArchive/pao-birth-card.vue +++ b/src/components/pageArchive/pao-birth-card.vue @@ -104,10 +104,7 @@ async function loadImageBuffer(): Promise { try { buffer.value = await TGHttps.buffer(imageUrl); } catch (e) { - let errMsg = String(e); - if (TGHttps.isHttpErr(e)) { - errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message; - } + const errMsg = TGHttps.getErrMsg(e); showSnackbar.error(`获取图像Buffer失败:${errMsg}`); await TGLogger.Error(`[PaoBirthCard][loadImageBuffer] 获取图像Buffer失败:${imageUrl}`); await TGLogger.Error(`[PaoBirthCard][loadImageBuffer] ${e}`); diff --git a/src/components/userScripts/tus-mission.vue b/src/components/userScripts/tus-mission.vue index 9fed59f0..7f833512 100644 --- a/src/components/userScripts/tus-mission.vue +++ b/src/components/userScripts/tus-mission.vue @@ -53,6 +53,7 @@ import TGNotify from "@utils/TGNotify.js"; import { postDetailRateLimiter } from "@utils/rateLimiter.js"; import { storeToRefs } from "pinia"; import { ref, shallowRef, watch } from "vue"; +import TGHttps from "@utils/TGHttps.js"; /** 用于渲染的任务项 */ type ParseMission = { @@ -197,15 +198,38 @@ async function tryAuto(skip: boolean = false): Promise { if (likeFind) likeCnt = likeFind.process; const viewFind = postFilter.find((i) => i.key === "view_post_0"); if (viewFind) viewCnt = viewFind.process; + // 获取帖子列表 await TGLogger.Script("[米游币任务]获取帖子列表"); - const listResp = await painterReq.forum.recent(26, 2, 2, undefined, 20); + let listResp: TGApp.BBS.Forum.PostForumResp | undefined; + try { + listResp = await painterReq.forum.recent(26, 2, 2, undefined, 20); + if (listResp.retcode !== 0) { + showSnackbar.error(`[${listResp.retcode}] ${listResp.message}`); + await TGLogger.Script(`获取帖子列表失败: [${listResp.retcode}] ${listResp.message}`, "warn"); + await TGLogger.ScriptSep("米游币任务", false); + loadScript.value = false; + loadMission.value = false; + return; + } + } catch (e) { + const errMsg = TGHttps.getErrMsg(e); + showSnackbar.error(`获取帖子列表失败:${errMsg}`); + await TGLogger.Script(`获取帖子列表失败`, "error"); + await TGLogger.Error(`[tus-mission][tryAuto] ${e}`); + await TGLogger.ScriptSep("米游币任务", false); + loadScript.value = false; + loadMission.value = false; + return; + } + if (!listResp) return; + // 执行操作 const ckShare = { stoken: props.acCur.cookie.stoken, stuid: props.acCur.cookie.stuid, mid: props.acCur.cookie.mid, }; const ckPost = { ltoken: props.acCur.cookie.ltoken, ltuid: props.acCur.cookie.ltuid }; - for (const post of listResp.list) { + for (const post of listResp.data.list) { if (!isShare) { await TGLogger.Script(`[米游币任务]正在分享帖子${post.post.post_id}`); const shareResp = await apiHubReq.post.share(post.post.post_id, ckShare); @@ -320,7 +344,6 @@ async function autoSign(ck: TGApp.App.Account.Cookie, skip: boolean, ch?: string } await TGLogger.Script("[米游币任务]正在执行打卡"); const ckSign = { stoken: ck.stoken, stuid: ck.stuid, mid: ck.mid }; - await painterReq.forum.recent(26, 2, 1, undefined, 20, ckSign); const resp = await apiHubReq.sign(ckSign, 2, ch); console.log("打卡情况", resp); if (resp.retcode !== 0) { diff --git a/src/components/viewPost/tp-video.vue b/src/components/viewPost/tp-video.vue index d6dfe5ca..8ce309f2 100644 --- a/src/components/viewPost/tp-video.vue +++ b/src/components/viewPost/tp-video.vue @@ -61,10 +61,7 @@ onMounted(async () => { const viewResp = await Bili.video.view(aid, bvid); videoData.value = viewResp.data; } catch (e) { - let errMsg = String(e); - if (TGHttps.isHttpErr(e)) { - errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message; - } + const errMsg = TGHttps.getErrMsg(e); showSnackbar.error(`获取视频信息失败: ${errMsg}`); await TGLogger.Error(`[TpVideo][onMounted] 获取视频信息异常: ${url}`); await TGLogger.Error(`[TpVideo][onMounted] ${e}`); diff --git a/src/components/viewPost/tp-vod.vue b/src/components/viewPost/tp-vod.vue index d9f7ecdc..8afe75fe 100644 --- a/src/components/viewPost/tp-vod.vue +++ b/src/components/viewPost/tp-vod.vue @@ -161,10 +161,7 @@ async function loadCoverBuffer(): Promise { try { coverBuffer.value = await TGHttps.buffer(props.data.insert.vod.cover); } catch (e) { - let errMsg = String(e); - if (TGHttps.isHttpErr(e)) { - errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message; - } + const errMsg = TGHttps.getErrMsg(e); showSnackbar.error(`获取图像Buffer失败:${errMsg}`); await TGLogger.Error( `[TpVod][loadCoverBuffer] 获取图像Buffer失败:${props.data.insert.vod.cover}`, diff --git a/src/components/viewPost/vp-overlay-follow.vue b/src/components/viewPost/vp-overlay-follow.vue index b7682857..bad0df0a 100644 --- a/src/components/viewPost/vp-overlay-follow.vue +++ b/src/components/viewPost/vp-overlay-follow.vue @@ -33,6 +33,8 @@ import useUserStore from "@store/user.js"; import { openUrl } from "@tauri-apps/plugin-opener"; import { storeToRefs } from "pinia"; import { ref, shallowRef, useTemplateRef, watch } from "vue"; +import TGHttps from "@utils/TGHttps.js"; +import TGLogger from "@utils/TGLogger.js"; const { cookie } = storeToRefs(useUserStore()); @@ -73,18 +75,34 @@ async function loadMore(refresh: boolean = false): Promise { return; } loading.value = true; - const resp = await painterReq.follow(cookie.value, offset.value); - if ("retcode" in resp) { - showSnackbar.warn(`[${resp.retcode}] ${resp.message}`); + // 获取关注帖子列表 + let resp: TGApp.BBS.Post.FollowPostResp | undefined; + try { + resp = await painterReq.follow(cookie.value, offset.value); + if (resp.retcode !== 0) { + showSnackbar.warn(`[${resp.retcode}] ${resp.message}`); + await TGLogger.Warn(`[VpOverlayFollow][loadMore] [${resp.retcode}] ${resp.message}`); + loading.value = false; + return; + } + } catch (e) { + const errMsg = TGHttps.getErrMsg(e); + showSnackbar.error(`获取关注帖子失败,${errMsg}`); + await TGLogger.Error(`[VpOverlayFollow][loadMore] 获取关注帖子失败`); + await TGLogger.Error(`[VpOverlayFollow][loadMore] ${e}`); loading.value = false; return; } - offset.value = resp.next_offset; - isLast.value = resp.is_last; - if (refresh) posts.value = resp.list; - else posts.value = posts.value.concat(resp.list); + if (!resp) { + loading.value = false; + return; + } + offset.value = resp.data.next_offset; + isLast.value = resp.data.is_last; + if (refresh) posts.value = resp.data.list; + else posts.value = posts.value.concat(resp.data.list); loading.value = false; - showSnackbar.success(`成功加载${resp.list.length}条数据`); + showSnackbar.success(`成功加载${resp.data.list.length}条数据`); if (refresh && listEl.value) { listEl.value.scrollTo({ top: 0, behavior: "smooth" }); } diff --git a/src/components/viewPost/vp-overlay-image.vue b/src/components/viewPost/vp-overlay-image.vue index a25065fc..9f9bd548 100644 --- a/src/components/viewPost/vp-overlay-image.vue +++ b/src/components/viewPost/vp-overlay-image.vue @@ -404,10 +404,7 @@ async function loadImageBuffer(): Promise { try { buffer.value = await TGHttps.buffer(oriLink.value); } catch (e) { - let errMsg = String(e); - if (TGHttps.isHttpErr(e)) { - errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message; - } + const errMsg = TGHttps.getErrMsg(e); showSnackbar.error(`获取图像Buffer失败:${errMsg}`); await TGLogger.Error(`[VpOverlayImage][loadImageBuffer] 获取图像Buffer失败:${oriLink.value}`); await TGLogger.Error(`[VpOverlayImage][loadImageBuffer] ${e}`); diff --git a/src/components/viewPost/vp-overlay-lottery.vue b/src/components/viewPost/vp-overlay-lottery.vue index 198c3a07..5cc19433 100644 --- a/src/components/viewPost/vp-overlay-lottery.vue +++ b/src/components/viewPost/vp-overlay-lottery.vue @@ -1,21 +1,21 @@