Skip to content
This repository was archived by the owner on Sep 9, 2026. It is now read-only.

Releases: 1476523/aniGamerPlusBeta

全新 BahaAD 已經發布

Choose a tag to compare

@1476523 1476523 released this 09 Sep 02:48
b345952

v0.0.1

aniGamerPlusBeta 將不再進行維護,
請改用全新的 BahaAD 下載器,
全部重新編寫與規劃,
更強大且更方便的功能等你來使用。
https://github.com/1476523/BahaAD


如果喜歡的話可以按下 Star ⭐。可以請我喝杯咖啡表示支持:Buy Me A Coffee

v25.2.5

Choose a tag to compare

@1476523 1476523 released this 21 Aug 12:34
9c75383

v25.2.5

這次「重新檢查排程更新」的「檢查指定排程」清單新增依星期/時間排序,並在最上方新增「推薦檢查」區塊,

自動列出過去 12 小時內排定時段的項目且預設勾選,方便補抓稍早的更新;另外修正下載目錄/暫存目錄連不到時

設定被悄悄洗掉、Dashboard 資料夾偵測不到永久停用控制面板、分段下載本機合併卡死、Cookie 保溫訊息帶有除錯

字樣等四個穩定性問題。發布前另外針對全部原始碼跑了一輪聚焦在「多個背景執行緒/操作同時觸發會不會互相

干擾」的完整審查,額外揪出並修正 12 項問題,包含下載中設定被悄悄復原、同一集被排程與手動任務同時下載

兩次等資料一致性風險,Dashboard 維護操作連點兩下可能同時執行、Cookie 保溫誤判閒置等併發風險,以及資料庫

連線逾時不一致、頻繁印出狀態訊息時額外開啟子行程等效能/資源問題;另外修正「發現新版本」彈窗排版跑版

(條列項目多出「- 」、應換行的地方黏在一起、贊助連結消失)與該按鈕出現時把導覽列擠出兩行、蓋住下方版面

的問題;並將「公告偵測」與「檢查最新版本(含預告)」從主迴圈的「更新間隔(分鐘)」中獨立出來,改為固定每

分鐘各自檢查一次,不再受排程下載普及後意義降低的更新間隔牽制。

共 19 項變更。

🆕 新功能(1 項)
「檢查指定排程」清單依星期/時間排序,新增「推薦檢查」快速勾選過去 12 小時內的排程項目
  • 過去「重新檢查排程更新」→「檢查指定排程」的清單只依分類/名稱排序,使用者想確認「哪些排程剛好在最近

    幾個小時內應該更新」得自己逐項對照星期/時間;重新檢查排程更新常常就是為了補抓稍早錯過的更新,這個對照

    過程每次都要重來一遍
  • 有自訂星期/時間排程的項目現在改依排程時段排序(週一 00:00 排最前、週日 23:59 排最後),方便對照當週

    時間表;沒有自訂排程的項目排不出時段,附加在清單最後
  • 清單最上方新增「推薦檢查」區塊:自動算出每個排程項目「最近一次應該更新的時段」是否落在過去 12 小時內,

    是的話列進這個區塊並預設勾選,不用整份清單自己逐項核對,直接按「開始檢查」就是最常見的用法;跟下方

    完整清單裡同一部作品的核取方塊會互相同步勾選狀態;完全沒有符合條件的項目時這個區塊自動隱藏,不佔版面
🐛 BUG 修正(16 項)
下載目錄/暫存目錄連不到時,不相干的操作可能悄悄洗掉原本的路徑設定
  • Dashboard 有好幾支窄範圍端點(新增/移除目錄喜好路徑、略過版本通知、改 Dashboard 登入密碼等)都是先讀取

    「目前設定」當底稿,只改動跟自己相關的一兩個欄位就整包寫回。若下載目錄/暫存目錄當下連不到(網路磁碟/UNC

    路徑離線),這份底稿裡的值其實已經被暫時換成本機預設目錄,呼叫端根本沒打算動這兩個欄位,卻會被誤判成

    「使用者本來就是設定預設目錄」而永久洗掉原始路徑,之後網路磁碟恢復連線也救不回來
  • 已在設定寫入的唯一入口統一補上防護:偵測到拿到的值剛好等於目前記錄的暫代預設值、且該欄位確實處於連不到

    狀態時,先換回原本設定的路徑再寫入;使用者透過「暫時改用本機預設資料夾」等功能明確清空該欄位時則不受影響
Dashboard 資料夾偵測不到時永久停用控制面板,資料夾補回來也不會自動恢復
  • 程式啟動讀取設定時,若偵測不到 Dashboard 所需的資料夾,會把「啟用控制面板」設定強制改成關閉並立即寫回

    資料庫;這通常只是一次性/暫時的狀況(例如更新過程中檔案還沒複製完成),但過去這樣寫回會讓控制面板永久

    停用,即使資料夾之後補齊了也不會自動恢復,得使用者自己回頭手動打開設定才行
  • 已改為只影響這次啟動當下的判斷(讓這次不要嘗試啟動一定會失敗的控制面板),不再寫回資料庫;使用者原本的

    設定維持不動,下次啟動時資料夾若已存在會自動恢復正常,不需要手動介入
分段下載模式的本機合併階段卡死時,只能手動砍 ffmpeg 進程
  • 分段下載模式(預設模式)在所有分段都下載完成後,會呼叫 ffmpeg 在本機把分段合併解密成單一影片檔;這個步驟

    過去完全沒有逾時判斷,只是單純等待進程結束。ffmpeg 預設會持續把進度統計行寫進 stderr,但這段等待期間

    完全沒有人讀取這條管線——一旦沒人讀取的管線緩衝區被寫滿,ffmpeg 自己寫入 stderr 的動作會被作業系統整個

    阻塞住、永遠等不到有人清空緩衝區,導致合併卡死不動且沒有任何逾時機制能救回來,只能使用者自己手動砍掉

    ffmpeg 進程(實測遇過連續卡死超過一小時,且兩次都停在完全相同的輸出位元組數,是管線緩衝區塞滿的典型特徵)
  • 已改用會持續在背景清空管線內容的等待方式解決卡死成因本身,並比照 ffmpeg 自行下載模式既有的邏輯,額外

    補上「1 分鐘內輸出檔案沒有明顯增加就判定卡死」的保護,兩者共同確保這個步驟不會再無限期卡住
Cookie 保溫背景機制的提示訊息帶有「除錯」字樣與技術性內容,容易誤導一般使用者
  • 背景定期發出的 Cookie 保溫請求若觸發登入憑證刷新,過去不論有沒有開啟隱藏的除錯模式都會顯示同一則訊息,

    標題掛著「Cookie除錯」、內容還帶狀態碼/CDN 標頭等技術性診斷資訊,一般使用者看到容易誤以為程式出了問題
  • 已改為只有開啟除錯模式才顯示原本的技術性內容;一般模式改用「Cookie保護機制請求」為標題的白話說明,

    不帶技術細節
下載中的去廣告重試流程可能悄悄復原使用者剛存的 Dashboard 設定
  • 每個下載任務開始時會拍一張完整設定快照供內部使用;去廣告檢查如果需要重試(不算罕見),事後只是想更新

    「通過廣告等待時間」一個欄位,卻把整包過時的快照原樣寫回資料庫,等於順便把快照拍下之後、這個欄位真正

    寫回之前,使用者透過 Dashboard 存的任何其他設定變更都一併復原成下載開始當下的舊值,且不會有任何提示
  • 已改成當下重新讀一份最新設定,只更新這一個欄位再寫回,不再整包覆蓋
同一集可能被排程檢查與手動任務同時各自下載一次,互相干擾暫存檔案
  • 排程路徑啟動新下載前只檢查自己的佇列,完全不知道使用者是否已經在手動下載清單裡下載同一集;手動任務

    啟動時也沒有反向檢查排程是否已經在跑。兩者都成立時會讓兩個下載實例同時對同一個暫存資料夾寫檔,可能互相

    刪到對方下載到一半的檔案,也會讓失敗重試次數等共用計數器被兩邊交錯寫入
  • 已讓排程與手動兩條路徑互相檢查同一個共用標記,偵測到已有另一份下載在跑就跳過/放棄這次,等進行中的那份

    結束後有需要會自然重新被發現
Dashboard 四個維護操作連點兩下(或開兩個分頁)可能同時執行,提早解除排程暫停保護
  • 「資料庫整頓」「掃描集數」「重新檢查排程更新」「取得當前新番更新時間」這四個互斥的維護操作,啟動時是

    「檢查是否已有其他個在跑」後才非同步啟動背景執行緒,狀態要等執行緒真的開始跑才會標記成執行中——這段空窗

    期內快速連點兩次或開兩個分頁各按一次,都可能兩邊都通過檢查、同時執行;其中一個先跑完時會解除「暫停排入

    新排程任務」的保護,讓另一個其實還在跑的操作提早失去保護
  • 已改成用鎖讓「檢查+標記執行中」變成不可分割的單一動作,不會再同時啟動兩個
Cookie 保溫背景機制在手動下載進行中可能誤判閒置,跟下載搶著輪換登入憑證
  • 背景保溫機制判斷「現在是否閒置」只看排程路徑自己的佇列,完全不知道使用者手動下載(單集或批次)是否

    正在進行;手動下載進行中若排程佇列剛好是空的,保溫機制會誤判成閒置照樣發出請求,可能觸發登入憑證輪換,

    跟手動下載本身使用中的憑證互相干擾
  • 已改成一併檢查手動下載是否進行中,兩種下載途徑只要有任一種在跑就視為忙碌,不發出額外的保溫請求
更新 Cookie 清空失敗計數,可能跟排程下載當下正在寫入的計數交錯,殘留錯誤數值
  • Dashboard 更新 Cookie 時會清空所有集數的連續失敗計數,讓先前被暫停自動重試的項目重新獲得機會;但這個

    清空動作若剛好跟某個排程下載執行緒讀取舊計數、準備 +1 寫回的那個瞬間重疊,清空的效果會被那筆還沒寫回的

    +1 蓋掉,使用者原本預期重置成 0,結果變成殘留 1
  • 已補上鎖保護,讓兩者不會再交錯執行
通知冷卻時間的檢查沒有防護,極端時機下可能收到重複通知
  • Cookie 失效/裝置驗證異常這類系統通知有設冷卻時間,避免短時間內同個問題連續觸發洗版;但「檢查冷卻是否

    已過」與「更新冷卻時間戳記」是分開的兩個步驟,沒有防護時兩個執行緒剛好在同一瞬間都通過檢查,就會各自送出

    一則,冷卻機制形同虛設
  • 已補上鎖保護,讓這組檢查+更新變成不可分割的單一動作
直連資料庫的呼叫逾時設定不一致,搶資源時容易最先跳出「database is locked」
  • 主程式直接連線 aniGamer.db 的十幾處呼叫沒有設定逾時秒數(預設只有 5 秒),但其他共用同一份資料庫檔案

    的模組都設定了 10 秒;真的發生多執行緒同時寫入搶資源時,主程式這邊的呼叫會最先逾時失敗
  • 已統一補上跟其他模組一致的逾時秒數
每一則主控台狀態訊息都會另外開一個子行程判斷終端機類型,且從未正確關閉
  • 判斷目前是否在真正的終端機視窗裡執行、要用哪種上色方式,過去寫成每印一行下載成功/失敗這類狀態訊息就

    重新開一個 shell 子行程執行系統指令現查一次,而且從未等待或關閉這個子行程,長時間批次下載大量集數時會

    不斷產生用不到的行程與管道控制代碼
  • 這個判斷結果在整支程式執行期間不會改變,已改成程式啟動時只查一次並快取結果重複使用
ffmpeg/gost 的 PATH 偵測探測沒有正確清空/回收子行程管線
  • 偵測 ffmpeg/gost 是否已加入系統 PATH 的探測指令,過去分別只讀取其中一條輸出管線(stdout 或 stderr 其中

    之一),另一條完全沒人讀取;gost 那支探測甚至完全沒有等待或關閉子行程,純粹交給系統資源回收
  • 已改成統一用會正確清空兩條管線並等待/回收子行程的方式讀取
「發現新版本」彈窗排版跑版:條列項目多出「- 」、該換行的地方黏在一起、贊助連結消失
  • 彈窗內容是後端把 GitHub release notes 轉成網頁 HTML 顯示,但轉換邏輯完全沒有處理 markdown 的「- 項目」

    條列語法,逐字印出來就變成畫面上每個項目前面多出一個「- 」;沒有明確換行標記、單純靠段落分行的文字

    (例如頁尾「完整變更歷史...」那行)在網頁裡會被瀏覽器直接吃掉換行、跟下一行黏在一起;頁尾的咖啡贊助

    徽章是帶有屬性的原生圖片連結標籤,不在安全標籤白名單範圍內,會被整段直接拿掉,變成完全消失不見
  • 條列語法已正確轉成清單項目;缺漏換行標記的地方統一補齊;贊助徽章改成轉換為安全的可點擊文字連結,

    不必放行任意圖片標籤也能保留連結本身
「新版本預告」按鈕出現時可能把導覽列擠出兩行,蓋住下方版面
  • 頁面內容過去是用寫死的固定像素值空出導覽列的高度;但「發現新版本」按鈕只在偵測到更新時才會出現,導覽列

    項目一多、視窗不夠寬時會被擠成兩行、實際高度變高,寫死的固定值不會跟著變,下方內容就會往上貼、蓋到導覽列
  • 已改成即時量測導覽列目前實際高度動態套用,載入、視窗縮放、這顆按鈕顯示/隱藏時都會重新量測
🔧 其他改善(1 項)
「公告偵測」與「檢查最新版本(含預告)」從「更新間隔(分鐘)」中獨立出來,改為固定每分鐘檢查
  • 「公告偵測」過去是主迴圈「檢查更新」跑完一輪後才順便執行一次,頻率完全被下載設定的「更新間隔(分鐘)」

    牽著走;「檢查最新版本」原本雖然已經是獨立的背景檢查,但固定間隔是 10 分鐘。排程下載(自訂星期/時間)

    普及後,主迴圈的「檢查更新」已經不是使用者實際依賴的主要更新來源,拉長「更新間隔(分鐘)」反而會連帶拖慢

    公告偵測與版本檢查的即時性,兩者的頻率需求其實跟「更新間隔(分鐘)」並不相關
  • 兩者都已拆成/改為獨立背景執行緒,固定每分鐘各自檢查一次,不再受「更新間隔(分鐘)」影響
📦 版本(1 項)
版本號由 v25.2.4 調整為 v25.2.5
  • 版本號由 v25.2.4 調整為 v25.2.5

完整變更歷史(v24.6 → v25.2.5)請參閱先前的 release notes。

如果喜歡的可以按下 Star 來表示喜歡

可以給予咖啡表示支持

Buy SH A Coffee

v25.2.4

Choose a tag to compare

@1476523 1476523 released this 20 Aug 10:26
f49fbdf

v25.2.4

這次主要加強「監視公告」對口語化時間敘述的判讀能力:公告只寫「明日白天更新」這種相對日期詞+模糊時段詞、

沒有明確 HH:MM 時刻時,過去會直接判定成「無法判斷」,這次改成能正確辨識並自動套用「本週延後更新」,

同時新增「自訂時間範圍」處置方式,供使用者自行指定一段開始~結束時間,範圍內每分鐘檢查一次。

另外修正「每日新番通知」機動調整異動恆顯示「今日」、「本日排程更新」清單誤把已覆蓋到別天的項目也列入今天等日期顯示問題,

並修正公告視窗/提示視窗點擊背景會意外關閉、「操作處置」自訂時間欄位顯示不全等介面問題。

發布前另外針對全部原始碼跑了一輪完整的程式碼審查,額外揪出並修正 22 項問題,包含幾個會讓整支程式直接當掉、

資料被無限重複下載、Cookie 判斷噴未捕捉例外的穩定性問題;「匯入設定」對話框可被惡意設定檔觸發 XSS、

目錄喜好路徑可繞過系統磁碟機瀏覽限制等安全性問題;以及公告模糊時段解析、下載取消/暫存檔清理、

Dashboard 手動任務等領域的多項邏輯錯誤。另外修正 Dashboard 存檔後須等下一輪自動檢查或重啟程式才會

套用新設定的問題,改為存檔當下立即生效。

共 29 項變更。

🆕 新功能(1 項)
公告支援模糊時段解析(明日白天等)+新增「自訂時間範圍」處置方式
  • 過去「監視公告」只認得公告裡明確寫出的 HH:MM 時刻或 MM/DD 日期,遇到「將延至明日白天更新」這種只用

    「明日」「白天」交代時間的口語化寫法時,完全沒有對應規則可比對,只能落入「無法判斷」,「操作處置」預設值

    也只會停在「等待處置」,得使用者自己換算成日期時間手動填「自訂更新時間」
  • 新增相對日期詞(明日/明天/後天/後日/大後天/今日/今天/今晚)與模糊時段詞(凌晨/早上/上午/中午/

    下午/傍晚/晚上/深夜/白天)對照表,抓到這類詞時換算出一段合理的查詢時間範圍(例如「白天」對應 08:00~18:00),

    沒寫相對日期詞時比照既有邏輯:範圍已經過去就順延一天
  • 這類公告現在會正確判定成「延後更新」(或依集數/提前提示詞判定成「同時更新」/「提前更新」),系統建議直接

    變成「本週延後更新」可一鍵套用;套用後在範圍內每分鐘檢查一次,直到找到更新或範圍結束為止
  • 「操作處置」新增「自訂時間範圍」處置方式,供使用者自行指定一段開始~結束時間(而非單一時刻),一樣是範圍內

    每分鐘檢查一次;「機動調整」清單會顯示對應的時間範圍與「(範圍內每分鐘檢查)」提示
🐛 BUG 修正(24 項)
每日新番通知「機動調整異動」恆顯示「今日」,覆蓋到隔天時顯示錯誤
  • 「機動調整異動」區塊組訊息文字時過去直接寫死「今日」二字,完全沒有比對這筆覆蓋的 check_date 是不是真的是

    今天——使用者把某部作品的檢查時間改到明天後,通知內容仍然顯示「今日 08:30 檢查更新」,跟機動調整清單裡

    正確顯示的日期互相矛盾,容易誤導使用者以為今天就會更新
  • 改為依 check_date 實際比對今天/明天並分別顯示「今日」「明日」,不是這兩天則直接顯示日期本身
每日新番通知「本日排程更新」清單誤把已覆蓋到別天的項目也列入今天
  • 「本日排程更新」清單過去只用 sn_list.txt 裡原本的星期/時間判斷要不要列入今天的清單,找到有覆蓋時只把

    顯示的時分換成覆蓋值,完全沒有理會覆蓋本身實際生效的日期——某部作品原本排定「今天 20:30」,被公告延到

    「明天 08:30」後,「本日排程更新」清單裡仍會冒出一筆「08:30」,讓人誤以為是今天要更新,跟下方「機動調整異動」

    區塊顯示的「明日」互相矛盾
  • 改為有覆蓋時,一律用覆蓋本身的實際日期+時間重新判斷是否真的落在「本日播出日」範圍內,不落在範圍內就不列入

    「本日排程更新」(該筆改由「機動調整異動」區塊單獨呈現,不會重複出現在兩處且顯示不同資訊)
公告視窗/提示視窗點擊背景會意外關閉
  • 「公告」面板與套用處置後彈出的提示視窗,是站內少數沒有設定「點擊背景不關閉」的彈窗,操作處置填到一半、

    或提示視窗還沒看清楚內容時,滑鼠稍微點到視窗外側或按下 ESC 就會整個關掉,得重新開啟面板、資料也可能要重新讀取
  • 補上跟站內其他彈窗一致的設定,點擊背景或按 ESC 都不會再意外關閉,必須明確按下關閉/確認按鈕
番劇頁面解析成功但目前沒有列出任何集數時,整支程式直接崩潰
  • 番劇頁面解析成功、但目前剛好沒有列出任何集數時,會讓程式在完全沒有防護的情況下直接崩潰結束,連帶讓

    Dashboard 網頁也一併斷線
  • 已補上防呆,改成略過這輪、等下次檢查
作品從 sn_list.txt 移除時,正在排隊的任務可能卡死在佇列裡
  • 使用者把某部作品從 sn_list.txt 移除時,若剛好有一集正在排隊等待下載,資料庫記錄被同時清除的話,

    會讓該筆任務卡在佇列裡,必須重新啟動程式才會恢復
  • 已補上例外處理,確實把卡住的任務清出佇列
下載檔案剛好 5MB 時,成功/失敗判斷不一致導致無限重複下載
  • 下載完成的檔案大小剛好等於 5 MB 時,兩處判斷成功/失敗的邊界寫法不一致,會被系統認定成「已完成」但資料庫

    卻寫入「失敗」,導致同一集被永遠重複下載
  • 已統一判斷邊界
分段下載模式在 ffmpeg 合併階段按下終止任務不會真的中止
  • 分段下載模式下,使用者在 ffmpeg 合併影片階段按下終止任務並不會真的中止合併,合併完成後仍會被當成正常

    下載完成,繼續搬移檔案、發送「下載完成」通知
  • 已改成合併期間定期檢查終止狀態,偵測到就中止並清除暫存檔
分段下載連續失敗時,暫存資料夾沒有清除
  • 分段下載連續失敗時,沒有清除已下載的分段暫存資料夾,連續失敗的集數多了會在暫存目錄留下越來越多殘留資料夾
  • 已補上清除
終止任務後,仍會印出一則矛盾的「下載失敗」訊息
  • 使用者終止任務、ffmpeg 進程被強制結束後,主執行緒仍會接著印出一則矛盾的「下載失敗」訊息,跟前一則「使用者

    終止任務」的訊息互相打架、容易誤導成真的下載失敗
  • 已改成終止時不再重複印出這則訊息
遊客連線在特定情況下讀取 Cookie 欄位可能拋出未捕捉的例外
  • 遊客(未登入)連線在特定情況下讀取登入憑證輪換用的 Cookie 欄位時,可能因為該欄位本來就不存在而直接拋出

    未捕捉的例外,中斷該次請求
  • 已改為安全讀取,欄位不存在時視為空值處理
「深夜」跨日時段的日期推算疊加兩次順延,套用「本週延後更新」後查不到更新
  • 「深夜」(23:00~06:00,跨過午夜)這種跨日時段,日期推算邏輯疊加了兩次順延,導致算出來的查詢窗口整整晚了

    一天,深夜公告套用「本週延後更新」後實際上完全查不到更新
  • 已修正,正好是這次新增的模糊時段解析功能自己的 bug
「大後天」公告內容被子字串誤判成「後天」,算少一天
  • 相對日期詞比對時「大後天」(3 天後)會被排在前面的「後天」(2 天後)子字串誤先比對到,導致算少一天
  • 已改為優先比對最長的相對日期詞
「加更兩集」關鍵字清單缺漏
  • 觸發「加更兩集」判斷的關鍵字清單裡重複列了兩次「更新兩集」,實際少了原本要支援的「加更兩集」寫法
  • 已補上
「自訂時間範圍」沒有驗證開始時間是否等於結束時間
  • 「操作處置」新增的「自訂時間範圍」沒有檢查開始時間是否等於結束時間,這種明顯是輸入失誤的情況會被誤判成

    一段完整 24 小時的範圍
  • 已擋下並提示重新輸入
公告日期換算年份時,30 天內的過去日期不會被修正
  • 公告裡的 MM/DD 日期換算成年份時,只有在跟今天差距超過 30 天的過去日期才會自動修正成明年,差距在 30 天內的

    過去日期會被原封不動當成一個已經過去的日子,導致這則公告永遠不會出現在「操作處置」清單、使用者也無從得知
  • 已改成只要換算出來是過去的日子,一律視為指的是明年
套用「操作處置」快速連點兩次可能產生矛盾的臨時排程
  • 套用「操作處置」時,「清除舊排程」與「寫入新排程」是兩個各自獨立的資料庫操作,使用者快速連點兩次「確認」

    可能讓兩者交錯執行,留下兩筆互相矛盾的臨時排程
  • 已改成整段操作序列化執行,前端「確認」按鈕送出後也會先停用避免連點
手動任務提交介面欄位缺漏時直接噴出未預期的錯誤訊息
  • 手動任務提交介面直接讀取請求內容裡的必填欄位,欄位不慎缺漏時會直接噴出未預期的錯誤訊息,而不是清楚

    告知使用者缺了什麼
  • 已改為安全讀取並給出明確錯誤訊息
手動任務快速連點兩次提交同一個 sn 可能重複啟動下載
  • 手動任務「檢查是否已在跑」到後端真正標記成「執行中」之間有一段時間差,快速連點兩次提交同一個 sn 仍可能

    各自啟動一個下載
  • 已改成檢查通過後立即佔位,關閉這段空窗期
「匯入設定」對話框可能被觸發 XSS
  • 「匯入設定」對話框比對差異時,欄位值未跳脫就直接塞進頁面內容,若匯入他人分享、內容被動過手腳的 config.json,

    其中一個欄位值只要含有 <img onerror=...> 這類內容,對話框一開啟就會立即執行
  • 已改為套用跳脫處理
目錄喜好路徑可繞過系統磁碟機瀏覽限制
  • 目錄瀏覽器「新增喜好路徑」可以把磁碟機根目錄(例如 C:\)本身存成喜好路徑,這會讓系統磁碟機的瀏覽限制整個失效,

    變相能瀏覽到 C:\Windows\System32、其他使用者帳號目錄等原本不開放的路徑
  • 已擋下把磁碟機根目錄存成喜好路徑
彈幕文字可能被用來注入字幕特效標籤
  • 彈幕文字直接原樣寫入字幕檔,若彈幕內容剛好包含 ASS 字幕特效標籤語法(例如位置/顏色/字級控制碼),會被播放器

    當成真正的特效指令執行,讓任意彈幕內容能操控字幕顯示
  • 特效標籤用到的半形括號已改用全形括號取代,不再被解析成特效語法
「發現新版本」通知連結未檢查網址通訊協定
  • 「發現新版本」通知內容裡的連結,只要是 Markdown 連結語法就會直接做成可點擊的 <a> 標籤,未檢查網址開頭的通訊協定,

    理論上若上游 GitHub release 內容遭竄改成 javascript: 開頭的連結,點擊後會執行任意程式碼
  • 已改為只有 http(s)/mailto 開頭的網址才會做成可點擊連結,其餘一律顯示為純文字
帳號保險箱 PIN 碼比對存在極輕微的計時側錄風險
  • 帳號保險箱 PIN 碼比對使用一般字串比較,理論上存在極輕微的本機計時側錄風險(因為驗證資料已受 Windows DPAPI 綁定

    目前登入帳號保護,實際可利用性極低)
  • 已改用定時比較函式
Dashboard 存檔後,設定需等下一輪自動檢查或重啟程式才會實際套用
  • 網頁上儲存設定(例如下載間隔秒數)只會寫進資料庫,執行中背景程式手上的設定快照不會跟著更新,得等到下一輪

    自動檢查(且需開啟「每次檢查讀取配置」)或重新啟動程式才會套用新值,這段空窗期內手動任務、下載冷卻時間等

    仍會使用存檔前的舊設定
  • 已改為存檔當下立即重新載入設定套用到執行中的背景程式,網頁上主設定表單、喜好路徑新增/移除、暫存路徑改用

    預設值、略過版本通知、Dashboard 登入帳密等各項存檔動作皆同步生效
🔧 其他改善(3 項)
「操作處置」自訂時間欄位版面重新設計
  • 「操作處置」選擇「自訂更新時間」等需要手動輸入的處置方式時,日期/時間/集數三個輸入框過去擠在同一列窄欄位裡,

    欄寬完全不夠容納,日期與時間常常顯示被截斷、看不出目前實際填的是哪一天
  • 改為每個欄位獨立一行並加上文字標籤,「處置方式」欄位本身也加寬,新增的「自訂時間範圍」處置方式則會改顯示

    「開始時間~結束時間」兩個時間欄位取代單一時間欄位
ffmpeg 版本偵測行程未正確關閉回收
  • 每次下載前用來偵測 ffmpeg 是否已加入系統 PATH 的檢查行程沒有正確關閉/回收,長時間批次下載大量集數時會

    逐漸累積殘留的行程與管道控制代碼
  • 已改為正確關閉回收
使用者自訂命令執行完成沒有被等待、結果也沒有記錄
  • 所有任務結束後執行的「使用者自訂命令」沒有真的等待執行完成,也沒有記錄執行結果,訊息會提早顯示「已執行」
  • 已改為等待命令實際執行完成,並把輸出結果一併記錄下來
📦 版本(1 項)
版本號由 v25.2.3 調整為 v25.2.4
  • 版本號由 v25.2.3 調整為 v25.2.4

完整變更歷史(v24.6 → v25.2.4)請參閱先前的 release notes。

如果喜歡的可以按下 Star 來表示喜歡

可以給予咖啡表示支持

Buy SH A Coffee

v25.2.3

Choose a tag to compare

@1476523 1476523 released this 17 Aug 06:52
ba00639

v25.2.3

這次緊急修復動畫瘋停用舊版影片來源 API(ajax/m3u8.php 固定回 404)導致所有下載全面失敗的問題,

改用網頁播放器目前實際使用的新端點;一併修正了排查過程中發現的登入 Cookie 刷新節流閥誤丟合法輪換、

長時間閒置後 Cookie 容易失效等相關問題,並新增背景保溫機制降低閒置失效的機率。

另外修正了機動調整可能提前失效、每日新番通知時間顯示不一致、已撤下公告卡在操作處置清單不會消失、

排程下載暫停通知重複洗版等問題;也修正了終止任務相關的一系列問題——背景執行緒噴出未捕捉例外、

反應遲緩且會遺留下載到一半的暫存檔案、確認框被進度視窗壓住看不到、單集「終止任務」按鈕沒有反應、

終止後誤發送內容矛盾的「下載完成 0MB」通知,並新增「已取消」專屬通知類別;

並延續使用者回報新增 Telegram 通知 Bad Gateway 自動重試機制。

共 17 項變更。

🆕 新功能(2 項)
Telegram 通知 Bad Gateway 自動重試 + 通知發送歷史手動重試按鈕
  • Telegram 伺服器端偶爾會回應 502 Bad Gateway(例如「每日新番通知」發送當下剛好遇到 Telegram 那邊短暫不穩),

    過去遇到這個情況會直接判定失敗,整則通知就這樣送不出去,使用者只能等下一次觸發時機才會再收到
  • 現在偵測到「Bad Gateway」時會自動等待 3 秒後重試,最多重試 3 次;3 次都失敗才會記入發送失敗
  • 若自動重試 3 次後仍然失敗,「設定」→「通知」→ Telegram「發送歷史」對應那筆失敗紀錄旁邊會出現「手動重試」按鈕,按下只會再重試 1 次,

    不會再自動連續重試,方便使用者自行判斷要不要再試
新增「已取消」通知類別,修正終止任務後誤發送「下載完成」通知
  • 過去不論下載是否真的成功,任務結束後都會無條件送出「下載完成 @file_size@ MB」的通知——分段失敗、

    ffmpeg 合併失敗、使用者主動終止等情況都不會被攔下,終止任務後反而會收到一則「下載完成 0MB」這種自相矛盾的通知
  • 新增「通知類別」→「手動任務-已取消」,使用者主動終止任務時改發送這個專屬類別(預設文字「下載已取消」,

    可在「通知模板」自訂),與真正失敗的「手動任務-下載失敗」區分開來;未真正成功也不是使用者終止的一般性失敗,

    維持原有的失敗通知邏輯,不會因此漏發或多發
🐛 BUG 修正(11 項)
動畫瘋停用舊版影片來源 API,導致所有下載全面失敗
  • 動畫瘋已將網頁播放器改用新端點取得影片播放清單,舊版 ani.gamer.com.tw/ajax/m3u8.php 固定回應 404 File not found

    不論哪一部作品、哪一集都無法下載,且跟 Cookie/裝置ID是否新鮮完全無關(實測換裝置ID、重新登入都無效)
  • 透過瀏覽器開發者工具比對網頁播放器實際發出的請求,改用新端點 api.gamer.com.tw/anime/v1/video_src.php

    videoSndeviceiddeviceTypeUseCases=1 參數,其中 deviceid 命名跟程式其他端點慣用的 device 不同,

    送錯參數名稱會被判定缺少必要參數、回應 400 INVALID_ARGUMENT),並同步調整回應內容的解析方式
  • 這是這次的頭號修正,恢復所有下載功能正常運作;Mobile API 解析模式維持原本端點不動,目前沒有證據顯示它也受影響
登入 Cookie 刷新節流閥誤丟合法輪換,長時間下 Cookie 容易失效
  • 動畫瘋的登入憑證(BAHARUNE)會不定期輪換,程式收到新值時原本會限制「同一時間只允許一個刷新動作執行」,

    避免多執行緒併發時反覆寫檔、重複打首頁——但這個限制連「把新值套用到當下執行緒自己」都一併擋住,

    被節流擋下的執行緒會繼續帶著已經被伺服器換掉的舊值送出下一次請求,容易立刻收到「憑證已失效」回應
  • 只要並發下載量夠大(例如同時追蹤多部排程作品),節流閥擋下的頻率會遠高於伺服器端實際輪換的頻率,

    造成 Cookie 資料庫遲遲沒有機會被寫入真正有效的新值,即使頻繁手動更新 Cookie 也很快又失效
  • 修正為「套用到當下執行緒」永遠執行,節流閥只限制「寫入資料庫+重打首頁確認」這兩個較重的動作,

    不再影響單一執行緒自己的請求是否使用得到最新憑證
排程下載連續失敗暫停後,通知每 30 秒重複洗版
  • 排程下載連續失敗達上限而暫停自動重試後,負責持續追蹤下載結果的背景機制仍會每 30 秒重新發現、重新排入這個

    已暫停的項目,被擋下時又重複印出同一則「已連續失敗,暫停自動重試」訊息,最長可洗版到 2 小時追蹤逾時為止
  • 改為同一個暫停狀態只通知一次,下載成功或使用者更新 Cookie 後才會重新獲得完整通知機會
機動調整可能於目標時間到達前就提前失效
  • 「操作處置」套用時間覆蓋(例如「本週延後更新」)時,2 小時的重試期限原本是從「使用者確認處置的當下」起算,

    但公告偵測到、跟公告寫的目標時間往往差很多個小時(例如中午就看到公告寫「今晚 19:30 更新」)——目標時間都還沒到,

    這筆覆蓋就已經過期,會在「機動調整異動」清單中途無故消失,並誤觸發一次「內容無變化」的每日新番通知重發
  • 改為期限一律從該筆調整實際的目標檢查時間起算,而不是套用處置的當下
每日新番通知「本日排程更新」與「機動調整異動」時間顯示矛盾
  • 「每日新番通知」的「本日排程更新」區塊過去只讀取 sn_list.txt 固定的排程時間,若當時有生效中的「本週延後/提前更新」

    調整,下方「機動調整異動」區塊會正確顯示新時間,但上方「本日排程更新」仍顯示舊時間,同一則通知出現兩個矛盾的時間
  • 改為兩區塊共用同一份調整資料:覆蓋時間會反映在排程清單上,且生效中「本週暫停更新」的項目會直接從排程清單移除,

    不會被誤列成正常更新
已從動畫瘋公告頁撤下的公告,仍永遠卡在「操作處置」清單
  • 使用者尚未手動確認處置的公告子句,若動畫瘋把該則公告從頁面撤下,過去的解析邏輯沒有拿「這次還看得到哪些子句」

    去比對「先前還在等待處置的舊子事件」,導致公告明明已經撤下,「操作處置」清單與機動調整臨時排程卻永遠不會被清除
  • 改為每次公告內容有變動時,自動把已消失、且尚未手動確認的子句標記為「忽略此公告」並從清單移除;已經手動確認過的

    處置維持原樣不動,不會被悄悄覆蓋。另外修正「操作處置」清單過去會把已手動確認「忽略此公告」的項目一直留到目標日期

    過後才消失的問題,確認忽略後會立即從清單移除
手動重試結果彈窗被通知歷史視窗蓋住看不到
  • 「通知發送歷史」本身是一個彈出視窗(modal),按下「手動重試」後結果原本用另一個彈窗顯示,

    但 Bootstrap 沒有自動處理多層彈窗的堆疊順序,新彈窗會被蓋在「發送歷史」視窗底下,畫面上完全看不到,得先關掉歷史視窗才會發現其實已經跳出來過
  • 現在改成直接顯示在「發送歷史」清單最上方(不再另外彈窗),重試結果一定看得到,也不會有堆疊層級的問題
終止手動任務時,背景執行緒噴出未捕捉的 KeyError
  • 終止任務的設計是不強制中斷已經在下載中的分段執行緒,讓它們各自跑完釋放資源即可;但這些執行緒事後回頭

    更新下載進度時,對應的監控項目已經被終止流程清掉了,於是拋出未捕捉的 KeyError,被主控台印成「未預期錯誤」
  • 改為更新進度前先確認監控項目還存在,不存在就跳過,不影響任務本身已經正確終止的結果
終止任務時反應遲緩,且會遺留下載到一半的暫存檔案
  • 終止任務原本只在少數固定檢查點才會生效:等待「解鎖影片」交握鎖時(同一時間只允許一部影片交握,其餘全部排隊)、

    非VIP廣告等待(整段 20~25 秒 sleep)都無法中途放棄——批次任務排隊等交握的集數,就算已經被終止,也得先乾等到真的

    輪到自己交握才會發現要放棄,等於白等一輪
  • 交握鎖改用逾時輪詢(每秒重試一次),沒搶到鎖的當下也一併檢查是否已被終止;廣告等待拆成每秒檢查一次而非整段

    sleep;裝置交握/解析播放清單完成後、正式進入分段或 ffmpeg 下載前也補上一道檢查——避免帶著空的播放清單繼續往下走,

    在選擇解析度那一步噴出令人困惑的 KeyError,而不是乾淨地判定成「使用者終止任務」
  • 另外,終止分段下載模式時,原本只是放棄等待、不會清掉已經下載到一半的分段暫存資料夾;終止 ffmpeg 下載模式時,

    也只是砍掉 ffmpeg 進程但沒等它實際結束就直接回傳,可能留下還在寫入中的半成品檔案。分段模式改為連同暫存資料夾一併

    刪除,ffmpeg 模式改為等待進程確實結束、釋放檔案鎖定後再刪除半成品檔案,終止任務不會再留下永遠不會被清理的殘留檔案
手動任務進度視窗開著時,終止確認框被壓在下面看不到
  • 跟上面「手動重試結果彈窗」是同一種成因:Bootstrap 不會自動處理多層彈窗的堆疊順序,同時開兩個彈窗時,

    疊在最上層的其實是 HTML 裡宣告位置比較後面的那個,跟實際開啟先後順序無關,導致批次任務進度視窗開著時,

    再跳出的「確定要終止這個批次任務嗎?」確認框反而被壓在下面
  • 這次改用通用做法一次解決:往後只要有彈窗在其他彈窗仍開著時顯示,都會自動疊到最上層,不用再一個個手動排除
單集手動任務「終止任務」按鈕沒有反應
  • 後端的終止功能其實一直都有,但前端負責呼叫的函式從未寫過,按下按鈕只會在瀏覽器主控台默默報錯,畫面上完全看不出來
  • 補上這支前端函式,行為與批次任務的終止按鈕一致(會先跳出確認框)
🔧 其他改善(3 項)
新增登入 Cookie 背景保溫機制
  • 長時間沒有任何下載/排程檢查時,登入憑證可能因閒置過久被動畫瘋判定 session 已過期,且無法透過原本的

    刷新流程救回,只能手動重新登入
  • 新增背景執行緒,每 30 分鐘模擬一次「先進入 www.gamer.com.tw 入口站再進動畫瘋」的瀏覽動線,僅在當下

    沒有下載/排隊任務進行中時才會真的發出請求,避免跟真正的下載交握互相干擾或搶用併發名額
ffmpeg.exe 自動下載來源網址更新
  • v25.2.2 新增的「偵測不到 ffmpeg.exe 時自動下載」功能,原本設定的下載來源網址已失效,更新為新的下載位置
「掃描集數」結果清單過長時新增捲軸
  • 手動任務「掃描集數」列出的集數清單(本篇/中文配音/特別篇等分類),作品集數很多時會把整個彈出視窗撐得很高、

    超出畫面高度,得先捲動整個瀏覽器視窗才看得到下方其他分類或操作按鈕
  • 清單容器加上最大高度(400px)與獨立垂直捲軸,超出高度時只有清單本身捲動,彈出視窗維持原本大小,操作起來更直覺
📦 版本(1 項)
版本號由 v25.2.2 調整為 v25.2.3
  • 版本號由 v25.2.2 調整為 v25.2.3

完整變更歷史(v24.6 → v25.2.3)請參閱先前的 release notes。

如果喜歡的可以按下 Star 來表示喜歡

可以給予咖啡表示支持

Buy SH A Coffee

v25.2.2

Choose a tag to compare

@1476523 1476523 released this 11 Aug 13:31
6a5822d

v25.2.2

延續 v25.2.1「每日新番通知」上線後第一批實測回饋,本次修正集數預測查詢對象抓錯、

導致無論作品實際更新到第幾集、預計集數永遠顯示成「第02話」的問題,

並新增「機動調整異動後自動重新發送更新版每日新番通知」功能,

讓已發送的通知內容不會因為公告較晚出現、或事後手動調整處置而跟實際排程脫節。

另外進行了一次完整程式碼審查(code review),修正 Dashboard 面板 4 項安全性問題

(Discord 測試通知可被利用發起 SSRF、/data/config.json 明文回傳登入密碼、目錄瀏覽器可繞過系統磁碟機限制、登入頁無嘗試次數限制),

以及下載排隊/手動任務可能重複啟動、ffmpeg 分段合併失敗仍判定成功、彈幕下載檔案控制代碼未關閉與正規表達式跳脫、

監視公告集數快取永遠不會更新、「本週同時更新」殭屍排程、Discord 通知模板引用區塊跨行格式跑版、

多處資料庫連線於例外路徑未正確關閉(其中部分甚至會導致資料庫互斥鎖永久卡死)、

「快速取得 Cookie/動畫瘋登入設定」彈出的瀏覽器視窗每次登入都會被要求 reCAPTCHA 驗證、

「發現新版本」通知內容過長時 Telegram 直接回「message is too long」導致整則通知送不出去,共 15 項 BUG 修正,

並新增 Windows 版偵測不到 ffmpeg.exe 時自動下載一份的功能,不用使用者自行另外準備。

共 18 項變更。

🆕 新功能(2 項)
機動調整異動後自動重新發送每日新番通知

「每日新番通知」原本每天 00:00 只會發送一次,發送之後不管「機動調整」(監視公告觸發的暫停/延期/加更等臨時排程調整)再怎麼變化,

都不會反映在已經收到的那則通知裡,使用者得自己回頭翻「公告」面板的「機動調整」區塊才會發現內容其實已經過期。

現在背景排程檢查迴圈(每 30 秒一輪)會持續比對「今天已發送的機動調整內容」跟「目前實際的機動調整內容」是否一致:

只要有新增、修改或移除(例如公告晚一步出現、或使用者在「操作處置」手動調整了對應排程),就會自動重新發送一次更新版,

標題會附加「(機動調整異動更新, 重新發送)」提示文字(對應新的 @digest_update_note@ 通知模板通用字符,已加入預設模板;

若你已經自訂過「每日新番通知」的模板,需要自行在模板中加入這個 token 才會顯示提示文字)。

若當天完全沒有機動調整變化,則不會重複發送,不會造成通知洗版。

Windows 版缺少 ffmpeg.exe 自動下載

過去 Windows 版若系統 PATHaniGamerPlus.exe 所在目錄都找不到 ffmpeg.exe,下載會直接失敗並提示「本項目依賴於ffmpeg,但ffmpeg未找到」,

使用者得自行前往官方網站下載、解壓縮並手動放進正確資料夾。

現在偵測到缺少時,會自動從客製強化版的更新源下載一份完整的 ffmpeg.exe 放進程式所在目錄,下載完成即可直接繼續下載任務,不需要任何手動操作。

下載期間主控台與日誌只會依序印出「缺少ffmpeg.exe」「正在下載ffmpeg.exe」「ffmpeg.exe已下載完成」三行訊息,不會有其他額外輸出。

實作細節:

項目 說明
下載來源 更新源網址不以明文字串存在原始碼裡,而是簡單混淆(XOR + base64)後存放,執行期才還原;這只是避免被隨手 grep/搜尋原始碼看到網址,不是真正防破解的加密
併發保護 多個下載任務的執行緒同時偵測到缺少 ffmpeg.exe 時,用鎖擋住只會真正觸發一次下載,其餘等待鎖的執行緒會發現已經下載完成而直接沿用,不會重複下載或互相干擾彼此寫入的檔案
下載失敗處理 下載到一半失敗(斷線等)不會留下損毀的半個 ffmpeg.exe——內容先寫進暫存檔,確認完整下載完成才原子性地換成正式檔名;失敗時安靜交回原本「找不到 ffmpeg」的既有錯誤處理,不會額外印出可能夾帶網址的例外內容
🐛 BUG 修正(15 項)
Discord 測試通知可被利用發起 SSRF
  • 「通知設定」的 Discord「發送測試訊息」按鈕,後端 Config.send_test_notification() 過去完全不驗證使用者透過輸入框帶入的網址格式,

    直接拿去當成 Discord Webhook 網址發出請求,且非成功回應的內容會原樣包進錯誤訊息回傳給前端。

    面板若對外開放,惡意使用者可以帶入任意內網/雲端 metadata 網址(例如 http://169.254.169.254/...),讓伺服器代為發出請求並把回應內容反射回來,用於探測內網環境
  • 現在改為要求網址必須符合 https://discord.com/api/webhooks/...(或 discordapp.com 舊網域)的合法 Discord Webhook 格式才會送出,格式不符會直接被拒絕並提示
`/data/config.json` 明文回傳 Dashboard 登入密碼
  • /data/config.json(設定頁載入設定、以及「讀取其他版本設定檔」比對功能共用的端點)過去會把整份設定原樣回傳,

    包含 dashboard.password(Dashboard 自身登入密碼,預設值即為 admin)的明文內容——跟同一支檔案裡 dashboard_login_status()「只回傳帳號、絕不回傳密碼」的既有設計原則互相矛盾,

    尤其 Dashboard 的密碼保護預設是關閉的,代表這個端點對任何連得到面板的人都是開放的
  • 現在 /data/config.json 與「匯出設定與排程檔」都會先移除 dashboard.password 欄位才回傳;

    Telegram Token/Discord Webhook 等其他敏感欄位維持原樣(設定頁本來就需要靠這些值才能實現「留空=沿用原設定」的既有編輯體驗,且僅在已登入的情況下才看得到),只有密碼欄位沒有任何頁面需要讀回明文,可以完全移除不影響任何功能
目錄瀏覽器可繞過系統磁碟機限制存取任意路徑
  • 「瀏覽...」目錄瀏覽器原本的安全限制只比對請求路徑是否恰好等於系統磁碟機根目錄(例如 C:\),

    只要換成任何子目錄(例如直接帶入 ?path=C:\Windows\System32\config?path=C:\Users\其他帳號),檢查完全不會觸發,會照常列出該目錄底下的完整內容,

    跟畫面上「系統磁碟機不開放列出完整目錄樹」的說明矛盾,尤其 Dashboard 可能對外開放時風險更高
  • 現在改為只要請求路徑落在系統磁碟機底下,且不是「桌面」「下載」「使用者自訂喜好路徑」這幾個明確開放的子樹(或其子目錄),一律視為不開放,自動改看桌面
登入頁新增嘗試次數限制
  • /login 過去對帳號密碼比對沒有任何嘗試次數限制、延遲或鎖定機制,搭配 Dashboard 密碼預設值 admin,面板對外開放時容易被暴力破解
  • 現在同一個來源 IP 連續登入失敗達 5 次會鎖定 60 秒,鎖定期間再次嘗試會直接回覆還需等待的秒數,不會繼續比對帳密;正確登入會清除該 IP 的失敗紀錄
每日新番通知集數預測全部顯示「第02話」
  • 「每日新番通知」的「本日排程更新清單」與「機動調整」清單,原本都會附上線上查詢到的「預計集數」,

    但查詢邏輯使用的是 anime.get_episode(),這個方法回傳的其實是「查詢時使用的那個 sn,對應頁面本身是第幾集」,

    而排程清單(sn_list.txt)追蹤時存的 sn 通常是使用者當初新增追蹤時的第 1 集 sn,

    導致查詢結果永遠是「1」,預測結果(current_ep + 1)也就永遠是「第02話」,不管作品實際更新到第幾集都一樣
  • 現在改成跟「取得當前新番更新時間」「排程檢查」等既有功能一致的做法:改用 get_episode_list() 取得完整劇集清單,

    從「本篇」(排除電影/特別篇/中文配音等)裡挑出數字集數最大的一筆,才是真正「目前實際更新到第幾集」,預測結果才會貼近實際狀況
排程下載可能對同一集數重複啟動下載
  • 主迴圈、自訂排程背景執行緒、「重新檢查所有排程更新」、監視公告機動調整這幾條各自獨立的執行緒,最終都會呼叫到同一個 _start_queued_workers() 來啟動排隊中的下載任務;

    但「這個 sn 是否已經在下載中」的判斷跟「登記進行中清單」是兩個獨立、沒有鎖保護的操作,剛好在同一輪都看到同一集還沒登記時,就會各自啟動一個下載執行緒同時處理同一集,可能造成檔案損毀,連續失敗次數的計數也可能因為競爭條件漏加,削弱「連續失敗達上限暫停重試」功能的效果
  • 現在把「檢查是否已在跑」與「登記進行中」這段用鎖包成原子操作,同一集數保證只會有一個執行緒真正啟動下載
手動任務可被重複提交
  • /manualTask 過去只檢查是否有資料庫整頓等維護作業正在執行,沒有檢查同一個 sn 是否已經有手動任務在跑;

    使用者連點兩次「提交」、或瀏覽器重送同一筆請求,會啟動兩個完全獨立的下載,且後送出的進度紀錄會直接覆蓋掉前一個仍在進行中的紀錄(含終止旗標與即時進度),之後按「終止任務」實際影響到哪一個變得不確定
  • 現在提交前會先檢查這個 sn 是否已有同類型(單集/批次)手動任務處於進行中狀態,有的話直接拒絕並提示
ffmpeg 分段下載模式合併失敗仍判定為下載成功
  • 分段下載模式(__segment_download_mode)合併各分段完成後,沒有檢查 ffmpeg 的執行結果就直接刪除舊檔、把合併結果標記成功並發出「下載完成」通知;

    若 ffmpeg 因為壞分段、磁碟已滿等原因非正常結束,會留下一個不完整的檔案,卻仍被當成下載成功,也不會走既有的失敗重試流程
  • 現在比照另一種下載模式(__ffmpeg_download_mode)既有的作法,補上執行結果檢查,失敗時保留原有檔案並記為失敗,讓既有的重試機制能正常介入
彈幕下載檔案控制代碼未關閉、線上黑名單字組可能讓整集彈幕下載失敗
  • 彈幕下載寫檔沒有用 with 開啟,中途拋例外時輸出檔案不會被正確關閉/flush,留下殘缺檔案
  • 彈幕過濾黑名單字組(含從動畫瘋線上抓回來的黑名單,內容不受本地控制)直接串接成一個正規表達式,若字詞剛好含 ([ 等正規表達式特殊字元,會讓整段編譯直接拋出例外,導致該集彈幕下載失敗,且每次重跑都會重複發生直到手動移除該字
  • 現在輸出檔案改用 with 確保正確關閉,黑名單字組在組成正規表達式前逐一跳脫特殊字元
監視公告集數快取永遠不會更新
  • 監視公告比對追蹤作品時用來加速的集數快取,一旦建立就永久保留、不會過期;追蹤中的作品出新一集後,後續公告比對到新集數的 sn 會因為不在舊快取裡而被誤判成「無法判斷」,即使該作品明明有在追蹤
  • 現在加上 1 小時有效期,過期後會重新查詢,公告比對排程性質本來就不需要即時到秒,慢個一小時內發現新集數可接受
「本週同時更新」處置可能產生殭屍排程
  • 「操作處置」的「本週提前更新」「本週延後更新」都會驗證公告是否有解析出明確時間,沒有就提示改用「自訂更新時間」;

    但「本週同時更新」漏了同樣的驗證,沒解析出時間時仍會直接寫入一筆 check_time 是空值的臨時排程紀錄,這筆紀錄之後會被排程檢查邏輯永久跳過、既不會標記完成也不會過期,變成畫面上看不到、系統也不會再處理的殭屍排程
  • 現在補上跟另外兩個處置方式一致的驗證,沒有明確時間會提示改用「自訂連續更新時間」
Discord 通知模板引用區塊包住跨行粗體/斜體會顯示成裸符號
  • 通知模板存檔時會自動把 Telegram HTML 標籤轉換成 Discord Markdown 語法,但轉換規則表原本先處理 <blockquote> 引用區塊(在每一行行首加上 > 前綴),

    之後才處理跨行的 <b><i> 等格式標籤,導致格式標記符號(*** 等)被插在剛好橫跨兩個引用行、被行首 > 前綴打斷的位置,Discord 端最終顯示成沒有正確渲染的裸符號而不是粗體/斜體
  • 現在改成粗體/斜體/底線/刪除線/防劇透等格式改為逐行各自包一組完整標記(而不是整段跨行內容只在頭尾各包一次),並排在引用區塊規則之前處理,兩者搭配後每一行都是自成一體、不會被行首 > 前綴打斷的合法 markdown
多處 sqlite3 資料庫連線在例外路徑未正確關閉
  • 分散在 Config.pyAccountVault.pyGossipDB.pyNotifyDB.pyGossip.pyaniGamerPlus.py 共數十處資料庫存取,

    都是「開連線 → 執行 → 關連線」直接寫成一直線,中途任何一步拋出例外,連線就不會被關閉而洩漏
  • 其中 aniGamerPlus.py 讀寫下載紀錄用的幾個函式(read_db_allread_dbinsert_dbupdate_db 等)問題更嚴重:

    這些函式共用同一把互斥鎖(db_locker)保護資料庫存取,例外發生在鎖被釋放前的話,這把鎖會永久停留在「已鎖定」狀態,等於讓後續所有下載紀錄的讀寫全部卡死,必須重啟程式才能恢復
  • 現在全面改用 contextlib.closingtry...finally 確保連線與互斥鎖在任何例外路徑都會正確釋放
快速取得 Cookie/動畫瘋登入設定彈出視窗每次登入都要求 reCAPTCHA 驗證
  • 有使用者回報「快速取得 Cookie」/「動畫瘋登入設定」彈出的瀏覽器視窗,每次登入動畫瘋都會被要求 reCAPTCHA 驗證,

    但手動另外開一個無痕視窗(chrome.exe --incognito)登入同一個帳號則不會。推測最可能的原因是這個視窗全程透過 Chrome DevTools Protocol(CDP)操作頁面

    (填欄位、讀取登入結果都要呼叫 Runtime.evaluate),這會啟用 CDP 的 Runtime domain,是公開已知、reCAPTCHA 風險評分會偵測的自動化訊號;

    搭配每次都是全新的暫存瀏覽器設定檔、沒有任何瀏覽紀錄可參考,風險分數更容易被判定偏高
  • 目前先加上 --incognito 啟動參數,符合回報者實測有效的解法;這個旗標本身無法消除 Runtime.enable 訊號,

    只是先採用已驗證有效的解法,後續若仍頻繁出現驗證,需要往「避免呼叫 Runtime.evaluate」的方向做更大幅度的調整
「發現新版本」通知內容過長時 Telegram 直接送不出去
  • 「發現新版本」系統通知會把 GitHub release notes 全文塞進通知內容,過長時 Telegram 直接回「Bad Request: message is too long」,

    整則通知(含標題與版本資訊)完全送不出去。<blockquote expandable> 只是 Telegram 用戶端「顯示」時預設收合,

    完整內容還是得整份送進 API,不會因為用了摺疊標籤就變相省字數
  • 現在送出前會把過長的內容裁成頭尾兩段、中間省略並標明省略字數,保留頭尾方便快速掌握重點,完整內容仍可自行到 GitHub 查看;

    另外加了一道保險,就算裁完之後因為 HTML 跳脫膨脹意外還是超過 4096 字上限,會再強制裁到剛好塞得下並補回結尾標籤,確保通知一定送得出去
📦 版本(1 項)
版本號由 v25.2.1 調整為 v25.2.2
  • 版本號由 v25.2.1 調整為 v25.2.2

完整變更歷史(v24.6 → v25.2.2)請參閱先前的 release notes。

如果喜歡的可以按下 Star 來表示喜歡

可以給予咖啡表示支持

Buy SH A Coffee

v25.2.1

Choose a tag to compare

@1476523 1476523 released this 03 Aug 20:21
67a31ee

v25.2.1

延續 v25.2.0「公告」面板與「每日新番通知」上線後第一批實測回饋,本次除了修正劇場版檔名殘留 [電影] 標記、

「每日新番通知」統計範圍改採動畫瘋「本日更新」慣例、公告標題含英數字季別縮寫比對失敗、

「操作處置」被「歷史公告」定期刷新蓋掉操作到一半的下拉選單等既有問題外,

也針對設定頁操作體驗做了較大範圍的調整:新增 aniGamerPlus 專屬的「登入設定」(不用再編輯設定檔)、

目錄瀏覽器可儲存常用的「喜好路徑」、下載目錄/暫存目錄連不到網路磁碟時會主動提示並提供處理選項、

版本更新檢查全面改版(支援預告版本、頁面彈窗、背景定期複查)、快速取得 Cookie 時可自動偵測登入成功,

以及「重新檢查排程更新」改為可先確認清單、逐項選擇下載或標記為已下載。

共 16 項變更。

🆕 新功能(7 項)
「操作處置」選擇指定排程

「操作處置」清單中,公告內容無法自動比對到任何追蹤作品(狀態「無法判斷」、系統搜尋不到或找不到 sn 交集)的項目,

現在會在作品名稱欄位下方多出一個「選擇指定排程」下拉選單,列出目前追蹤清單(sn_list.txt)裡的所有作品供直接挑選;

選好之後跟處置方式一起按「確認」送出即可套用(只有「等待處置」/「忽略此公告」兩種處置方式不需要先選)。

此功能只影響「無法判斷」且尚未自動比對到作品的項目,已經自動比對成功的公告不會顯示這個選單,也不能用它覆蓋掉自動比對結果。

aniGamerPlus 登入設定

「設定」→「其他」新增「aniGamerPlus登入設定」按鈕,跳出的視窗只有帳號/密碼兩個欄位

(不像「動畫瘋登入設定」需要處理 2FA/加密儲存,因為這裡就只是明文的 dashboard.usernamedashboard.password,跟這兩個欄位原本的儲存方式一致),

填寫後按「確認」即可更新登入本控制台需要用的帳號密碼。

過去這兩個欄位只能直接編輯設定檔、網頁上沒有對應的表單欄位;改用網頁操作後不用重啟程式,下次登入即可套用新帳密(目前已登入的狀態不受影響,不會被強制登出)。

目錄瀏覽器新增「喜好路徑」捷徑

「瀏覽...」目錄瀏覽器最上層(跟「桌面」「下載」與各磁碟機同一層)現在也會列出使用者自訂儲存過的「喜好路徑」(🩷 圖示),

清單最下方固定有一列「🩷 新增路徑」,可把目前路徑輸入框裡打的字串存成喜好路徑(新增項目一律接在既有喜好路徑後面,不會讓「新增路徑」這一列的位置亂跳);

每個已儲存的喜好路徑列尾端有 🗑️ 按鈕可個別移除,存取都直接透過專屬 API 生效,不需要另外按頁面的「保存」。

儲存時刻意不檢查路徑是否存在/連得到——這個功能主要是給沒有磁碟機代號可以逐層瀏覽的網路路徑(UNC 路徑,例如 NAS)加書籤用,

這類路徑常常會暫時離線,若儲存時就檢查連線性,離線中的 NAS 路徑就永遠存不進去,達不到「先存起來,等連線恢復再點」的目的。

下載目錄/暫存目錄無法存取時的處理與通知

下載目錄/暫存目錄設定成網路磁碟(UNC 路徑)時,若儲存設定當下、或 NAS 剛好斷線/關機導致連不到,

過去除了主控台一行訊息外完全沒有任何提示,程式會悄悄改成把檔案下載到本機的預設資料夾,使用者可能好幾天都不會發現下載的番劇其實沒有存到原本設定的位置。

現在設定頁最上方會出現黃色警示條,說明是哪個路徑目前連不到、暫時改用了本機哪個資料夾,並提供「處理」按鈕開啟選項視窗:

選項 行為
前往修改路徑設定 展開下載設定區塊並捲動聚焦到對應輸入框,讓你自己確認並修正路徑
暫時改用其他路徑 開啟目錄瀏覽器另外選一個路徑,選好後仍要按「保存」才會覆蓋掉原設定(不會自動改回原本的網路路徑,適合已經確定要換路徑的情況)
暫時改用本機預設資料夾 直接清空成使用程式所在資料夾底下的預設 bangumi/temp 資料夾

同時新增「路徑無法存取」通知類別(預設開啟,可在「通知類別」關閉),只在連線狀態從「正常」變成「連不到」的那一刻通知一次(同一次離線期間不會重複洗版),恢復連線後才會再次啟用下一次的通知。

另外也修正了這個機制引入時自帶的一個誤判:全新安裝、本機 bangumi/temp 資料夾尚未建立(還沒有任何下載)時,不會被誤報成「路徑無法存取」。

版本更新檢查全面改版

「檢查最新版本」原本只在程式啟動時檢查一次,且只能查到官方 GitHub 排除掉預告版本(pre-release)後的正式版,網頁上也完全看不到檢查結果。現在:

項目 說明
支援預告版本 「其他」區塊新增「檢查預告版本」開關(預設開啟),改抓 GitHub /releases 完整清單,可以查到尚未正式發布的預告版本
背景定期複查 除了啟動時檢查一次,之後每 10 分鐘會在背景自動再檢查一次,不用重啟程式就能看到新發布的版本
頁面彈窗 偵測到有更新(正式版顯示「發現新版本」、預告版顯示「發現新版本預告」)時,Dashboard 會自動跳出彈窗,列出目前版本/最新版本/完整更新內容,並附「前往 GitHub 下載」連結
略過此版本通知 彈窗裡按下後,只會抑制「這一個」版本 tag 的自動彈窗,不影響之後偵測到更新版本時繼續提示;正式版與預告版的略過紀錄各自獨立
導覽列按鈕 有可用更新時,導覽列(設定頁與任務頁皆有)會出現「有新版本」/「新版本預告」按鈕,關掉彈窗後仍可隨時點擊重新開啟
快速取得 Cookie 自動偵測動畫瘋登入成功

「動畫瘋登入設定」開啟自動代填帳密登入時,過去填完帳密/驗證碼/2FA 後,仍需要使用者自己切換分頁點擊「取得Cookie」按鈕。

現在登入分頁會在背景輪詢目前網址,偵測到動畫瘋完成驗證後導向的官方入口網站首頁(代表已經登入成功)時,

自動把分頁導回動畫瘋網站並觸發跟按「取得Cookie」按鈕完全相同的流程,抓取結果自動填回欄位。

這裡只偵測「驗證完成後被導去哪裡」這個結果,reCAPTCHA/2FA 等驗證過程仍然完全由使用者親自完成,不涉及、也不會嘗試代為處理任何一步驗證;手動點擊「取得Cookie」按鈕的方式依然保留,沒偵測到跳轉時可以自己按。

「重新檢查排程更新」改版

原本的「重新檢查所有排程更新」找到更新後會直接自動排入下載,現在改名為「重新檢查排程更新」並分成兩個階段:

  1. 選擇檢查範圍:可選「檢查所有排程」(sn_list.txt 全部項目)或「檢查指定排程」——跳出勾選清單(含全選/反選/取消,清單顯示每個排程的分類標籤/下載模式/自訂星期時間),只檢查勾選的項目
  2. 逐項確認處理方式:檢查完成後不會直接下載,而是列出所有找到的更新,每一項可各自選擇「下載」或「標記為已下載」(不下載,只在資料庫記為已完成,之後的排程檢查也不會再排入),另有「全部下載」「全部標記為已下載」兩顆快速套用按鈕;確認後才會真正執行

這個設計適合「有幾集其實已經用其他管道看過/取得,不想再重複下載,但也不想讓排程檢查一直重複提示」的情境。

若列出確認清單後 30 分鐘內都沒有按下確認,會自動取消整個作業並恢復正常運作,避免忘記處理的分頁一直卡住自動檢查與新任務排入。

🐛 BUG 修正(5 項)
劇場版檔名殘留 `[電影]` 標記
  • v25.1.1 原本已修正劇場版檔名不再附加 [電影] 集數標記,但後續版本為了讓「未開啟季度子資料夾分類」時,

    同一部作品的正篇/中文配音/特別篇/劇場版仍能分別歸進不同資料夾,在番劇名稱裡額外保留了 [電影][特別篇][中文配音][中文電影] 這類類型標籤;

    但這個保留的名稱同時也被檔名/通知訊息/主控台顯示等所有對外顯示的地方共用,導致劇場版下載完成的檔名與通知又重新出現 [電影]

    現在這類類型標籤只保留在資料夾分類需要用到的內部名稱,對外顯示(檔名/通知/FTP/主控台)一律使用不含類型標籤的乾淨名稱
公告標題含英數字季別縮寫(S2/2nd Season 等)比對失敗
  • 修正公告內容使用英數字季別縮寫(例如《轉生變成史萊姆S4》)、但追蹤清單命名採中文季別(例如「關於我轉生變成史萊姆這檔事 第四季」)時,

    系統完全比對不到對應作品、只能標記「無法判斷」的問題。原因有兩個:
    • 季別數字偵測用的 \bS(\d{1,2})\b 正規表達式在 Python 裡,中文字與英數字之間沒有 \b 邊界,

      「史萊姆S4」這種中文名稱直接接英文字母季別、中間沒有空格的常見寫法,季別數字 4 完全偵測不到
    • 就算偵測到季別,系統原本直接拿公告原文(含 S4 字樣)去動畫瘋站上搜尋,但站上正式作品名一律用中文「第N季」命名,

      英數字縮寫幾乎搜不到任何結果
  • 現在改成先修正季別偵測的邊界判斷,再將偵測到的英數字季別(S22nd Season 等)轉換成中文「第N季」接在去除縮寫後的基礎名稱後面重新組成搜尋關鍵字

    (例如《轉生變成史萊姆S4》會改搜尋「轉生變成史萊姆 第四季」),並在搜尋結果同一季別出現多筆候選時,依年份新到舊逐一嘗試比對追蹤清單,

    不再只認排名最前面的那一筆,避免因為排名不是使用者實際追蹤的那部而漏配
「操作處置」被「歷史公告」定期刷新蓋掉操作到一半的下拉選單
  • 「公告」面板開啟後每 10 秒會自動刷新「歷史公告」/「操作處置」/「機動調整」三個區塊,

    但「操作處置」的處置方式下拉選單一旦被使用者改動、還沒按下「確認」,就會被下一輪定期刷新整個蓋掉、選擇的內容還原成刷新前的狀態,等於選了等於沒選;

    現在改成只有「歷史公告」與「機動調整」維持每 10 秒定期刷新,「操作處置」只在重新開啟「公告」視窗、

    或該列按下「確認」成功套用之後才會重新讀取,操作到一半不會再被刷新打斷
write_settings() 誤刪無法連線的網路路徑設定
  • 下載目錄/暫存目錄設定成目前連不到的網路磁碟/UNC 路徑(例如 NAS 剛好關機)時,儲存設定會把這個路徑欄位永久覆蓋成空字串,之後 NAS 恢復連線也救不回來——

    原因是原本的還原邏輯只看「正規化後的值是否等於本機預設目錄」,沒辦法分辨「使用者本來就沒設定」跟「有設定,只是暫時連不到」這兩種情況:

    暫時連不到時正規化後的值會被換成本機預設路徑,還原步驟就誤判成「本來就是預設值」而清空
  • 現在改成額外記住呼叫端原始送來的路徑,只有在原始值真的等於預設目錄(或本來就是空的)時才清空,路徑只是暫時連不上時會保留原始設定值不動

    (見上方「下載目錄/暫存目錄無法存取時的處理與通知」的可見化與處理選項)
設定讀取時反斜線被重複跳脫加倍
  • 讀取設定(__read_settings_file())時,套用了一段原本只該用在解析「使用者手動編輯的舊版 config.json」的修正

    (把沒跳脫的反斜線加倍,避免 json.loads 直接炸掉),但這段修正被誤用到資料庫欄位本身返回的內容

    (不管是現行的 config_kv、還是 v25.1.8/v25.1.9 的舊版整包欄位,都已經是正確跳脫過的合法 JSON)——

    再套用一次同樣的修正只會把反斜線再加倍一次,存回資料庫後下次讀取又再加倍一次
  • bangumi_dirtemp_dir 因為後面還有 os.path.abspath() 正規化,多出來的反斜線被悄悄吃掉沒被發現;

    但這次新增的「喜好路徑」custom_dir_shortcuts 沒有經過路徑正規化,反覆讀寫幾次後路徑裡的反斜線就會完全走樣、看不出原本設定的網路路徑長什麼樣子

    (實測踩到的 bug,透過直接對資料庫做讀寫回圈測試才抓到)。現在移除這段誤用的重複跳脫處理,只在真的需要解析舊版手寫 config.json 時才套用
🔧 其他改善(3 項)
「每日新番通知」統計範圍改採 13:00~隔日12:59
  • 「每日新番通知」原本統計範圍是日曆日 00:00~23:59(依 now.isoweekday() 判斷「今天」排定哪些作品),

    但動畫瘋多數深夜番實際更新時間落在 23:00~01:00 左右,跨過午夜就會被排除在通知範圍外,得等到隔天才會出現在通知裡;

    現在改成比照動畫瘋網站本身「本日更新」的分類方式,以 13:00 為界,統計當日 13:00 到隔日 12:59 這個區間內排定更新的作品與機動調整異動,

    深夜/凌晨更新的集數仍算作「今天」的內容,通知當天就能看到完整清單,排序也依實際更新先後(00:00~12:59 視為接在 23:59 之後)呈現
Cookie/JA3/Akamai 儲存後免重啟即可生效
  • 過去在網頁上更換 Cookie/JA3/Akamai 後,必須重新啟動 aniGamerPlus.exe 才會套用新指紋對應的裝置ID,設定頁也有紅字警告提醒這件事;

    沒有照做的話,裝置ID與新指紋對不上,很容易再次觸發「裝置驗證異常」(code=1007)
  • 現在存檔(/cookie/uploadConfig)後會自動清除裝置ID的記憶體快取,下一次下載取用裝置ID時就會重新判斷是否需要跟著換新的

    (真的過期才會重新申請,沒過期會繼續沿用),不需要重啟程式;這則過時的「請務必重新啟動」警告文字也一併移除
設定頁版面整理
項目 說明
下載設定摺疊化 「下載設定」比照其他區塊改為可摺疊,且「路徑設定」原本獨立的下載目錄/暫存目錄輸入框,整併移到「下載設定」區塊內(檔名後綴欄位下方),不用再多捲動一個獨立區塊
「其他」按鈕重新排序整合 「其他」區塊按鈕統一排列為:aniGamerPlus登入設定/資料庫整頓/取得當前新番更新時間/重新檢查排程更新/讀取其他版本設定檔/匯出設定與排程檔,原本獨立放在版面最下方的「讀取其他版本設定檔」也移進來一起管理
聊天室ID改為必填 移除原本「手動指定Chat ID」開關與 Telegram getUpdates 自動偵測備援機制(依賴短時間內的對話紀錄,排程通知這種非即時場景很容易偵測不到、導致通知悄悄失敗);欄位更名為「聊天室ID」並加寬,一律透過「取得聊天室ID」按鈕主動查詢後填入並保存
匯出設定確認改用頁面彈窗 「匯出設定與排程檔」的執行前確認提示,從瀏覽器原生 confirm() 改成跟其他功能一致的頁面內彈窗
快速取得後自動儲存 「快速取得 Cookie/UA/JA3/Akamai」成功填入欄位後,直接自動觸發保存,不用再額外按一次「保存」按鈕(副作用:若在按「快速取得」前有改過其他還沒存的欄位,會一併存進去,這是配合此行為調整的刻意結果)
密集段落改用 <br> 換行 修正多個彈窗/區塊說明文字過長擠成一行、不易閱讀的問題
📦 版本(1 項)
版本號由 v25.2.0 調整為 v25.2.1
  • 版本號由 v25.2.0 調整為 v25.2.1

完整變更歷史(v24.6 → v25.2.1)請參閱先前的 release notes。

如果喜歡的可以按下 Star 來表示喜歡

可以給予咖啡表示支持

Buy SH A Coffee

v25.2.0

Choose a tag to compare

@1476523 1476523 released this 30 Jul 07:02
dc08f70

v25.2.0

延續 v25.1.9,本次新增客製強化版獨有的「公告」面板:導覽列「排程」右側新增「公告」按鈕,

可查看歷史公告、對每則公告手動指定或覆蓋處置方式、查看目前生效中的機動調整排程,取代過去只能看程式碼日誌、無法在網頁上操作的問題;

新增「每日新番通知」,每天 00:00 主動彙整當天排程更新清單與機動調整異動推播一則通知;

「掃描集數」勾選框新增全選/反選/取消按鈕與 Shift+拖曳快速選取。

同時把「監視公告」功能原本散落在程式目錄下的三份檔案全部改存進 aniGamer.db

並把既有的 configsn_listmanual_single_tasksmanual_batch_tasks 資料表也一併整理成逐欄位存放(不再是一整包難以閱讀的 JSON 字串),方便用 DB 瀏覽器查看與手動修改;

程式內殘留的簡體字(含程式碼註解與使用者可見文字)全面轉換為繁體。

另外修正「檢查更新」訊息顯示原始 Markdown 語法、「掃描集數」特別篇與中文配音集數互相混淆誤植、裝置驗證異常(code=1007)反覆發生、任務頁缺少「公告」按鈕、摺疊區塊箭頭方向與實際展開狀態不符、「操作處置」仍顯示已完成下載公告項目等問題。

共 14 項變更。

🆕 新功能(3 項)
公告面板(歷史公告/操作處置/機動調整)

導覽列「排程」按鈕右側新增「公告」按鈕(設定頁與任務頁皆有),跳出的視窗跟「添加手動任務」一樣的彈窗風格,內含三個可各自自由摺疊、視窗會隨摺疊狀態自動變長變短的區塊:

區塊 內容 好處
歷史公告 捲動清單顯示每一則偵測到的公告:時間/劇名(或公告原文,若未比對到追蹤中的作品)/集數(比對追蹤作品目前線上集數推算,延後類公告顯示「集數+1」,公告內有明確指定集數或屬於同時更新則直接採用該數字,無比對資料時顯示「-」)/狀態(暫停更新/提前更新/延後更新/同時更新/暫時下架/無法判斷,依公告內容與該作品上一集網頁上實際顯示的上架時間比對判斷),每 10 秒自動刷新;除「機動調整」外預設摺疊,展開才會顯示內容 不用再翻程式日誌或猜測公告內容代表什麼, 一眼能看出每則公告對追蹤中作品的實際影響
操作處置 只列出目標時間尚未過去(或還無法比對到作品、需要人工判斷)且尚未實際完成下載的公告;每列顯示公告時間、作品/內容、處置方式下拉選單(等待處置/本週暫停更新/本週提前更新/本週延後更新/本週同時更新/自訂更新時間/自訂連續更新時間/忽略此公告/本週下架)與「確認」按鈕。系統已依判斷結果自動套用「機動調整時間」的預設處置,這裡可以直接覆蓋成別的處置方式;選好後按「確認」才會生效並鎖定,之後系統重新檢查或程式重啟都不會再更動這則公告的處置(只影響這一則公告,不影響未來的公告) 系統判斷錯誤或想採取不同因應方式時,不需要改程式碼或等下次公告,直接在網頁上蓋過去即可
機動調整 顯示目前生效中的臨時排程調整(暫停檢查/覆蓋成指定時間檢查, 含預期集數與目前已找到集數)與狀態,跟操作處置的資料同步、只是唯讀不含處置操作 隨時能確認「機動調整時間」實際上排了哪些調整,跟自己以為的是否一致
每日新番通知

「設定」→「通知設定」→「通知類別」新增「每日新番通知」開關(預設開啟),每天 00:00 自動彙整並發送一則通知,內容分兩段:

  • 本日排程更新:依排程清單(aniGamer.db,沿用 sn_list.txt 格式的自訂星期/時間標籤)列出今天會檢查更新的作品與時間,

    並嘗試線上查詢目前實際集數推算「預計播出第 N 話」(查詢失敗時省略集數,不影響整則通知照常發送)
  • 機動調整異動:列出「監視公告」機動調整功能今天生效中的暫停/延期/加更等異動(需開啟「監視公告」與「機動調整時間」才會有內容)

兩段內容都可透過「通知模板」自訂文字與格式(Telegram 可搭配 <blockquote expandable> 可摺疊引用標籤,

內容達 4 行以上才會顯示收合箭頭),也可在「通知歷史」查詢過去發送過的每日新番通知內容。

跟其他 10 種通知類別一樣,這是額外新增的第 12 種通知類別,不影響既有類別的開關與模板設定。

掃描集數全選/反選/取消、Shift+拖曳快速選取

手動新增任務「掃描集數」的每個分類(本篇/中文配音/特別篇)各自新增「全選」「反選」「取消」三顆按鈕,只作用在該按鈕所屬分類,不影響其他分類已勾選的狀態;

另外新增 Shift+拖曳快速選取:在任一勾選框上按住 Shift 並按下滑鼠左鍵,

會依這一格目前的狀態決定這次要「勾選」還是「取消勾選」,接著拖曳滑過的每一格都套用同一個結果,放開左鍵即結束。

集數多的長篇作品(例如只想跳過中間某幾集特別篇)不用再逐一手動點擊或全部勾選後再一個個取消。

🐛 BUG 修正(7 項)
檢查更新訊息顯示原始 Markdown 語法
  • 修正「檢查更新」偵測到新版本時,GitHub release notes 內容(標題 ##、粗體 **文字**、表格、<details> 摺疊區塊等 GitHub-flavored-Markdown 語法)在 CMD 主控台跟 Telegram/Discord 通知裡都是原始語法符號照樣印出來,

    而不是真的被渲染,反而比原始文字更難讀;

    現在會先轉成乾淨的純文字再輸出,CMD/Telegram/Discord 都適用同一份結果
解析集數清單時「特別篇」與「中文配音」互相混淆
  • 修正解析作品集數清單(供「掃描集數」與 allrange 下載模式使用)時,只要「特別篇」與「中文配音」的集數數量不一致(例如特別篇只有 1 集、中文配音卻有跟本篇一樣多集,這是常見情況),

    數量較少的分類用完後,數量較多的分類後續集數會全部被誤標成前一個分類的名稱,

    例如中文配音第 2 集以後全部被誤標成「特別篇2」「特別篇3」……導致「特別篇」清單異常膨脹、「中文配音」清單只剩 1 集;

    現在改成直接依網頁上每個集數連結實際隸屬的分類標籤判斷,不再用「這個集數編號出現第幾次」反推分類
公告狀態誤判提前/延後、系統自動處置誤顯示為已手動確認、機動調整未重試即判定過期、跨日時間解析成過去式
  • 修正判斷公告「提前更新」/「延後更新」時,比對基準誤用資料庫裡的下載完成時間(受下載排隊/分段下載耗時影響,

    可能比實際上架時間晚上一兩個小時甚至更多),導致實際上是延後的公告被誤判成提前更新;

    改成實際查詢該作品上一集網頁上顯示的「上架時間」當比對基準
  • 修正「機動調整時間」開啟時系統自動套用的預設處置,會被畫面誤顯示成「已手動確認」徽章,跟使用者自己在「操作處置」按下確認的結果無法區分
  • 修正「操作處置」單一集數的覆蓋檢查時間(提前/延後/自訂更新時間)到了目標時間檢查一次沒找到就直接標記過期、不會重試,

    導致公告內容時間沒有完全精準對上實際上架時間時,該筆紀錄會提早從「機動調整」消失;

    改成統一給 2 小時重試視窗(每 30 分鐘複查一次),跟「同時更新」「自訂連續更新時間」一致
  • 修正公告沒有明確寫出日期、只寫時間時(例如「今晚調整為 02:00 更新」),一律套用「今天」的日期去解析,若公告是在傍晚/晚上發出、公告內容講的又是凌晨時段,

    套用「今天」算出來的目標時間其實已經是過去式(中文語感的「今晚」涵蓋到隔天凌晨,但時鐘時間已經跨過午夜),導致覆蓋排程一到點檢查就直接判定過期;

    現在改成算出來的目標時間若早於公告發布時間,自動順延一天(更新時間不可能比公告時間還早)
裝置驗證異常(code=1007)在 cookie 每日失效環境下反覆發生
  • 裝置ID原本在整個程式執行期間持久共用一份(避免同一帳號短時間內申請大量不同裝置觸發異常判定),只在程式重新啟動時才會檢查 cookie/指紋是否已變更、需不需要換一組新的;

    若 cookie 每天都會自動失效重新整理(不少使用者的實際環境),執行期間中途換過的新 cookie 會跟還沒重啟、仍沿用舊 cookie 底下核發的裝置ID對不上,

    導致下載一開始就收到 code=1007 裝置驗證異常,且要等到下一次排程檢查週期才會清除重試,體感上像是「每次下載都碰到」;

    現在改成每次下載(每一集)開始前都先作廢舊裝置ID、換一組全新的再下載,確保裝置ID永遠對應目前的 cookie
任務頁缺少「公告」按鈕
  • 「公告」面板原本只接在「設定」頁的導覽列,「任務」頁(monitor.html)的導覽列一直沒有同步補上這顆按鈕,導致停留在任務頁時查看公告還得先切回設定頁;

    現已在兩個頁面的導覽列同步加上「公告」按鈕,並共用同一套 JS 邏輯
摺疊區塊箭頭方向與實際展開狀態不符
  • 「設定」頁與「公告」面板多處預設收合的摺疊區塊(環境偽裝設定/代理設定/通知設定/Telegram通知/Discord通知/通知類別/通知模板/其他/歷史公告/操作處置等),

    原始網頁 HTML 沒有正確標示初始的收合狀態(缺少 collapsed class 與 aria-expanded="false"),

    導致頁面剛載入、使用者還沒點擊過任何標題前,箭頭圖示看起來像是「展開」方向,但底下內容其實是收合隱藏的,兩者顯示不一致容易誤以為頁面故障或內容消失;

    點擊過一次後 Bootstrap 會自動修正該次的箭頭方向,所以只有「頁面剛載入、尚未互動」的瞬間會看到這個問題。

    現已補上正確的初始 class 與屬性,收合/展開狀態預設就與箭頭方向一致
「操作處置」仍顯示已完成下載的公告項目
  • 修正「操作處置」清單原本只依「目標時間是否已過去」篩選要顯示的公告,沒有排除該公告要求的更新其實已經抓到並下載完成的項目(對應的機動調整臨時排程狀態已是「完成」);

    這種情況不需要使用者再確認處置方式,現在會一併檢查機動調整的最新狀態,已完成下載的項目自動從「操作處置」清單移除(仍保留在「歷史公告」的永久紀錄裡)
🔧 其他改善(3 項)
aniGamer.db 資料表全面欄位化整理
  • 「監視公告」原本散落在程式目錄下的 gossip_log.jsonl(公告原文永久紀錄)/gossip_disposition_log.jsonl(解析與處置紀錄)/gossip_pending.json(生效中的臨時排程)三份檔案,

    全部改存進 aniGamer.db(新增 gossip_loggossip_eventsgossip_pending 三張表),供上方「公告」面板讀取;

    程式啟動時會自動偵測硬碟上是否還有舊版三份檔案並驗證匯入,原始檔案不會自動刪除
  • 排程清單(sn_list.txt 格式,v25.1.8 起就已改存進 aniGamer.db,但當時是整包塞成一個字串欄位)進一步正規化,

    改存進新增的 sn_list_lines 表,每一行(追蹤項目/單獨的註解行/空白分隔行/星期分類標籤)各自一列存放;

    真實使用情境中 sn_list.txt 格式大量依賴獨立註解行與空白行來分區整理每個星期/季度追蹤的作品,逐行拆解已用一份 94 行(57 個項目/17 行註解/16 行空白/4 個標籤)的實際檔案驗證來回轉換不會遺漏任何一行;

    排程頁面文字編輯器仍以 sn_list.txt 格式的原始文字為權威顯示與編輯介面,

    磁碟上的 sn_list.txt 檔案本身只在從更舊版本升級時用來做一次性匯入,程式不會再實際讀寫這個檔案
  • config(原本整包 config.json 塞成一個 JSON 字串欄位)改成 config_kv,每個設定項目各自一列,

    包含 dashboardftpcoolq_settingsnotify_categories 等原本還是巢狀字典的設定也再往下拆一層,每個最底層設定值都各自成一列;

    manual_single_tasksmanual_batch_tasks(原本整包塞一個 params JSON 字串欄位)也改成模式/解析度/建立資料夾/執行緒數/彈幕/雙語/重新命名等逐欄位存放
  • 整理後每一列資料在 DB 瀏覽器(例如 DB Browser for SQLite)打開時都能直接看懂、直接修改,不會再看到一整條難以閱讀的 JSON blob;

    升級時會自動偵測並轉換既有資料,原本的舊版資料表結構不會被覆蓋,轉換失敗時保留舊結構不影響程式運作
介面顯示與提示文字微調
  • 「公告」面板「操作處置」欄位排版調整:處置方式下拉選單欄位縮窄,比對到的作品名稱獨立一行,公告原文換行顯示在下方,取代原本兩者擠在同一窄欄容易看不清楚的排版
  • 「取得當前新番更新時間」查詢結果視窗改成兩個各自獨立捲動的清單:「時段不同, 需要確認」與「時段相同,

    不需修改」分開放,作品數量多時不用滑過一堆本來就不需要處理的項目才找到真正要看的那幾筆
  • 排程檢查日誌「超過自定義時間10分鐘仍未偵測到更新」這行文字顏色由紅字改成綠字——這是預期內、非異常的結果,不該用紅字暗示是錯誤
  • 「快速取得」Chat ID 欄位(col-md-4 窄欄位放不下完整提示文字)已設定時的遮罩提示文字改用簡短版本,避免文字溢出欄位
  • 「通知發送歷史」查詢彈窗的類別/子類別篩選下拉選單改用固定寬度,取代原本自動寬度在選項變動時忽大忽小的問題
  • 「暫停更新」公告通知內建模板文字由「《作品名》停止更新」改為「《作品名》本週停止更新」——「監視公告」偵測到的暫停一律只影響「這一週」(下一則公告或下週檢查仍會照常運作),原文字容易讓人誤以為是永久停止追蹤;

    此為內建預設模板文字,只有從未在「通知模板」自訂過這則通知、或按過「恢復預設」的使用者會在下次觸發時看到新文字,已自訂內容不受影響
全面簡體字轉繁體字
  • 掃描並轉換 Dashboard 各模板/JS 檔案與 Python 後端程式碼中殘留的簡體字(含程式碼註解與使用者可見文字),例如「模态框」→「模態框」、「关闭」→「關閉」、「用户」→「用戶」、「设置」→「設置」、「并发」→「並發」、「失败」→「失敗」等
  • 採用字元對字元的轉換表,刻意不採用會連帶把已經正確的繁體用詞替換成台灣用語習慣的版本(例如「添加」改「新增」、「項目」改「專案」等不在此次調整範圍內),

    並人工排除三個容易誤轉的個案:「才」「只」在本專案中的用法不適合轉成「纔」「隻」;

    「控制台」的「台」是台灣地區已通用的正確寫法,不需轉成「臺」或「檯」;

    另外額外抓到並修正一處合併影片片段語境下「合并」應轉換成「合併」而非直譯的「合並」
📦 版本(1 項)
版本號由 v25.1.9 調整為 v25.2.0
  • 版本號由 v25.1.9 調整為 v25.2.0

完整變更歷史(v24.6 → v25.1.9)請參閱先前的 release notes。

如果喜歡的可以按下 Star 來表示喜歡

可以給予咖啡表示支持

Buy SH A Coffee

v25.1.9

Choose a tag to compare

@1476523 1476523 released this 29 Jul 07:58
191b69d

v25.1.9

延續 v25.1.8,本次新增客製強化版獨有的「通知模板」自訂系統:11 種通知類別(下載完成/失敗、公告事件、系統事件)都能自訂實際發送的文字內容,

Telegram 版可用 HTML 格式標籤(粗體/斜體/底線/刪除線/程式碼/引用/超連結/防劇透等),

儲存時自動轉換成對應的 Discord Markdown 語法,不需要自己維護兩份文字;

同時新增「發送歷史」查詢功能,可回顧每一則通知實際送出的內容與成功/失敗結果。

另外修正 Telegram 通知格式標籤先前只會顯示成純文字、不會真的套用格式的問題,並統一了設定頁控制項的寬度排版、導覽列置中,通知測試結果改用彈窗顯示。

共 10 項變更。

🆕 新功能(2 項)
通知模板自訂,Telegram HTML 標籤/自動轉換 Discord Markdown

「設定」→「通知設定」新增「通知模板」摺疊區塊,可自訂 11 種通知類別(下載通知 4 項、公告通知 4 項、系統通知 3 項)實際發送的文字內容,

取代過去寫死在程式碼裡、無法客製化的固定訊息格式。

此功能為客製強化版獨有,模板內容存在 aniGamer.db不包含在「匯出設定與排程檔」的匯出範圍內。

功能 用法 好處
選擇類別編輯 下拉選單「選擇通知類別」切換要編輯的類別,切換後自動載入該類別目前的模板文字 11 種類別集中在同一個編輯器管理,不用到程式碼裡逐一翻找對應的通知文字
Telegram 格式工具列 選取文字後按「B/I/U/S/程式碼/程式碼區塊/引用/可摺疊引用/超連結/防劇透」按鈕,自動包上對應標籤 不需要背 Telegram Bot 支援的 HTML 標籤語法,點按鈕就能套用格式
Discord 版本自動轉換 儲存模板時,Telegram HTML 標籤自動轉換成對應的 Discord Markdown 語法,並顯示在唯讀的「Discord 版本預覽」欄位供對照 只需要維護一份 Telegram 版模板,不用自己另外改寫一份 Discord 語法,兩邊格式定義也不會因為手動維護逐漸兜不起來
通用字符(token)按鈕 格式工具列正下方固定顯示一排按鈕(依目前類別列出適用項目,涵蓋 @animation_name@@episode@@file_size@@fail_reason@@announcement_text@@version_tag@ 等),按鈕上顯示的是中文說明(例如「番劇名稱」),滑鼠移上去會顯示對應的 @xxx@ 字串,按下直接插入模板輸入框目前的游標位置;詳細說明另外收進「可用通用字符說明」摺疊區塊(預設收合,用法與「Telegram 格式標籤說明」一致,列出每個字符的用途與適用備註) 中文標籤比原始 @xxx@ 字串更容易一眼看懂用途,不用自己手打容易拼錯字的符號;按鈕常駐不用展開摺疊才能用,說明文字則摺疊起來不佔版面;可自由調整通知內容的措辭與排版順序,而不是只能收到固定格式的訊息;未使用到的 token 保留原樣不清空,方便發現自己拼錯字
預覽 按「預覽」跳出「通知預覽」視窗,用範例內容模擬 Telegram 訊息氣泡與 Discord 嵌入卡片的實際外觀,讀取的是輸入框裡「尚未儲存」的文字;可摺疊引用(<blockquote expandable>)會模擬真正的收合互動——內容達 4 行以上時預設收合並在右下角顯示向下箭頭,點擊展開全文、箭頭轉向上,再點一次收合回去,不足 4 行則維持一般引用樣式 不用先儲存、也不用真的觸發一次下載/公告/系統事件,就能立即看到修改後大概會長什麼樣子;可摺疊引用的收合/展開效果更貼近 Telegram 實際畫面
模板測試 「預覽」按鈕旁新增「模板測試」,按下後用目前類別已儲存的模板套用範例內容,透過已啟用的 Telegram/Discord 管道實際發送一次,逐一回報各管道成功/失敗結果 不用等真的觸發下載/公告/系統事件,就能確認模板格式在真正的 App 上收到時是否如預期;與「預覽」互補:預覽是模擬畫面,模板測試是真的送出去
恢復預設 按「恢復預設」把目前類別的模板(Telegram/Discord 兩版)還原成內建預設文字;未自訂過的類別會顯示「目前為預設值」徽章 改壞了或想不出更好的措辭時,隨時能一鍵退回官方預設文字
通知發送歷史

Telegram/Discord 通知設定區塊各自新增「查看發送歷史」按鈕,跳出「發送歷史」視窗。

功能 用法 好處
依管道查詢 Telegram/Discord 各自的按鈕只查詢該管道自己的歷史紀錄(兩邊資料庫各自獨立儲存) 排查「這則通知到底有沒有送出去」時不用去猜是哪個管道的問題
依類別/子類別篩選 視窗內「全部類別/下載通知/公告通知/系統通知」下拉選單,選定後子類別選單會列出對應的細項可再篩選 番劇一多時歷史紀錄會很長,篩選後能快速找到特定事件(例如只看某次裝置驗證異常)的發送紀錄
顯示發送結果 每筆紀錄顯示發送時間、實際發送的完整訊息內容,以及成功/失敗(失敗時附上錯誤原因) 通知沒收到時可以直接對照歷史紀錄判斷是「沒送出」還是「送出了但 Token/Webhook 設定有問題」,不用憑印象猜測
🐛 BUG 修正(1 項)
Telegram 格式標籤先前不會真的套用格式
  • 修正 Telegram 通知發送時未帶入 parse_mode=HTML 參數,導致模板即使用了 <b><i><code> 等格式標籤,

    Telegram 收到的還是純文字、標籤符號會原樣顯示出來而不是真的變成粗體/斜體/程式碼樣式;

    此次連同「通知模板」功能一併修正,模板裡使用的格式標籤現在會正確渲染
🔧 其他改善(6 項)
設定頁控制項改用 flex 版面統一寬度
  • 「設定」頁各區塊的開關(switch)與下拉選單(select)改用 flex 版面統一計算寬度,取代原本不穩定的表格自動排版,修正過去不同欄位開關寬度/間距略有落差的問題
下載設定/環境偽裝設定版面微調
  • 「下載設定」區塊部分欄位標籤同步精簡並重新排序/調整寬度,「環境偽裝設定」摺疊行為統一比照「代理設定」「通知設定」「其他」等區塊
導覽列置中對齊
  • 導覽列(品牌標題+選單連結)在「設定」頁與「任務」頁改為置中對齊頁面內容寬度,取代原本靠左對齊的排版
通知測試結果改用彈窗顯示
  • Telegram「發送測試訊息」/「取得Chat ID」與 Discord「發送測試訊息」按鈕的執行結果,改用自訂結果彈窗顯示,取代原本瀏覽器原生的 alert() 彈出視窗
Telegram/Discord 通知設定區塊搬移與 Discord 嵌入卡片調整
  • Telegram/Discord 通知設定區塊搬移到「通知類別」區塊上方(對應說明文字同步從「下方 Telegram/Discord」改為「上方 Telegram/Discord」)
  • Discord 通知移除寫死的嵌入卡片作者「🔔 動畫瘋」欄位,「發送測試訊息」的標題統一改用與正式通知相同的 【aniGamerPlus 客製強化版 vX.X.X 消息】 格式
Chat ID 欄位加入敏感遮罩
  • telebot_chat_id(Chat ID)欄位加入敏感欄位遮罩清單,比照 Token/Webhook 處理
📦 版本(1 項)
版本號由 v25.1.8 調整為 v25.1.9
  • 版本號由 v25.1.8 調整為 v25.1.9

完整變更歷史(v24.6 → v25.1.8)請參閱先前的 release notes。

如果喜歡的可以按下 Star 來表示喜歡

可以給予咖啡表示支持

Buy SH A Coffee

v25.1.8

Choose a tag to compare

@1476523 1476523 released this 27 Jul 19:14
f0c3840

v25.1.8

延續 v25.1.7,本次將 config.jsonsn_list.txtcookie.txtdevice_id.txtdashboard_secret.key、手動任務暫存檔全部整併進 aniGamer.db

根除斷電/當機導致設定檔寫到一半損毀成亂碼的問題;

新增「快速取得 Cookie / UA・JA3・Akamai」一鍵擷取工具與啟動緊急修復機制;

並新增 Telegram/Discord 共用的「通知類別」開關系統,同時修正 Telegram 通知一個會誤判成「Token 無效」的崩潰問題。

共 14 項變更。

🆕 新功能(5 項)
設定/排程/密鑰檔案整併進 aniGamer.db
  • config.jsonsn_list.txtcookie.txtdevice_id.txtdashboard_secret.keymanual_single_tasks.jsonmanual_batch_tasks.json 改存進 aniGamer.db(各自一張表),

    不再是獨立的純文字/JSON 檔案,執行期間所有讀寫都透過 SQLite 交易完成,不會再發生「寫到一半當機/斷電導致檔案整個損毀成亂碼」的情況
  • 首次以 v25.1.8 啟動時,若偵測到硬碟上仍有舊版的上述檔案,會自動驗證內容格式沒有問題後匯入資料庫;

    驗證失敗(例如檔案本身已經是亂碼)則不會匯入,改建立空白/預設值,避免把已損毀的內容原封不動帶進資料庫。

    匯入後原始檔案不會被刪除或改名,會繼續保留在硬碟上,供你自行確認新版本運作沒問題後再手動刪除
  • 「Web 控制臺」→「設定」→「其他」區塊,「資料庫整頓」按鈕右側新增「匯出設定與排程檔」按鈕:可將目前資料庫裡的內容匯出重建成 sn_list.txtconfig.json 兩個檔案並由瀏覽器下載,

    供之後不想繼續使用本客製版(資料庫儲存方式)的使用者取得一般純文字檔格式的設定;

    按下後會先跳出提醒,匯出的檔案是由資料庫重建而成,請自行檢查內容後再使用
快速取得 Cookie / UA・JA3・Akamai

「設定」頁「Cookie/JA3/Akamai」旁新增「快速取得」按鈕,取代原本只能自己開瀏覽器手動複製貼上、或跳轉到 ja3.zone/check 再抄一次的流程。

功能 用法 好處
快速取得 Cookie 按下「快速取得」→「Cookie」,程式會另外開一個乾淨(全新暫存設定檔)的獨立 Chrome/Edge 視窗導向動畫瘋首頁,登入後按視窗上的獨立控制面板「取得Cookie」按鈕,Cookie 會自動填入設定頁欄位並自動關閉瀏覽器 不用再自己開發者工具找 Cookie 欄位手動複製,登入哪個帳號一目了然,全新暫存設定檔不受你平常瀏覽器的登入狀態/擴充功能干擾
快速取得 UA/JA3/Akamai 按下「快速取得」→「UA/JA3/Akamai」,程式開啟獨立瀏覽器視窗導向 ja3.zone/check,等頁面載入完成後按控制面板按鈕,三個欄位會自動擷取並一次填入 不用再自己前往 ja3.zone/check 逐一複製三個欄位,且與取得 Cookie 用的是同一個瀏覽器核心,確保三者指紋一致
獨立控制面板視窗 取得按鈕不是注入在網頁畫面裡,而是額外彈出一個小型獨立視窗 避免動畫瘋/ja3.zone 頁面本身的重新渲染或瀏覽器原生對話框把注入的按鈕清掉導致點不到
打包後 exe 亦可使用 無需操作,aniGamerPlus.exe 內建隱藏的 --quick-fetch 重啟旗標帶起這個功能 打包後沒有隨附 python.exe 可執行輔助腳本的限制已處理好,不影響封裝版使用

此功能需要系統已安裝 Chrome 或 Edge 瀏覽器(透過登錄檔自動偵測安裝位置),兩者皆未安裝時會提示改用手動貼上的方式填寫。

啟動緊急修復機制
  • 自 v25.1.8 起設定改存進 aniGamer.db,一般使用者沒有工具能直接打開 SQLite 資料庫手動修改。

    若啟動時偵測到 Web 控制面板的 port 被佔用(過去這種情況只能提示「請到配置文件更換」但沒有可編輯的配置文件),現在會在程式資料夾自動產生 emergency_fix.txt

    用記事本打開即可依照裡面的說明修改 dashboard_port

    存檔後重新啟動 aniGamerPlus.exe 就會自動驗證並套用進資料庫,套用成功後這個暫存檔案會被自動刪除;

    內容格式不合法時會保留檔案並提示錯誤原因,讓你修正後再重啟一次
Telegram/Discord 共用「通知類別」開關

「設定」→「通知設定」新增「通知類別」子區塊,讓 Telegram 與 Discord 共用同一組「哪些事件要推播」開關,兩個管道各自的啟用開關與 Token/Webhook 設定則維持獨立。

分類 涵蓋事件
下載通知 手動任務-下載完成/下載失敗、排程任務-下載完成/下載失敗(透過新增的 manual 旗標分辨手動任務與排程自動觸發)
公告通知 停止更新、延後更新、臨時加更、其他公告(對應「監視公告」功能偵測到的各類事件)
系統通知 Cookie 失效、裝置驗證異常(code=1007)、新版本可用
  • 所有開關預設全開,維持舊版「只要開啟 Telegram/Discord 通知就一定收到下載完成通知」的既有行為,升級後不需要重新設定
  • 通知內容統一改成顯示番劇名稱+集數+副檔名(而非完整的自訂檔名前綴/後綴),標題也統一帶上「客製強化版」與目前版本號,訊息更精簡好讀
  • Cookie 失效、裝置驗證異常這類系統通知加上 10 分鐘冷卻,避免併發下載短時間內同時觸發同一個問題時被同樣的通知洗版
新增「發送測試訊息」/「取得Chat ID」按鈕
  • 新增「發送測試訊息」按鈕(Telegram/Discord 設定區塊皆有)與「取得Chat ID」按鈕(Telegram 專用),

    可在還沒儲存設定前就先用目前輸入框裡的 Token/Webhook 測試是否正確,不用先存檔、觸發下載完成才知道有沒有設定對;

    自動偵測到的 Chat ID 現在會直接記住並自動切換為「手動指定Chat ID」模式,之後每次通知都不需要再重新查詢一次
🐛 BUG 修正(3 項)
資料庫升級版本號未即時寫回,升級訊息重複顯示
  • 修正資料庫從 v2.0 升級到 v3.0(或任何版本升級)後,database_version 沒有立即寫回資料庫,

    導致同一次執行期間每次呼叫 read_settings() 都會誤判成「尚待升級」而重複印出「資料庫從 vX.X 升級到 vX.X」訊息;

    改為升級完成後立即寫回新版本號
Telegram 自動偵測 Chat ID 在無對話紀錄時誤判成「Token 無效」
  • 修正 Telegram 通知在自動偵測 Chat ID(呼叫 getUpdates)尚未取得任何與 Bot 的對話紀錄時,因為沒有檢查回傳陣列是否為空就直接取第一筆,

    導致 IndexError 並顯示「Invalid access token」這種容易誤導使用者去懷疑 Token 本身有問題的錯誤訊息;

    改為明確判斷並提示「請先在 Telegram 傳送任意訊息給這個 Bot」
Telegram 通知中文/換行內容未做 URL 編碼導致發送失敗
  • 修正 Telegram 通知內容直接原封不動接在 URL 查詢字串後面送出、從未做過 URL 編碼,導致訊息內含中文或換行字元時請求本身就是錯的(改為透過 POST + JSON 傳遞訊息內容)
🔧 其他改善(5 項)
舊版設定檔匯入訊息合併顯示
  • 首次啟動同時偵測到舊版 config.jsonsn_list.txt 兩份待匯入的舊檔時,原本會各自獨立印出一行匯入訊息,現在合併成一行顯示,訊息更精簡
更新檢查改查詢客製版自己的 GitHub repo
  • 「檢查最新版本」改為查詢客製強化版自己的 GitHub repo(1476523/aniGamerPlusBeta),

    不再比對官方 miyouzi/aniGamerPlus 的版本號(兩者版號體系不同,比對沒有意義)
修正版本比較邏輯避免誤判成倒退
  • 同時修正版本比較邏輯,避免未來版號規則調整時被誤判成「倒退」
環境偽裝設定欄位標籤精簡置中,移除舊版取得UA/ja3.zone按鈕
  • 「設定」頁「環境偽裝設定」區塊的 Cookie/UA/JA3/Akamai 欄位標籤精簡並置中排版,移除舊版「取得當前UA」(其實只是回填瀏覽器自己的 UA,

    容易讓人誤會跟下方 Cookie/JA3/Akamai 是同一個瀏覽器)與「前往 ja3.zone/check 採集指紋」外部連結按鈕,改由上方「快速取得」按鈕統一處理
IMPORT_CONFIG_LABEL_MAP 補上先前遺漏的中文標籤欄位
  • 讀取其他版本設定檔比對工具(IMPORT_CONFIG_LABEL_MAP)補上先前遺漏中文標籤的欄位(鎖定會員帳號下載、劇集名補零、解析最大重試次數/延遲秒數、阻止訪客下載)
📦 版本(1 項)
版本號由 v25.1.7 調整為 v25.1.8
  • 版本號由 v25.1.7 調整為 v25.1.8

完整變更歷史(v24.6 → v25.1.7)請參閱先前的 release notes。

如果喜歡的可以按下 Star 來表示喜歡

可以給予咖啡表示支持

Buy SH A Coffee

v25.1.7

Choose a tag to compare

@1476523 1476523 released this 27 Jul 10:04
0b1496b

v25.1.7

延續 v25.1.6,本次修正手動任務的併發控制與 cookie 失效處理,並改善手動批次下載(下載全部/掃描集數後指定範圍)的進度顯示、失敗重試、終止與救援機制,

讓排程下載能在手動任務進行中插隊優先處理,新增程式啟動時自動清理殘留暫存檔,另外美化了設定頁與登入頁。

共 17 項變更。

🆕 新功能(7 項)
手動批次下載進度視窗與清單顯示標題化
  • 手動「下載全部」/「掃描集數」後勾選指定範圍下載時,送出後會跳出進度視窗,

    列出這批要下載的所有集數(顯示掃描到的番劇名稱與集數,不再只顯示 sn 數字)、個別即時進度,以及整體進度條;

    「重新檢查所有排程更新」的下載清單也一併改為顯示標題而非 sn
失敗清單與個別/整批重試按鈕
  • 過去單一集數重試 3 次仍失敗就會直接從進度列表消失、且無法再次嘗試,作品集數一多、中間幾集連續踩到裝置驗證異常等暫時性錯誤就容易被永久放棄且不易察覺。

    現在重試 3 次後最終放棄的集數會額外列在下載清單下方的「失敗清單」中(同樣可捲動),

    每一項名稱後方都有獨立的「重試」按鈕(只重新嘗試那一集),旁邊另有「重試所有失敗項目」按鈕可一次重試整份失敗清單;

    主清單維持顯示狀態文字,不受影響,仍在自動重試中(狀態顯示「失敗! 重啓中」)的集數不會被算進失敗清單
「顯示目前工作」按鈕,重新叫出批次任務進度畫面
  • 新增「顯示目前工作」按鈕(「手動添加任務」視窗內,提交按鈕左側,

    只在有批次任務正在進行時才會出現):不論是 aniGamerPlus.exe 意外關閉後重啟自動續跑、瀏覽器分頁意外關閉、還是不小心點掉了進度視窗,都能透過這顆按鈕重新叫出目前手動批次任務的進度畫面
「終止任務」按鈕
  • 新增「終止任務」按鈕(進度視窗內,關閉按鈕左側):不會強制中斷正在下載中的那一集(避免中途砍斷連線/寫檔造成半殘檔案),

    已經在下載中的集數會自然跑完並正常標記完成或失敗,尚未開始下載的集數會被標記為「已取消」,不提供重試
手動批次任務期間,排程下載可插隊優先處理
  • 手動批次任務進行期間,若排程檢查(含自訂排程、「重新檢查所有排程更新」)偵測到新更新,現在會優先處理:目前正在下載中的那一集手動任務讓它下載完,

    但尚未開始下載的集數會先暫停(顯示「已暫停(排程下載優先處理中)」),把並發名額讓給排程下載,處理完後手動任務自動恢復。

    過程中網頁會跳出「偵測到排程更新,優先處理中」的提示,這個提示沒有任何關閉方式(不能點掉、按 Esc 或點畫面外側都不會消失),會在排程下載處理完成後自動收起
程式啟動時自動清理殘留暫存檔
  • 下載途中若遇到意外中斷(當機/斷電/被強制關閉,尤其是還沒有目前這套重試機制的舊版本),temp 目錄下會留下當時尚未清理的殘留:下載到一半的 <sn>-downloading-by-aniGamerPlus 資料夾(m3u8/加密金鑰/分段暫存),

    以及合併前後、檔名帶有 .MERGING..DOWNLOADING. 的暫存影片檔。

    現在程式每次啟動時都會自動清理這類殘留。

    由於 temp_dir 可被使用者自訂成任意現存目錄,這裡刻意只刪除認得出來、確定是 aniGamerPlus 自己建立的殘留物(依上述命名規則判斷),

    不會整個清空 temp_dir,避免萬一該設定被指向其他目錄時誤刪不相干的檔案
下載目錄/暫存目錄新增「瀏覽...」目錄選擇視窗
  • 「下載目錄」「暫存目錄」輸入框右側新增「瀏覽...」按鈕:點擊會開啟一個目錄選擇視窗,

    逐層點擊瀏覽伺服器上(執行 aniGamerPlus.exe 那台機器)的資料夾並選定路徑寫回輸入框(瀏覽器基於安全性無法直接跳出原生資料夾選擇視窗讀取伺服器端路徑,所以採用這種常見於自架網頁應用程式的做法)。

    開啟時會直接嘗試前往輸入框目前已填的路徑,若該路徑還不存在(例如尚未建立過的下載目錄),

    會自動往上找最近一個確實存在的上層目錄開始顯示,並用溫和的提示(「已設定的目錄不存在」)告知,不會跳出嚇人的技術性錯誤訊息;

    為了安全,系統磁碟機(通常是 C:\)不開放列出完整目錄樹(避免看到 Windows/Program Files 等系統資料夾,

    尤其 Dashboard 可能開放外部存取),最上層畫面只提供「桌面」「下載」兩個常見安裝位置的捷徑與其他磁碟機,不顯示 C:\ 本身;

    即使 aniGamerPlus 剛好直接安裝在 C:\ 或其他系統磁碟機根目錄下,往上尋找存在目錄時也不會不小心繞過這個限制、暴露完整系統磁碟機目錄樹;

    瀏覽時會自動過濾隱藏/系統資料夾(例如 $RECYCLE.BINSystem Volume Information);

    磁碟機根目錄(例如 D:\)也補上「上一層」可以回到最上層畫面
🐛 BUG 修正(6 項)
手動任務未沿用全域並發號誌,不受下載冷卻與並發數限制
  • 修正手動任務(Web 控制臺「下載全部」「掃描集數」後送出的批次/單集任務、以及程式啟動時還原上次意外中斷的手動任務)會用使用者於表單挑選的執行緒數重建全域下載並發號誌,使手動任務不受設定檔「下載冷卻時間(秒)」與「最大並發下載數」限制、並讓正在進行中的排程下載執行緒失去正確的並發數統計;

    改為手動任務一律沿用程式啟動時依設定檔建立的全域並發號誌,與排程自動下載共用同一組「最大並發下載數」與「下載冷卻時間」限制。

    獨立的命令列一次性執行(--thread_limit 參數)不受影響,仍可自訂執行緒數
Cookie 刷新搶號落敗的執行緒誤刪 cookie.txt,導致其他任務失敗
  • 修正高併發情境下多個執行緒同時搶登入 cookie 刷新名額、其中落敗的執行緒會把 cookie.txt 整個更名為 invalid_cookie.txt 移走,

    導致其他仍在下載中的執行緒存取 cookie.txt(例如記錄修改時間用於除錯日誌)時遇到「系統找不到指定的檔案」而直接任務失敗的問題:這類「搶刷新名額落敗」情況改為只重置記憶體中的 cookie 快取、保留原始檔案不刪除,讓後續請求可重新讀取同一份 cookie 繼續嘗試;

    cookie.txt 內容本身確定損毀(空白檔案)時仍會照舊更名隔離
任務頁「添加手動任務」彈窗是舊版複製品,功能與設定頁不同步
  • 修正「任務」頁(monitor.html)的「添加手動任務」彈窗是一份從未同步更新的舊版複製品:缺少「更改名稱」欄位、「掃描集數」按鈕與「顯示目前工作」救援按鈕,

    且提交邏輯是獨立寫死的舊版 JS(呼叫 readManualConfig() 等函式與「設定」頁各自維護一份),送出批次下載也不會跳出進度視窗。

    改為與「設定」頁共用同一份 aniGamerPlus.js,兩個入口功能完全一致;

    同時修正共用的 renderJson() 在非完整設定頁(如任務頁)缺少對應欄位時會整個中斷執行的問題
排隊等待並發名額期間,番劇名稱顯示被 sn 佔位字串蓋掉
  • 修正排隊等待並發名額期間,番劇名稱+集數的顯示會被底層「已提交, 排隊中」階段的 sn 佔位字串蓋掉、要等真正開始下載才會換回正確名稱的問題
其他集數下載中點擊重試成功後,網頁誤將整批標記為已完成
  • 修正在其他集數仍在下載中時點擊重試,該集重試成功後網頁會錯誤地把整個批次標記為已完成、停止更新進度,導致畫面卡在舊狀態、看不到其餘仍在下載中集數後續進度的問題
批次任務中斷後重啟還原會重複下載已完成的集數
  • 修正批次類手動任務(下載全部/指定範圍)意外中斷(當機/斷電/被強制關閉)後重啟還原時,

    會整批重新從頭下載、當機前已下載成功的集數也會被重複下載一次的問題:現在每一集下載成功後就會即時記錄進 manual_batch_tasks.json

    重啟還原時會跳過已經記錄下載成功的集數,只重新嘗試當機當下仍在下載中或已放棄的集數
🔧 其他改善(3 項)
進度視窗不會因誤觸畫面外側或按 Esc 而意外關閉
  • 進度視窗也改成跟「重新檢查所有排程更新」一樣,不會因為誤觸畫面外側或按 Esc 而意外關閉,需明確按下關閉鈕才會收合
設定頁區塊改為可摺疊收納
  • 「代理設定」「通知設定」「其他」三個區塊改成可摺疊收納,預設收合,點擊標題即可展開/收合,畫面更精簡;

    「路徑設定」「下載設定」維持展開不變。

    「通知設定」裡的 Telegram 通知/Discord 通知也各自再包一層可摺疊子區塊,方便未來新增更多通知方式時不會讓這個區塊越長越長
導覽列文字更名與品牌風格統一
  • 導覽列文字更名:「aniGamerPlus控制臺」→「aniGamerPlus 客製強化版 控制臺」、「自動模式設定」→「設定」、「任務監控中心」→「任務」、「sn_list」→「排程」、「手動添加任務」彈窗標題→「添加手動任務」;

    導覽列品牌名稱改成跟登入頁一樣的「主標題+副標題」兩行字型設計(顏色/粗細也與登入頁的「登入」標題統一),「登出」改成跟「添加手動任務」同樣的按鈕樣式,改用紅色;

    登入頁上方新增置中的「aniGamerPlus / 客製強化版 控制臺」品牌標題,並縮小與下方登入表單間的留白
📦 版本(1 項)
版本號由 v25.1.6 調整為 v25.1.7
  • 版本號由 v25.1.6 調整為 v25.1.7

完整變更歷史(v24.6 → v25.1.6)請參閱先前的 release notes。

如果喜歡的可以按下 Star 來表示喜歡

可以給予咖啡表示支持

Buy SH A Coffee