以官方 miyouzi/aniGamerPlus v24.6 原始碼為基準的客製修改版本,目前版本為 v25.2.5。
本文件整理與官方 v24.6 的完整功能差異、新功能用法與好處,以及修正的 BUG/缺陷,方便使用者評估是否要切換使用。
官方 v24.6 之後自行發布的其他更新內容不包含在本次比較範圍內,以下僅列出本客製版相對於 v24.6 的變更。
📖 想了解 v25.2.4 新增的公告模糊時段解析/「自訂時間範圍」處置方式怎麼用? 請參閱 使用教學:公告模糊時段解析與自訂時間範圍。
📖 想了解 v25.2.3 新增的 Telegram 通知重試機制怎麼用? 請參閱 使用教學:Telegram 通知重試機制。
📖 想了解 v25.2.2 新增的「機動調整異動後自動重新發送每日新番通知」怎麼用? 請參閱 使用教學:機動調整異動後自動重新發送每日新番通知。
📖 想了解 v25.2.1 新增的登入設定/目錄喜好路徑/路徑無法存取處理/版本更新檢查/重新檢查排程更新怎麼用? 請參閱 使用教學:登入設定/路徑無法存取處理/版本更新檢查/重新檢查排程更新。
📖 想了解 v25.2.0 新增的「公告」面板/「每日新番通知」/「掃描集數」快速選取怎麼用? 請參閱 使用教學:公告面板/每日新番通知/掃描集數快速選取。
📖 想了解 v25.1.9 新增的「通知模板自訂/發送歷史」怎麼用? 請參閱 使用教學:通知模板自訂與發送歷史。
📖 第一次使用,或想了解 v25.1.8 起設定改存進
aniGamer.db資料庫後該怎麼操作? 請參閱 使用教學:aniGamer.db 資料庫化設定完整指南,內含新使用者上手步驟、舊使用者升級須知,以及如何匯出設定改回官方版。
一、新功能與改善
1. 反爬蟲與連線架構升級
原本 v24.6 使用的 pyhttpx 套件已停止維護。
本版改用 curl_cffi 重寫底層連線層,
並統一套用到裝置驗證、token 取得、影片解鎖等所有 Web API 請求,避免同一個下載流程中前後出現不一致的連線指紋而被判定為異常行為。
| 功能 | 用法 | 帶來的好處 |
|---|---|---|
自訂 ja3 / akamai 指紋 |
Dashboard 設定頁的「環境偽裝設定」區塊,或直接編輯 config.json 的 ja3 / akamai 欄位。到 ja3.zone/check(用你平常拿 cookie 的同一個瀏覽器打開)取得字串後貼上,兩個欄位必須同時填寫才會生效,只填一個會顯示警示並自動退回內建指紋 |
讓連線指紋貼近真實瀏覽器,比 curl_cffi 內建的固定罐頭指紋更不容易被大量使用者共用、集體被標記 |
| 裝置 ID 持久化 | 無需操作,程式自動產生後存進 aniGamer.db(v25.1.8 起改由資料庫儲存,之前為根目錄的 device_id.txt),之後每次下載/重試都沿用同一組 |
v24.6 每次下載或重試都會跟伺服器要一組新的裝置身分,短時間內產生大量「不同裝置」的異常使用紀錄;持久化後大幅降低被風控盯上的機率 |
⚠️ 說明:以上為連線架構層級的強化,不代表已徹底解決 cookie 過期問題——curl_cffi 版本更新滯後、與官方防護策略的長期拉鋸仍可能造成 cookie 提前失效,此問題仍在觀察與處理中,不列入下方「BUG 修正」範圍。
2. 檔名自動清理
| 項目 | 說明 | 減少的問題 |
|---|---|---|
| 清除殘留標籤 | 標題尾端多餘的 [...] 標籤(例如 [年齡限制版])自動清除,支援多層疊加標籤同時清除 |
v24.6 會把這些標籤原封不動存進檔名,造成檔名冗長或和其他集數命名不一致 |
劇場版不再加註 [電影] |
自動判斷劇場版類型後不再附加標記 | 避免劇場版檔名與其他正篇作品命名風格不一致 |
特別篇不再加註 [特別篇] |
同上 | 同上 |
3. `sn_list.txt` 排程功能強化
⚠️ sn_list.txt在這裡指的是排程清單使用的語法格式(Dashboard「排程」頁面顯示與編輯的追蹤作品清單)。
這份清單自 v25.1.8 起就已經改存進aniGamer.db(v25.2.0 起更進一步逐行正規化),
磁碟上的sn_list.txt檔案只在從更舊版本升級時用來做一次性匯入,程式執行期間不會再實際讀寫這個檔案。
下文沿用sn_list.txt這個名稱單純是因為語法格式沒有改變。
新增自訂星期/時間排程語法,格式為 *星期* $HH:MM$,兩者必須同時填寫才生效,例如:
49937 <女性向遊戲世界對路人角色很不友好 第二季> *五* $23:30$ # 每週五23:30才主動檢查
用法與好處:加了這個標籤的項目,會被獨立移出「每次全數檢查」的隊伍,改由專屬背景執行緒只在每週五 23:30 起算 10 分鐘的視窗內主動檢查一次。
對於固定時間更新的番剧,可以:
- 避免這類項目繼續被排進逐一輪詢的隊伍,拖慢排程清單項目較多時其他作品的檢查間隔
- 避免在非更新時段對伺服器發出無意義的重複請求
其他強化:
| 項目 | 說明 |
|---|---|
| 同行重複標籤偵測 | 同一行內 <>、**、$$ 標籤重複出現時視為設定錯誤,該標籤會被忽略並顯示警示,避免誤判排程或改名規則 |
| sn 移除後自動清資料庫 | 當某個 sn 從排程清單移除、且沒有其他項目仍在追蹤同一作品時,自動清除該作品在 aniGamer.db 中的所有集數紀錄(僅清資料庫紀錄,不會刪除已下載的檔案),避免日後改番號重新追蹤時被舊紀錄誤判為「已下載過」而跳過 |
4. Web 控制面板(Dashboard)
| 功能 | 用法 | 好處 |
|---|---|---|
| CSRF 防護 | 無需操作,/uploadConfig、/manualTask、/sn_list 等會驗證 X-Requested-With 標頭 |
降低面板對外開放時被第三方網頁誘導發出惡意請求的風險 |
| 未設密碼時的警告 | 面板開放外部訪問但未啟用密碼保護時,啟動時主動顯示警告 | 提醒使用者避免面板在無密碼保護下直接暴露在公網 |
| 「下載雙語版本」開關 | 手動新增任務時勾選(預設關閉) | 開啟後可排除中文配音/中文電影等額外語言版本,避免重複下載不需要的語言版本,節省儲存空間與頻寬 |
| 任務進度條更新頻率優化 | 無需操作 | WebSocket 推送頻率由 1 秒優化為 0.3 秒,進度顯示更即時、不再有卡頓感 |
| 修繕早期網頁文件:自訂登入頁 | login.html/register.html 原本是專案裡從未被路由接上的早期遺留文件,密碼保護實際上一直是瀏覽器原生 HTTP Basic Auth 彈出視窗;開啟 dashboard.BasicAuth 後訪問面板會導向真正接上功能的自訂登入頁輸入帳號密碼(沿用 dashboard.username/dashboard.password),登入狀態以 session 保存 |
取代原本瀏覽器原生彈出的 HTTP Basic Auth 視窗,體驗更一致;登入狀態伺服器端保存,重啟程式不會被強制登出 |
| 完善早期代碼:Discord/Telegram 通知設定頁 | Discord/Telegram 通知的推送邏輯本來就是早期就寫好的功能,但 Dashboard 網頁一直沒有對應設定介面,只能手動編輯 config.json;這次補上「通知設定」區塊,可直接開關並填寫 Bot Token/Chat ID/Webhook URL |
不用再手動編輯 config.json;Token/Webhook 等敏感欄位採遮罩顯示,不會在網頁明文回顯 |
| Cookie 編輯欄位 | 設定頁直接貼上 Cookie 並保存,遮罩顯示 | 不用再手動編輯根目錄的 cookie.txt;保存後自動觸發裝置ID過期偵測重新申請 |
| 讀取其他版本設定檔 | 選擇一份舊 config.json,比對出跟目前設定不同的項目逐一列出,預設不勾選,自行勾選要匯入的項目 |
換機或還原備份時不用逐欄位手動比對搬移;高風險欄位(影響面板連線/登入)會加上 ⚠ 二次確認 |
| 取得當前新番更新時間 | 「其他」區塊按鈕,線上查詢排程清單各作品最新 3 集的上架時間,換算成候選星期+時間供逐項選擇套用/自訂/跳過 | 不用再手動推算連載新番的固定更新時段,自動排程功能設定更省力 |
| 資料庫整頓(v25.1.6 改為勾選確認) | 「其他」區塊按鈕,線上比對各作品完整集數 sn 清單後,列出疑似不再追蹤的候選項目讓使用者勾選要清除的項目,頂部有「全選」勾選框,清單可捲動 | 不再是掃描完就自動刪除;比對改用 sn 交集判斷(而非作品名稱字面),使用者事後改了 <重新命名> 標籤或站方調整 [年齡限制版] 等分類標籤也不會被誤判成孤兒紀錄刪除,確認鍵按下才會真正執行刪除,多一層人工把關 |
| 手動任務重新命名 | 手動新增任務時,「影片鏈接」下方的「更改名稱(可空)」輸入框填入想要的名稱 | 原理與排程清單的 <重新命名> 標籤相同,留空用預設名稱,填寫後單集/最新一集/最後一集/全部/掃描集數勾選下載都會套用,不用先把作品加進排程清單才能改名 |
| 手動任務暫存紀錄 | 無需操作,提交時寫入 aniGamer.db(v25.1.8 起改由資料庫儲存,之前為 manual_single_tasks.json/manual_batch_tasks.json),任務終結時移除 |
程式當機、斷電或被強制關閉時不會悄悄遺失手動任務,啟動時自動重新提交上次未完成的項目 |
| 掃描集數 | 手動新增任務時輸入連結後按「掃描集數」,線上查詢完整集數清單列成勾選框,依「本篇」/「中文配音」/「特別篇」分區 | 取代原本只能整批(全部/最後一集/最近上傳)下載的模式,可以精準勾選要下載的集數 |
| 掃描集數:大量集數自動摺疊 | 單一分類集數 > 20 話時,無需操作,自動切成每 100 話一個可摺疊區塊,標題即時顯示「已勾選 N」 | 長篇作品(數百集)也不會把版面撐爆按不到下方的提交按鈕;收合狀態下也能知道裡面有沒有勾選項目 |
| 任務監控頁導覽列補齊 | 無需操作,導覽列補上 sn_list、添加手動任務兩個項目,並修正一個連到不存在彈窗的死連結,也修正了跟「自動模式設定」頁字體大小比例不一致的問題 | 跟「自動模式設定」頁一致,不用切回設定頁才能操作這兩項功能 |
| ja3/akamai 自動相容性檢測與修正 | 無需操作,程式啟動與 Dashboard 存檔自訂 ja3/akamai 時自動檢測並修正其中會讓 curl_cffi 崩潰的 TLS 擴展編號(例如新版瀏覽器常見的擴展 41) |
避免新版瀏覽器採集到的指紋讓下載任務直接失敗;連請求當下才發生的極端情況也有自動退回內建指紋重試的防護 |
| 登出穩定性修正 | 無需操作,登出改成只有請求真正成功才跳轉頁面 | 修正透過反向代理/Cloudflare Tunnel 對外開放時,登出按鈕可能因為請求被中間層擋下而「按了沒反應」的問題 |
| Dashboard 靜態資源快取破壞 | 無需操作,CSS/JS 資源網址自動帶上版本號查詢字串 | 透過 Cloudflare 等會依副檔名快取靜態資源的服務對外開放時,更新版本後不用再手動去後台清快取,瀏覽器與邊緣節點會自動抓到最新檔案 |
| 修正偵測不到 Dashboard 資料夾時整支程式崩潰 | 無需操作,Config.py 內部處理設定的兩個函式不再共用同一個 dict 物件 |
修正只複製 .exe 忘記一併帶 Dashboard 資料夾時,程式會因為內部設定物件互相污染、working_dir 等欄位被誤刪而直接 KeyError 崩潰、完全無法啟動的問題 |
| 重新檢查所有排程更新(v25.1.5) | 「其他」區塊按鈕,執行前明確告知會暫停所有自動檢查直到下載完成;按下後立即對排程清單全部項目重新檢查一次更新並自動排入下載,進度視窗提供總進度條+可捲動的個別項目清單 | 程式離線一段時間、或排程檢查剛好沒偵測到更新,導致漏抓的更新不用再等到下次自動檢查或下週同一排程時段,一鍵手動補齊 |
| 目錄瀏覽器(v25.1.7) | 「下載目錄」「暫存目錄」輸入框右側「瀏覽...」按鈕,點擊逐層瀏覽伺服器(執行 aniGamerPlus.exe 那台機器)上的資料夾並選定路徑;系統磁碟機不開放列出完整目錄樹,最上層只提供「桌面」「下載」兩個捷徑與其他磁碟機作為起點 | 不用再手動輸入或猜測伺服器端的完整路徑;為安全著想刻意限制看不到 Windows/Program Files 等系統資料夾(尤其 Dashboard 可能對外開放) |
| 設定頁摺疊收納+登入頁品牌標題(v25.1.7) | 「代理設定」「通知設定」「其他」三區塊改為可摺疊、預設收合,點標題展開/收合;導覽列與登入頁重新命名並統一品牌標題設計(「aniGamerPlus / 客製強化版 控制臺」) | 不常用的設定不用一直佔畫面空間,一般設定頁更精簡;品牌識別與命名更清楚一致 |
| 手動批次下載進度顯示+失敗清單重試(v25.1.7) | 「下載全部」/「掃描集數」後勾選範圍送出,會跳出進度視窗列出這批集數(顯示番劇名稱與集數,不再只顯示 sn)+個別進度+整體進度條;重試 3 次仍失敗的集數會列在下方「失敗清單」,個別項目可單獨「重試」,也可「重試所有失敗項目」一次全部重來 | v24.6 沒有這類批次進度視覺化;本版過去版本則是重試 3 次失敗就從清單消失、無法再重試,容易被忽略而永久放棄,現在失敗集數清楚可見且能個別或整批重試 |
| 手動任務救援/終止、排程下載插隊(v25.1.7) | 「顯示目前工作」按鈕(有批次任務進行中才出現)可隨時重新叫出進度視窗,即使程式重啟、分頁關閉或誤觸關閉進度視窗都能找回;「終止任務」按鈕會讓進行中的那一集正常跑完、其餘尚未開始的集數標記為已取消;手動批次任務進行中若排程檢查找到新更新,會自動暫停手動任務中尚未開始的集數、優先處理排程下載,處理完自動恢復並跳出不可關閉的提示 | v24.6 沒有手動批次任務的概念;本版確保手動任務不會因為分頁關掉或程式重啟就找不回進度、也不會因為誤按而白白中斷正在下載的那一集,並讓排程更新優先於手動下載,避免互搶並發名額 |
| 程式啟動時清理殘留暫存檔(v25.1.7) | 無需操作,temp 目錄下當機/斷電/被強制關閉留下的殘留(下載到一半的 <sn>-downloading-by-aniGamerPlus 資料夾、合併前後的 .MERGING./.DOWNLOADING. 暫存檔)每次啟動時自動清理,只刪除認得出來的殘留物,不會整個清空使用者自訂的 temp_dir |
v24.6 遇到意外中斷不會自動清理暫存,久了會佔用大量磁碟空間;本版自動打掃,同時刻意避免誤刪使用者目錄下其他不相干的檔案 |
| 手動任務並發/冷卻與 cookie 穩定性強化(v25.1.7) | 無需操作,手動任務(單集/批次)一律沿用程式啟動時依設定檔建立的全域並發號誌,與排程下載共用同一組「最大并發下載數」與「下載冷卻時間」限制(不再各自為政搶用資源);高併發搶登入 cookie 刷新名額時落敗的執行緒改為只重置記憶體快取、保留 cookie.txt 檔案本身,避免其他執行緒讀取時遇到「檔案不存在」而任務失敗 |
v24.6 沒有手動批次任務與並發號誌共用機制;本版讓手動與排程下載更不容易互相搶資源或因競爭條件而莫名任務失敗 |
| 快速取得 Cookie/UA/JA3/Akamai(v25.1.8 新增) | 「設定」頁「環境偽裝設定」區塊「快速取得」按鈕:「Cookie」會開一個乾淨的獨立瀏覽器視窗導向動畫瘋首頁,登入後按視窗上的獨立控制面板按鈕即自動填回欄位;「UA/JA3/Akamai」則導向 ja3.zone/check,等頁面載入完成按按鈕即三個欄位一次擷取填入 | 不用再自己開發者工具複製 Cookie、或手動前往 ja3.zone/check 逐一複製三個欄位;獨立乾淨的瀏覽器設定檔不受你平常瀏覽器登入狀態干擾,且三者保證來自同一個瀏覽器核心指紋一致;打包後的 .exe 也能直接使用 |
| 通知類別開關(v25.1.8 新增) | 「設定」→「通知設定」→「通知類別」:Telegram/Discord 共用同一組「哪些事件要推播」開關,涵蓋下載完成/失敗(區分手動任務與排程任務)、監視公告事件(停止/延後/加更/其他)、系統事件(Cookie失效/裝置驗證異常/新版本),共 11 項可獨立開關 | v24.6 只有「開/關」Telegram 或 Discord 兩個開關,只要開啟就會收到所有種類通知;本版可依需求只保留想看的事件通知,避免通知過多變成噪音 |
| Telegram/Discord 測試工具(v25.1.8 新增) | Telegram 區塊「發送測試訊息」/「取得Chat ID」按鈕、Discord 區塊「發送測試訊息」按鈕:可用輸入框裡「尚未儲存」的 Token/Webhook 直接測試 | 不用先存檔、等到真的有下載完成才知道 Token/Webhook 有沒有設定對;自動偵測到的 Chat ID 會直接記住並切換為手動模式,之後不需每次都重新查詢 |
| 啟動緊急修復機制(v25.1.8 新增) | 無需操作,Web 控制面板啟動時偵測到 port 被佔用,會在程式資料夾自動產生 emergency_fix.txt,用記事本打開依說明修改 dashboard_port 後重啟即自動套用並刪除該檔案 |
設定改存進 aniGamer.db 後一般使用者無法直接開 SQLite 資料庫修改;這個機制讓「port 被佔用」這類啟動異常仍可以不求助任何工具、單靠記事本自行排除 |
| 通知模板自訂(v25.1.9 新增) | 「設定」→「通知設定」→「通知模板」:11 種通知類別(下載完成/失敗、公告事件、系統事件)都能自訂實際發送的文字內容,Telegram 版可用格式標籤(粗體/斜體/程式碼/引用/超連結/防劇透等),儲存時自動轉換成對應的 Discord Markdown 語法;文字中可插入 @animation_name@/@episode@ 等通用字符帶入動態內容;「預覽」可即時模擬 Telegram 訊息氣泡與 Discord 嵌入卡片外觀 |
v24.6 及本客製版 v25.1.8 以前,通知文字都是寫死在程式碼裡的固定格式,無法客製化措辭或格式;本功能只需維護一份 Telegram 模板即可同時套用到兩個管道,不用手動維護兩份語法不同的文字 |
| 通知發送歷史(v25.1.9 新增) | Telegram/Discord 通知設定區塊「查看發送歷史」按鈕,可依類別/子類別篩選,顯示每則通知實際發送的內容、時間與成功/失敗結果(失敗附錯誤原因) | 通知沒收到時可直接查歷史紀錄判斷是「該類別開關關閉」「送出失敗」還是「其實有送出成功」,不用憑印象猜測或重新觸發一次事件測試 |
| 設定頁控制項寬度統一/導覽列置中/通知測試結果改用彈窗(v25.1.9 新增) | 無需操作,「設定」頁開關/下拉選單改用 flex 版面統一計算寬度;導覽列在「設定」「任務」頁改為置中對齊頁面內容寬度;Telegram/Discord「發送測試訊息」「取得Chat ID」的結果改用自訂彈窗顯示 | 修正過去不同欄位開關寬度/間距略有落差、導覽列靠左對齊與頁面內容留白不對稱的問題;瀏覽器原生 alert() 彈窗風格與其餘頁面不一致,改用彈窗後視覺統一 |
| 公告面板(v25.2.0 新增) | 導覽列「排程」右側新增「公告」按鈕(設定頁與任務頁皆有):「歷史公告」捲動清單顯示每則偵測到的公告與比對到的作品/推算集數/狀態判斷;「操作處置」可對目標時間尚未過去、且尚未實際完成下載的公告手動指定或覆蓋系統自動判斷的處置方式(暫停/提前/延後/同時更新、自訂時間、忽略、下架),確認後鎖定不受下次檢查影響;「機動調整」唯讀顯示目前生效中的臨時排程調整 | v24.6 與本客製版 v25.1.9 以前,「監視公告」的偵測與處置結果只寫進程式目錄下的檔案/日誌,無法在網頁上查看或干預;本功能讓公告處理全程可視化、可人工覆蓋 |
| 每日新番通知(v25.2.0 新增) | 「設定」→「通知設定」→「通知類別」新增開關(預設開啟),每天 00:00 自動彙整並發送一則通知:本日依排程清單自訂排程要更新的作品清單(附線上查詢的預計集數)+監視公告機動調整今天生效中的異動,皆可透過「通知模板」自訂文字格式 | v24.6 與本客製版 v25.1.9 以前完全沒有主動彙整的概念,只能等各別事件通知一則則累積;本功能一次看到「今天有哪些番要更新」,不用自己對照排程清單回想 |
| 掃描集數全選/反選/取消/Shift+拖曳快速選取(v25.2.0 新增) | 「掃描集數」的本篇/中文配音/特別篇各分類標題旁新增全選/反選/取消按鈕(只作用於該分類);另可在勾選框上按住 Shift 並按下滑鼠左鍵決定這次拖曳要勾選還是取消勾選,拖曳滑過的每一格套用同一結果 | 長篇作品只想跳過中間零星幾集時,不用逐一點擊或全選後再一個個手動取消 |
| 「取得當前新番更新時間」結果分區顯示(v25.2.0 調整) | 無需操作,查詢結果自動分成「時段不同, 需要確認」與「時段相同, 不需修改」兩個各自獨立捲動的清單 | 追蹤作品數量多時,不用滑過一堆本來就不需要處理的項目才找到真正要看的那幾筆 |
| 排程清單逐行正規化(v25.2.0 調整) | 無需操作,排程清單(sn_list.txt 格式,v25.1.8 起已存進 aniGamer.db,但當時整包塞成一個字串欄位)進一步改成逐行存進 aniGamer.db(追蹤項目/單獨註解行/空白分隔行/星期標籤各自一列),排程頁面文字編輯器仍以 sn_list.txt 格式的原始文字為權威顯示與編輯介面 |
搭配下方 aniGamer.db 資料表整理一併達成「每一列資料都能直接用 DB 瀏覽器看懂、直接修改」,不用再解一份整包塞成字串的欄位 |
| 「操作處置」選擇指定排程(v25.2.1 新增) | 公告內容無法自動比對到追蹤作品(狀態「無法判斷」)的項目,作品名稱欄位下方新增下拉選單,可從排程清單手動指定對應作品後再選處置方式送出 | 公告標題跟排程清單命名差異太大、系統自動搜尋比對失敗時,不用等它自然過期,可直接手動指定 |
| aniGamerPlus 登入設定(v25.2.1 新增) | 「設定」→「其他」按「aniGamerPlus登入設定」,填入新帳號密碼即可更新登入本控制台用的帳號密碼(dashboard.username/password),密碼欄位不會預先帶出目前設定值 |
不用再手動編輯設定檔;下次登入立即套用新帳密,目前已登入的狀態不受影響 |
| 目錄瀏覽器喜好路徑(v25.2.1 新增) | 目錄瀏覽器最上層新增使用者自訂的「喜好路徑」(🩷),可把目前路徑輸入框內容存成捷徑、也可個別刪除;儲存時不檢查連線性 | 網路磁碟(UNC 路徑)沒有磁碟機代號可以逐層瀏覽,加了書籤後不用每次手動輸入完整路徑,離線中也不會被移除 |
| 下載目錄/暫存目錄無法存取的處理(v25.2.1 新增) | 網路磁碟連不到時設定頁自動顯示警示條+處理選項(前往修改路徑設定/暫時改用其他路徑/暫時改用本機預設資料夾),並新增「路徑無法存取」通知類別 | v24.6 與本客製版 v25.2.0 以前,連不到會悄悄改存到本機且完全沒有提示,使用者可能好幾天都不會發現檔案沒存到原本設定的位置 |
| 版本更新檢查全面改版(v25.2.1 新增) | 新增「檢查預告版本」開關;除啟動時檢查外每 10 分鐘背景複查一次;有更新時 Dashboard 自動彈窗顯示版本/更新內容,可「略過此版本通知」;導覽列按鈕隨時可重新開啟 | 過去只在啟動時檢查一次、且看不到預告版,網頁上也完全看不到結果,只能翻主控台或通知 |
| 快速取得 Cookie 自動偵測登入成功(v25.2.1 新增) | 「動畫瘋登入設定」自動代填登入後,完成人工驗證(CAPTCHA/2FA)並登入成功,程式自動偵測跳轉結果並觸發取得 Cookie 流程,免手動點擊 | 減少「登入完成後忘記手動按取得Cookie」的操作步驟,驗證過程仍完全由使用者親自完成 |
| 重新檢查排程更新改版(v25.2.1 調整) | 原「重新檢查所有排程更新」改為分階段:先選擇「檢查所有排程」或「檢查指定排程」(勾選清單),檢查完成後逐項選擇「下載」或「標記為已下載」才真正執行;30 分鐘未確認自動取消 | 找到的更新不再自動全部下載,可先確認清單並排除不想重複下載的集數(標記為已下載即可,不影響排程狀態判斷) |
| Cookie/JA3/Akamai 儲存後免重啟即可生效(v25.2.1 修正) | 無需操作,存檔後自動清除裝置ID記憶體快取,下次取用裝置ID時重新判斷是否需要換新(真的過期才會重新申請) | 過去必須重啟程式才會套用新指紋對應的裝置ID,沒照做容易再次觸發裝置驗證異常;過時的「請務必重新啟動」警告已移除 |
| 設定頁版面整理(v25.2.1 調整) | 無需操作,「下載設定」改為可摺疊並整併路徑設定欄位;「其他」按鈕重新排序;Telegram「聊天室ID」改為必填(移除手動指定切換與 getUpdates 自動偵測備援);「匯出設定與排程檔」確認改用頁面彈窗;快速取得後自動儲存 | 操作流程更順、更不容易因為忘記按保存或誤觸開關而卡住 |
| 機動調整異動後自動重新發送每日新番通知(v25.2.2 新增) | 無需操作,當天的「每日新番通知」發送後,若機動調整異動又有變化(監視公告新增/使用者手動調整「操作處置」等),自動重新發送一次更新版,標題附加「機動調整異動更新, 重新發送」提示文字;若沒有變化則不會重複發送 | 過去只在 00:00 發送一次,發送後若公告晚一步出現、或使用者事後手動調整處置,已收到的通知內容就跟實際排程不一致,得自己回頭翻「公告」面板才會發現 |
| 每日新番通知集數預測修正為實際最新集數(v25.2.2 修正) | 無需操作,「本日排程更新清單」與「機動調整」附加的預計集數,改為讀取該作品「本篇」目前實際最新一集再 +1 預測 | 過去查詢對象抓錯,導致無論作品實際更新到第幾集,預計集數永遠顯示成「第02話」 |
| Telegram 通知 Bad Gateway 自動重試/發送歷史手動重試按鈕(v25.2.3 新增) | 無需操作即可享有自動重試(偵測到 Bad Gateway 自動等 3 秒重試,最多 3 次);3 次仍失敗時,「通知設定」Telegram「發送歷史」對應紀錄旁會出現「手動重試」按鈕,按下只再重試 1 次 | 過去 Telegram 伺服器短暫回應 Bad Gateway 就會直接判定通知發送失敗,整則通知(例如每日新番通知)送不出去,也沒有簡單的方式手動再送一次 |
| 通知類別新增「手動任務-已取消」(v25.2.3 新增) | 無需操作,使用者主動終止手動任務時自動改發送這個類別(可在「通知類別」關閉、在「通知模板」自訂文字),跟真正失敗的「手動任務-下載失敗」區分開來 | 過去終止任務後會收到一則「下載完成 0MB」這種自相矛盾的通知,現在改成內容正確反映實際結果的「已取消」通知 |
| 「檢查指定排程」清單排序+「推薦檢查」快速勾選(v25.2.5 新增) | 「重新檢查排程更新」→「檢查指定排程」清單改依星期/時間排序;最上方新增「推薦檢查」區塊,自動列出排程時段落在過去 12 小時內的項目並預設勾選,跟下方完整清單同一部作品的核取方塊會互相同步勾選狀態 | 重新檢查排程更新常常就是為了補抓稍早錯過的更新,不用再自己逐項對照星期/時間才找得到該勾哪些,最常見的用法直接按「開始檢查」即可 |
Dashboard 畫面截圖
v25.2.2 全面重新擷取一輪(開關樣式由 ON/OFF 改成中文「開/關」、下載模式下拉選單改成中文顯示文字等 v25.2.2 UI 變動,
加上「aniGamerPlus登入設定」等 v25.2.1 已經調整過、但先前沒有一併重新擷取的部分,這次一次補齊);畫面內容為模擬資料,不是真實使用者資料。
僅「快速取得 Cookie」控制面板(獨立彈出的原生視窗,不屬於網頁本身)這張沿用 v25.1.9 擷取結果,未重新擷取。
標註「vX.X.X 新增/調整」的是該版本新增或調整的功能,其餘則是既有功能在目前版本下的實際畫面。
5. 排程下載穩定性與批次補救
| 項目 | 說明 | 好處 |
|---|---|---|
| 排程下載失敗自動重試 | 自訂星期/時間排程找到更新並排入下載後,不再視為「本週結束」就不理會;會持續追蹤該集數直到真的下載成功,失敗(例如兩個排程同時觸發裝置驗證異常 code=1007)會自動重新排入隊列重試,最多追蹤 2 小時才放棄 |
修正過去下載途中失敗就再也不會自動重試、必須手動重啟程式才能補下載的問題,排程功能更可靠、不需要人盯著 |
| 重新檢查所有排程更新 | 詳見上方 Dashboard 功能表格與截圖 | 程式離線一段時間導致漏抓更新時,一鍵手動補齊,不用等下次自動檢查或下週同一排程時段 |
6. 打包與部署
- 建立本機 PyInstaller 獨立 exe 打包流程(
aniGamerPlus.exe),免安裝 Python 環境即可直接執行 greenlet/gevent/lxml依賴版本由精確釘選改為下限版本,解決 v24.6 在 Python 3.13 環境下無法安裝依賴的問題- Windows 版偵測到系統
PATH與程式所在目錄都找不到ffmpeg.exe時,自動下載一份放進程式所在目錄(v25.2.2 新增),不用使用者自行前往官方網站下載並手動放置
7. 監視公告:動態排程調整(v25.1.6 新增)
官方動畫瘋首頁上方偶爾會有 class="gossip" 公告,內容多半是「今晚/本週某作品調整更新時間」「本週暫停更新」「合併集數/加更兩集」之類的臨時異動。
這類公告 v24.6 完全沒有對應機制,只能使用者自己留意網站公告再手動處理。
| 功能 | 用法 | 好處 |
|---|---|---|
| 自動偵測並解析公告 | Dashboard「其他」開啟「監視公告」後,每次「更新終了」自動偵測首頁公告,解析今晚/本週時間異動、暫停、暫停+復播、合併集數/加更兩集等狀況 | 不用自己盯著動畫瘋首頁看公告,程式自動幫忙留意 |
| 模糊時段解析+「自訂時間範圍」處置方式(v25.2.4 新增) | 公告只寫「明日白天更新」這類相對日期詞(明日/今晚等)+模糊時段詞(白天/早上/上午/中午/下午/晚上/深夜等),沒有明確 HH:MM 時刻時,自動換算成一段查詢時間範圍並判定為延後更新;「操作處置」也新增「自訂時間範圍」可手動指定開始~結束時間,範圍內每分鐘檢查一次 |
過去這類口語化寫法只能判定成「無法判斷」,得自己換算日期時間手動填「自訂更新時間」;現在能自動辨識並直接套用「本週延後更新」,範圍內持續每分鐘檢查也不用擔心錯過剛好卡在邊界的更新時間 |
| sn 交集比對,不比對名稱字面 | 無需操作,比對作品時透過 search.php 查詢+比較完整集數 sn 清單是否有交集 |
公告、搜尋結果、排程清單三邊的名稱經常不一致(例如站方加了 [年齡限制版],或用 2nd Season 代替 第二季),純比名稱字面容易誤判或漏判,sn 交集判斷不受名稱寫法影響 |
| 動態調整檢查時間,不更動排程清單 | 「機動調整時間」開啟後才會實際套用,暫停/延後/合併集數狀況都只寫入獨立的資料表,不影響排程清單本身 | 使用者手動維護的排程設定不會被覆蓋或搞亂;合併集數/加更兩集時還有雙重保險,30 分鐘後自動複查是否已補齊剩餘集數 |
| 完整歷史紀錄 | 無需操作,gossip_log.jsonl/gossip_disposition_log.jsonl 只增不刪,永久留存公告原文與處置紀錄 |
事後想確認「這則公告當時是怎麼處理的」都能查得到,不會因為只保留最新一筆而找不到證據 |
| 開關預設關閉、有相依限制 | 「監視公告」/「機動調整時間」預設皆為關閉;「機動調整時間」要先開啟「監視公告」才能開,「公告保存天數」也要「監視公告」開啟才能編輯 | 不強迫每個人都要用這個新機制,想用才開;相依限制避免設定互相矛盾(例如只想監看記錄但不要自動調整排程) |
8. 更新檢查改指向客製版自己的 Repo(v25.1.8 新增)
「檢查最新版本」原本比對的是官方 miyouzi/aniGamerPlus 的最新 release 版號,但本客製版版號體系與官方並不一致(例如官方 v24.6 之後可能直接跳到 v25.x,
跟本客製版的 v25.1.x 序號並非同一套編號規則),拿來比較沒有意義,也可能誤導使用者以為官方出了「新版」而去下載跟客製版功能完全不同的官方版。
改為查詢客製強化版自己的 GitHub repo(1476523/aniGamerPlusBeta)最新 release,
並修正版本比較邏輯,避免未來版號規則調整(例如版號世代轉換)時被誤判成「倒退」。
二、修正 v24.6 的 BUG 與缺陷
| 缺陷(v24.6 行為) | 修正後 | 影響範圍 |
|---|---|---|
| 遇到 VIP 限制、地區限制、sn 不存在等不可能重試成功的錯誤時,仍會當成暫時性錯誤重試 | 新增 ForceStopError,判斷為不可重試的致命錯誤時直接終止任務 |
避免無謂浪費重試次數與時間,任務能更快得到明確的失敗結果 |
| 執行緒內未預期的錯誤會直接印出原始 Python Traceback | 新增全域執行緒例外攔截,改為輸出中文提示訊息 | 一般使用者不需要看懂 Traceback 也能知道發生了什麼問題 |
anime.renew() 在重試流程中沒有被 try/except 保護 |
補上例外保護 | 避免這個環節出錯時直接把整個重試流程炸掉 |
Discord/Plex/Telegram 通知失敗時,裸 except: 缺少 as e,記錄錯誤訊息時反而觸發二次 NameError |
補上 as e |
修正前使用者看到的其實是「記錄錯誤時又出錯」的誤導訊息,看不到真正的通知失敗原因 |
get_local_ip() 在裝置無網路連線時拋出 UnboundLocalError |
修正邏輯 | 避免在無網路環境下程式直接崩潰 |
| 主控台輸出含特定 Unicode 字元(例如 GitHub release notes 中的特殊符號)時,會讓整支程式直接崩潰退出 | 修正輸出邏輯,改為安全輸出 | 避免使用者因為官方 release notes 內容而莫名其妙整支程式關閉 |
版本比較邏輯遇到版本號有多個小數點(如 v24.9.10)時會讓更新檢查崩潰 |
修正版本號解析邏輯 | 更新檢查不再因版本號格式而中斷 |
| 自訂星期/時間排程重啟程式時,會把「本週一到今天」所有已設定排程的星期都補檢查一次 | 改為只有排程對應到「今天」且時段已過才補檢查一次,本週其他已過去的天數直接跳過 | 避免重啟後對多個排程時段一次性補發大量檢查請求 |
| 自訂排程若已過期(超過當週視窗),會直接整週跳過、完全不檢查 | 改為無論如何至少檢查一次(仍遵守 SN 解析冷卻時間) | 避免因為程式啟動時機不巧,導致該週排程形同虛設 |
| Dashboard 設定頁存檔後,頁面顯示的欄位(尤其是 ja3/akamai/UA 等)可能因瀏覽器快取沒有即時反映最新設定 | 後端回應加上 Cache-Control: no-store,前端讀取設定時一併禁用快取 |
存檔後頁面顯示與實際設定值保持一致,避免使用者誤以為沒存成功 |
Telegram 通知在尚未偵測到任何與 Bot 的對話紀錄時,直接讀取 getUpdates 回傳陣列的第一筆而未檢查是否為空,觸發 IndexError 卻顯示成「Invalid access token」,誤導使用者去懷疑 Token 本身有問題 |
明確檢查回傳結果是否為空,改為提示「請先在 Telegram 傳送任意訊息給這個 Bot」(v25.1.8) | 不再被誤導性的錯誤訊息帶偏,一眼就知道是還沒跟 Bot 互動過,不是 Token 設錯 |
| Telegram 通知內容直接原封不動接在 URL 查詢字串後面送出,從未做過 URL 編碼,訊息內含中文或換行字元時請求本身就是壞的 | 改為透過 POST + JSON 傳遞訊息內容(v25.1.8) | 中文番劇名稱/集數等通知內容不會再送到一半失敗或亂碼 |
資料庫版本升級(例如 v2.0→v3.0)後,database_version 沒有立即寫回,導致同一次執行期間每次讀取設定都誤判成「尚待升級」而重複印出升級訊息 |
升級完成後立即寫回新版本號(v25.1.8) | 升級訊息只會出現一次,不會反覆洗版 |
| 多條獨立執行緒(主迴圈/自訂排程/重新檢查所有排程更新/監視公告機動調整)同時判斷「這一集是否已在下載中」時沒有鎖保護,可能對同一集數重複啟動下載執行緒(v25.2.2) | 檢查與登記進行中清單改為原子操作 | 避免同一集數被重複下載造成檔案損毀,也避免連續失敗計數因競爭條件漏加而削弱「連續失敗暫停重試」的效果 |
/manualTask 沒有檢查同一個 sn 是否已有手動任務在跑,重複提交會啟動兩個獨立下載並互相覆蓋進度紀錄(v25.2.2) |
提交前檢查是否已有同類型任務處於進行中狀態,有的話拒絕 | 使用者連點兩次提交或瀏覽器重送請求不會再各自跑出一份獨立任務 |
| 分段下載模式合併 ffmpeg 執行結果沒有被檢查,合併失敗(壞分段/磁碟已滿等)仍會被當成下載成功並發出完成通知(v25.2.2) | 補上執行結果檢查,失敗改記為失敗並保留原有檔案 | 讓既有的失敗重試機制能正確介入,不會把不完整的檔案誤標記成功 |
彈幕下載輸出檔案沒有用 with 開啟,中途拋例外不會正確關閉/flush;線上黑名單字組直接串接成正規表達式,字詞含特殊字元會讓整集彈幕下載失敗且每次重跑都重現(v25.2.2) |
輸出檔案改用 with;黑名單字組組成正規表達式前先跳脫特殊字元 |
避免殘缺彈幕檔案,也避免因線上黑名單內容不受控而反覆下載失敗 |
| 監視公告用來加速比對的集數快取一旦建立就永久保留,追蹤中的作品出新一集後,公告可能被誤判成「無法判斷」(v25.2.2) | 快取加上 1 小時有效期,過期自動重新查詢 | 新集數上架後公告比對能在合理時間內正確辨識,不會一直誤判 |
| 「操作處置」的「本週同時更新」沒有驗證公告是否解析出明確時間,沒有時間仍會寫入一筆不會被處理也不會過期的殭屍排程(v25.2.2) | 補上跟「本週提前更新」/「本週延後更新」一致的驗證,沒有時間會提示改用「自訂連續更新時間」 | 避免產生畫面上看不到、系統也不會再處理的殭屍排程 |
Discord 通知模板轉換規則順序有誤,<blockquote> 引用區塊包住跨行的粗體/斜體等格式標籤時,符號會被行首 > 前綴打斷,顯示成沒有正確渲染的裸符號(v25.2.2) |
格式標記改為逐行各自完整包覆,並排在引用區塊規則之前處理 | 引用內容含粗體/斜體等格式時能在 Discord 正確渲染,不再出現裸露的 **/* 符號 |
Config.py/AccountVault.py/GossipDB.py/NotifyDB.py/Gossip.py/aniGamerPlus.py 多處資料庫連線在例外路徑不會正確關閉,其中部分函式共用的互斥鎖(db_locker)甚至會因此永久卡在鎖定狀態(v25.2.2) |
全面改用 contextlib.closing / try...finally 確保連線與鎖在任何例外路徑都會釋放 |
避免資料庫連線緩慢洩漏,也避免因鎖卡死導致下載紀錄讀寫全部停擺、需要重啟程式才能恢復 |
| 「快速取得 Cookie」/「動畫瘋登入設定」彈出的瀏覽器視窗,每次登入動畫瘋都會被要求 reCAPTCHA 驗證,回報者實測手動開無痕視窗登入則不會(v25.2.2) | 瀏覽器啟動參數加上 --incognito,符合回報者實測有效的解法(推測跟這個視窗全程透過 CDP Runtime.evaluate 操作頁面、屬於已知的自動化風險訊號有關,--incognito 本身無法消除這個訊號) |
降低登入時被要求驗證的頻率;效果尚未經過大量實測完全確認,仍屬觀察中 |
| 「發現新版本」通知把 GitHub release notes 全文塞進訊息,內容較長時 Telegram 直接回「message is too long」,整則通知(含版本資訊)完全送不出去(v25.2.2) | 送出前裁成頭尾兩段、中間省略並標明省略字數;另外加一道保險,裁完後若因 HTML 跳脫膨脹仍超過長度上限,會再強制裁到剛好塞得下並補回收尾標籤 | 不管版本更新內容多長,通知一定送得出去;重點(版本號、更新內容頭尾)仍看得到,完整內容可自行到 GitHub 查看 |
動畫瘋停用舊版影片來源 API(ajax/m3u8.php 固定回 404),導致所有作品、所有集數全面無法下載,且跟 Cookie/裝置ID是否新鮮無關(v25.2.3) |
改用網頁播放器目前實際使用的新端點 api.gamer.com.tw/anime/v1/video_src.php,並同步調整回應內容的解析方式 |
恢復所有下載功能正常運作;此為本次最主要的緊急修復項目 |
| 登入 Cookie 刷新節流閥連「套用到當下執行緒自己」都一併節流,被擋下的執行緒會帶著已被伺服器換掉的舊值繼續送出請求,並發下載量大時 Cookie 資料庫遲遲沒機會被寫入真正有效的新值(v25.2.3) | 節流閥改為只限制「寫入資料庫+重打首頁確認」,套用到當下執行緒的動作永遠執行 | 大幅降低登入 Cookie 在正常使用情境下無故失效、需要頻繁手動重新登入的頻率 |
| 排程下載連續失敗達上限暫停後,負責追蹤結果的背景機制仍每 30 秒重新發現並重複通知,最長洗版到 2 小時追蹤逾時(v25.2.3) | 同一個暫停狀態改為只通知一次 | 避免無意義的重複通知洗版 |
| 「操作處置」套用時間覆蓋時,2 小時重試期限從「確認處置的當下」起算,而非目標時間,公告提前很多小時被看到時會在目標時間到達前就先過期(v25.2.3) | 期限改為從該筆調整實際的目標檢查時間起算 | 避免機動調整在「機動調整異動」清單中途無故消失,並誤觸發每日新番通知重發 |
「每日新番通知」的「本日排程更新」區塊只讀取 sn_list.txt 固定排程時間,與下方「機動調整異動」區塊對同一標題顯示矛盾的時間(v25.2.3) |
兩區塊改為共用同一份調整資料,並將生效中「本週暫停更新」的項目從排程清單移除 | 同一則通知不再出現互相矛盾的時間資訊 |
| 使用者尚未手動確認處置的公告子句,若動畫瘋將該則公告從頁面撤下,「操作處置」清單與機動調整臨時排程永遠不會被清除(v25.2.3) | 公告內容有變動時,自動把已消失且尚未確認的子句標記為「忽略此公告」並移除;已手動確認過的處置維持原樣不動 | 「操作處置」清單能正確反映實際仍有效的公告,不會一直卡著已經撤下的舊項目 |
終止手動任務時,已在下載中的分段執行緒事後更新進度會拋出未捕捉的 KeyError,被印成「未預期錯誤」(v25.2.3) |
更新進度前先確認監控項目是否還存在,不存在就跳過 | 終止任務不再伴隨一則看起來像異常的錯誤訊息 |
| 終止任務只在少數固定檢查點才會生效(等待交握鎖排隊中、非VIP整段廣告等待都無法中途放棄),且終止後不會清掉已下載到一半的分段暫存資料夾/ffmpeg 半成品檔案(v25.2.3) | 交握鎖改用逾時輪詢並隨時檢查終止狀態,廣告等待拆成每秒檢查,終止後主動刪除殘留的暫存資料夾/半成品檔案 | 終止任務反應更即時,也不會再留下永遠不會被清理的殘留檔案 |
| 批次任務進度視窗開著時,跳出的終止確認框被壓在下面看不到,成因與「手動重試結果彈窗」相同:Bootstrap 不會自動處理多層彈窗的堆疊順序(v25.2.3) | 改用通用做法:往後只要有彈窗在其他彈窗仍開著時顯示,都會自動疊到最上層 | 一次解決全站同類型的彈窗互相遮擋問題,不用再逐一手動排除 |
| 單集手動任務「終止任務」按鈕按下沒有反應:後端功能一直都有,但前端呼叫的函式從未寫過(v25.2.3) | 補上這支前端函式,行為與批次任務終止按鈕一致 | 單集手動任務也能正常終止 |
| 任務結束後不論是否真的下載成功,一律送出「下載完成 @file_size@ MB」通知;分段失敗、合併失敗、使用者主動終止都不會被攔下,終止任務反而會收到「下載完成 0MB」這種矛盾訊息(v25.2.3) | 新增「手動任務-已取消」專屬通知類別,使用者主動終止時改發送這個類別;未成功也非使用者終止的一般性失敗維持原有失敗通知邏輯 | 通知內容能正確反映任務實際結果,不再誤導使用者 |
| v25.2.2 新增的「偵測不到 ffmpeg.exe 時自動下載」功能,設定的下載來源網址已失效(v25.2.3) | 更新為新的下載位置 | 恢復自動下載 ffmpeg.exe 的功能 |
| 手動任務「掃描集數」結果清單,作品集數很多時會把彈出視窗撐得很高、超出畫面高度(v25.2.3) | 清單容器加上最大高度(400px)與獨立捲軸 | 超出高度時只捲動清單本身,彈出視窗維持原本大小,操作更直覺 |
公告只有相對日期詞+模糊時段詞(例如「明日白天」),沒有明確 HH:MM 時刻時被誤判為「無法判斷」,無法套用「本週延後更新」(v25.2.4) |
新增相對日期詞/模糊時段詞對照表換算出查詢時間範圍,正確判定為延後更新並可直接套用「本週延後更新」 | 不用再自己換算日期時間手動填「自訂更新時間」,這類口語化公告也能一鍵套用系統建議的處置方式 |
| 「每日新番通知」的「機動調整異動」訊息文字寫死「今日」二字,覆蓋到隔天時仍顯示「今日」,跟機動調整清單顯示的日期矛盾(v25.2.4) | 改為依覆蓋實際的 check_date 比對今天/明天分別顯示「今日」「明日」 |
通知內容不再誤導使用者以為延到隔天的更新今天就會發生 |
| 「每日新番通知」的「本日排程更新」清單只用原本的星期/時間判斷是否列入今天,忽略覆蓋實際生效的日期,把已改到別天的項目也列進今天(v25.2.4) | 改為有覆蓋時一律用覆蓋本身的實際日期+時間重新判斷是否落在本日播出日範圍 | 「本日排程更新」不會再冒出實際上是明天才會發生的項目 |
| 「公告」面板與套用處置後的提示視窗,點擊背景或按 ESC 會意外關閉,操作到一半容易被中斷(v25.2.4) | 補上跟站內其他彈窗一致的「點擊背景不關閉」設定 | 操作處置填到一半、或提示視窗還沒看清楚內容都不會被意外關閉 |
| 番劇頁面解析成功但目前沒有列出任何集數時,會讓整支程式在無防護狀態下直接崩潰結束,連 Dashboard 網頁也一併斷線(v25.2.4) | 補上防呆,這種情況改成略過這輪、等下次檢查 | 不會再因為單一部作品的頁面狀態異常拖垮整支程式 |
使用者把作品從 sn_list.txt 移除、資料庫記錄剛好被同時清除時,正在排隊的任務會卡在佇列裡,得重啟程式才會恢復(v25.2.4) |
補上例外處理,確實把卡住的任務清出佇列 | 不需要為了單一筆卡住的任務重啟整支程式 |
| 下載完成的檔案大小剛好等於 5MB 時,成功/失敗判斷邊界不一致,導致同一集被系統認定完成、資料庫卻寫入失敗,永遠重複下載(v25.2.4) | 統一兩處的判斷邊界 | 不會再對同一集數無限重複下載 |
| 「匯入設定」對話框比對差異時未跳脫欄位值就塞進頁面,匯入內容被動過手腳的 config.json 可能觸發 XSS(v25.2.4) | 欄位值改為跳脫後才顯示 | 避免匯入不明來源的設定檔時被植入惡意程式碼 |
| 目錄瀏覽器「新增喜好路徑」可以把磁碟機根目錄本身存成喜好路徑,讓系統磁碟機瀏覽限制整個失效(v25.2.4) | 擋下把磁碟機根目錄存成喜好路徑 | 系統磁碟機的瀏覽限制不會被繞過 |
| 彈幕文字未跳脫字幕特效標籤語法,惡意彈幕內容可能被播放器當成真正的特效指令執行(v25.2.4) | 特效標籤用到的半形括號改用全形括號取代 | 彈幕內容不再能操控字幕顯示樣式 |
| 「發現新版本」通知的連結未檢查網址通訊協定,理論上可能被做成點擊就執行程式碼的連結(v25.2.4) | 只有 http(s)/mailto 開頭的網址才會做成可點擊連結 | 排除連結被用來執行任意程式碼的可能性 |
| 分段下載模式在 ffmpeg 合併階段按下終止任務不會真的中止,合併完成後仍被當成正常下載完成(v25.2.4) | 合併期間定期檢查終止狀態,偵測到就中止並清除暫存檔 | 終止任務在合併階段也能確實生效 |
| 分段下載連續失敗時沒有清除已下載的分段暫存資料夾,暫存目錄會持續累積殘留資料(v25.2.4) | 失敗時一併清除已下載的分段暫存檔 | 不會再因為連續下載失敗堆積暫存垃圾 |
| 使用者終止任務、ffmpeg 被強制結束後,仍會接著印出一則矛盾的「下載失敗」訊息(v25.2.4) | 終止時不再重複印出這則訊息 | 終止任務的訊息不再自相矛盾、容易誤導 |
| 「深夜」跨日時段的日期推算疊加兩次順延,套用「本週延後更新」後實際上完全查不到更新(v25.2.4) | 修正跨日時段的日期推算邏輯 | 深夜公告也能正確被監控到 |
| 「大後天」公告內容被子字串誤判成「後天」,算少一天(v25.2.4) | 相對日期詞比對改為優先比對最長匹配 | 「大後天」等相對日期詞判斷正確 |
| 「自訂時間範圍」沒檢查開始時間是否等於結束時間,明顯輸入失誤會被誤判成一段完整 24 小時的範圍(v25.2.4) | 開始等於結束時間時擋下並提示重新輸入 | 避免誤植輸入被當成合法的整日範圍 |
| 公告日期換算年份時,跟今天差距在 30 天內的過去日期不會被修正,導致該則公告永遠不會出現在「操作處置」清單(v25.2.4) | 只要換算出來是過去的日子就一律視為指的是明年 | 公告不會再因為年份誤判而從清單中消失 |
| 套用「操作處置」時快速連點兩次「確認」,「清除舊排程」與「寫入新排程」可能交錯執行,留下互相矛盾的臨時排程(v25.2.4) | 整段操作序列化執行,「確認」按鈕送出後先停用避免連點 | 不會再因為連點按鈕產生矛盾的臨時排程 |
| 手動任務提交介面欄位缺漏時直接噴出未預期的錯誤訊息(v25.2.4) | 改為安全讀取欄位並給出明確錯誤訊息 | 提交欄位缺漏時能看懂問題出在哪 |
| 手動任務快速連點兩次提交同一個 sn,仍可能各自啟動一個下載(v25.2.4) | 檢查通過後立即佔位,關閉這段時間差 | 不會再因為連點提交同一個 sn 啟動重複下載 |
| Dashboard 網頁上存檔後,設定需等下一輪自動檢查或重啟程式才會實際套用,期間手動任務/下載冷卻仍用舊值(v25.2.4) | 存檔當下立即重新載入設定套用到執行中的背景程式 | 網頁上改完設定立即生效,不用等下一輪檢查或重啟程式 |
三、速度、功能與安全性比較
本客製版真正的強項,是放著長時間無人看管也能穩定把番劇準時抓下來:裝置身分持久化、異常自動重試、排程漏抓一鍵補齊,
這些機制大幅減少需要人工排查、手動重啟才能恢復下載的情況,讓自動化整體更省心、更少中斷。
檔案體積與單一集數的下載速度則跟官方版接近,以下如實列出,不做誇大宣稱:
| 項目 | 官方 v24.6 | 本客製版 v25.2.5 | 說明 |
|---|---|---|---|
因裝置驗證異常(code=1007)而卡住、需要人工介入的頻率 |
每次下載/重試都會申請新裝置ID,短時間內容易被判定為多裝置異常使用;一旦觸發異常沒有自動換裝置ID的機制,需自行手動排查 | 裝置ID持久化+過期自動偵測+觸發異常時自動換新ID重試;自訂排程找到更新後若下載失敗也會自動重新排入隊列重試,最多追蹤 2 小時(詳見上方「排程下載穩定性與批次補救」) | 這是本版最直接的方便之處:長時間無人看管的自動化情境下,需要人工重啟/排查的次數明顯減少,整批更新能更穩定地在背景自己跑完 |
| 排程漏抓的補救方式 | 沒有對應機制,只能等下次排程時段或手動逐一重新觸發 | 一鍵「重新檢查所有排程更新」,立即對全部項目重新檢查並自動排入下載,進度視覺化呈現 | 程式離線一段時間、或排程剛好沒偵測到更新時,不用逐一手動排查是哪部作品漏抓,也不用等到下週同一時段 |
| 監視公告的處置結果與每日狀況掌握 | 無「監視公告」機制,也沒有主動彙整通知,只能自己盯著首頁公告與逐則下載通知拼湊狀況 | 「公告」面板可查看歷史與人工覆蓋處置(v25.2.0);「每日新番通知」每天 00:00 主動推播當天排程更新清單+機動調整異動彙整(v25.2.0) | 不用整天盯著 Dashboard 或翻一則則通知,一則彙整通知就能掌握今天狀況 |
| 手動批次下載中途當機/斷電的恢復方式 | 沒有手動批次下載的概念(只能整批單次觸發、無進度紀錄),中斷後無法得知哪些已完成,通常得整批重新來過 | 每集下載成功即時記錄進 aniGamer.db(v25.1.8 起改由資料庫儲存,之前為 manual_batch_tasks.json),重啟後自動跳過已完成的集數,只補齊當機當下仍在下載或已放棄的部分;失敗集數可個別或整批重試,不會永久遺失 |
集數多的長篇作品意外中斷時,不用再擔心重複下載已完成的集數,浪費頻寬與時間 |
| 打包後體積 | 使用 pyhttpx(純 Python 實作),官方發布的 Windows 版壓縮包約 30MB |
改用 curl_cffi 後,內含一份編譯過的 libcurl-impersonate 執行檔,本機打包後 aniGamerPlus.exe 約 24MB,連同 Dashboard 等隨附檔案整包約 29MB |
體積略增是換取更貼近真實瀏覽器 TLS/JA3 指紋(降低被動畫瘋/Cloudflare 判定為異常流量風險)的代價,如實告知,不宣稱本版檔案更小 |
| 單集影片下載速度 | 取決於動畫瘋 CDN 與使用者頻寬 | 與官方版相同 | 兩者都是把 m3u8/影片分段交給 ffmpeg 或分段下載器處理,實際傳輸速率由 CDN/網路狀況決定,換 HTTP 請求函式庫不會讓單一集數的下載變快,這裡不做誇大宣稱 |
| Web 控制面板身分驗證 | 密碼保護僅靠瀏覽器原生 HTTP Basic Auth 彈出視窗,登入狀態不受伺服器控管,且沒有嘗試次數限制 | 自訂登入頁,帳號密碼比對後以伺服器端 session 保存登入狀態,重啟程式不會被強制登出;同一來源 IP 連續登入失敗達 5 次會鎖定 60 秒(v25.2.2 新增) | 體驗更一致,也不依賴瀏覽器自身對 Basic Auth 的實作差異;面板對外開放時能降低帳密被暴力破解的風險 |
| 跨站請求偽造(CSRF)防護 | 無,/uploadConfig、/manualTask 等寫入型 API 未驗證請求來源 |
寫入型 API 驗證 X-Requested-With 標頭,非透過網頁本身發出的請求會被拒絕 |
降低面板對外開放時被第三方網頁誘導發出惡意請求(例如偷改設定、偷加下載任務)的風險 |
| 未設密碼時的風險提示 | 無 | 面板開放外部訪問但未啟用密碼保護時,啟動時主動印出警告 | 提醒使用者避免面板在無密碼保護下直接暴露在公網 |
| Cookie/Token/Webhook 等敏感欄位 | 僅能直接編輯 config.json/cookie.txt 純文字檔,內容全程明文 |
Web 面板輸入框一律遮罩顯示(Cookie/JA3/Akamai/Telegram Token/Discord Webhook/Chat ID),不直接在畫面上顯示明文; 其中 Dashboard 自身登入密碼是唯一完全不會被伺服器回傳明文值的欄位(v25.2.2 修正,過去會透過 /data/config.json 明文回傳),其餘 Token/Webhook 欄位因為要支援「留空=沿用原設定」的編輯體驗,伺服器仍需要回傳實際值供頁面暫存比對,只是不會直接顯示在輸入框上;v25.1.9 新增的通知發送歷史同樣只記錄組好的通知內容,不記錄憑證本身 |
面板不慎被他人看到畫面、或分享畫面截圖時,輸入框本身不會直接顯示明文;但仍請留意面板若未啟用密碼保護(見上方風險提示),任何連得到面板的人都能透過 API 直接取得 Token/Webhook 內容,密碼保護才是真正的防線 |
| 通知內容可控性 | 通知文字寫死在程式碼裡,且 Telegram 訊息未做 URL 編碼,中文/換行內容可能送出失敗 | 通知模板可自訂(v25.1.9),Telegram 改走 POST + JSON 傳遞內容,不會因中文或特殊字元送出失敗 | 除了體驗更好,結構化傳遞方式也比字串直接接在 URL 後面更不容易因為未跳脫的內容造成請求本身出錯 |
| 網路磁碟(NAS)斷線時的檔案流向可見度 | 沒有對應機制;下載目錄若設成連不到的網路路徑,行為依當下程式碼路徑而定,使用者不容易第一時間察覺檔案實際存到哪裡 | 連不到時設定頁自動顯示警示條+「處理」選項(v25.2.1),並可透過「路徑無法存取」通知即時得知;同一次離線期間只通知一次,不會洗版 | 不會悄悄把檔案下載到本機好幾天都不自知,且不會像 v25.2.0 以前那樣被靜默清空成空字串(詳見上方 BUG 修正) |
| 版本更新檢查的即時性與可見度 | 需自行留意 GitHub 頁面或程式啟動時的主控台輸出,網頁上看不到任何提示 | 啟動時檢查+每 10 分鐘背景複查(v25.2.1),支援預告版本,偵測到更新時 Dashboard 自動彈窗並提供「略過此版本通知」,導覽列按鈕可隨時重新開啟 | 不用重啟程式或緊盯 GitHub,也不會因為十幾秒沒看到彈窗就再也不知道有新版本 |
| Dashboard 自身登入帳密的管理方式 | 需直接編輯設定檔修改 | 「aniGamerPlus登入設定」網頁表單直接修改(v25.2.1),儲存後立即生效、不用重啟 | 降低誤改設定檔其他欄位、或格式打錯導致程式無法啟動的風險 |
四、版本更新紀錄
- v25.1.1:curl_cffi 連線架構、錯誤處理強化、檔名清理、sn_list.txt 排程功能、Web 面板安全性與體驗優化(詳細內容)
- v25.1.2:新增
ja3/akamai自訂指紋支援(詳細內容) - v25.1.3:Dashboard 設定存檔顯示同步修正、ja3/akamai 欄位改為遮罩顯示、自訂排程重啟補檢查邏輯修正(詳細內容)
- v25.1.4:修繕早期就存在但從未接上功能的 Dashboard 登入網頁、完善早期就寫好卻沒有設定介面的 Discord/Telegram 通知、新增取得新番更新時間與資料庫整頓功能、移除 Plex 通知代碼與功能(詳細內容)
- v25.1.5:修正排程下載失敗不會自動重試的問題、新增「重新檢查所有排程更新」一鍵補齊功能、掃描集數大量集數自動摺疊(詳細內容)
- v25.1.6:新增「監視公告」動態排程調整功能、新增手動任務重新命名、修正資料庫整頓與 sn_list 清理誤用名稱比對導致的誤刪問題、資料庫整頓改為勾選候選清單確認(詳細內容)
- v25.1.7:修正手動任務並發/冷卻限制與 cookie 刷新競爭問題、修正「任務」頁添加手動任務彈窗為缺少新功能的舊版複製品、新增手動批次下載進度視窗與失敗清單重試、新增手動任務救援(顯示目前工作)/終止任務/排程下載插隊優先處理、新增程式啟動時自動清理殘留暫存檔、設定頁與登入頁美化(目錄瀏覽器、摺疊收納、品牌標題)(詳細內容)
- v25.1.8:
config.json/sn_list.txt/cookie.txt/device_id.txt/dashboard_secret.key/手動任務暫存檔全部整併進aniGamer.db,根除斷電/當機導致設定檔寫到一半損毀成亂碼的問題;
新增「快速取得 Cookie/UA・JA3・Akamai」一鍵擷取工具、啟動緊急修復機制、Telegram/Discord 共用的「通知類別」開關與測試工具;
修正 Telegram 通知在無互動紀錄時誤判成「Token 無效」及中文訊息亂碼的問題;
更新檢查改指向客製版自己的 repo(詳細內容) - v25.1.9:新增「通知模板」自訂功能(11 種通知類別可自訂文字內容,Telegram HTML 標籤自動轉換 Discord Markdown)與「發送歷史」查詢;
修正 Telegram 通知格式標籤未套用parse_mode=HTML導致標籤原樣顯示成文字的問題;
設定頁控制項寬度統一、導覽列置中、通知測試結果改用彈窗(詳細內容,使用教學) - v25.2.0:新增「公告」面板(歷史公告/操作處置/機動調整)與「每日新番通知」(每天 00:00 彙整當天排程更新與機動調整異動);
「掃描集數」新增全選/反選/取消按鈕與 Shift+拖曳快速選取;
監視公告三份散落檔案、sn_list.txt、既有config/manual_*_tasks資料表全部改成逐欄位存進aniGamer.db,方便用 DB 瀏覽器查看/編輯;
「取得當前新番更新時間」結果改分區顯示;
修正檢查更新訊息顯示原始 Markdown 語法、「特別篇」與「中文配音」集數混淆、裝置驗證異常反覆發生、任務頁缺少「公告」按鈕、摺疊區塊箭頭方向不符、「操作處置」仍顯示已完成下載項目等問題(詳細內容,使用教學) - v25.2.1:「操作處置」新增「選擇指定排程」;新增 aniGamerPlus 專屬「登入設定」(不用再編輯設定檔);
目錄瀏覽器新增「喜好路徑」捷徑;下載目錄/暫存目錄連不到網路磁碟時新增警示條與處理選項+「路徑無法存取」通知;
版本更新檢查全面改版(支援預告版本、頁面彈窗、每 10 分鐘背景複查);快速取得 Cookie 新增自動偵測登入成功;
「重新檢查排程更新」改為分階段執行(先選檢查範圍,再逐項選擇下載或標記為已下載);
「每日新番通知」統計範圍改採動畫瘋「本日更新」慣例(13:00~隔日12:59,取代日曆日 00:00~23:59);
Cookie/JA3/Akamai 儲存後免重啟即可生效;設定頁版面整理(下載設定摺疊化、聊天室ID改為必填等);
修正劇場版檔名殘留[電影]標記、公告標題含英數字季別縮寫(S2/2nd Season等)比對失敗、「操作處置」被「歷史公告」定期刷新蓋掉操作到一半的下拉選單、
write_settings()誤刪無法連線的網路路徑設定、設定讀取時反斜線被重複跳脫加倍等問題(詳細內容,使用教學) - v25.2.2:「每日新番通知」發送後若機動調整異動有變化,新增自動重新發送更新版;
修正「每日新番通知」集數預測查詢對象抓錯,導致無論實際更新到第幾集、預計集數永遠顯示成「第02話」的問題;
另完整程式碼審查(code review)後新增 Windows 版偵測不到ffmpeg.exe時自動下載一份;
修正 Discord 測試通知可被利用發起 SSRF、/data/config.json明文回傳登入密碼、目錄瀏覽器可繞過系統磁碟機限制、登入頁無嘗試次數限制等 4 項安全性問題;
修正排程下載可能重複啟動、手動任務可被重複提交、ffmpeg 分段合併失敗仍判定成功、彈幕下載檔案控制代碼未關閉、監視公告集數快取永不過期、「本週同時更新」殭屍排程、Discord 通知模板引用區塊跨行格式跑版、多處資料庫連線於例外路徑未關閉(含可能導致資料庫存取死鎖的風險)、
「快速取得 Cookie/動畫瘋登入設定」彈出視窗每次登入都要求 reCAPTCHA 驗證、「發現新版本」通知內容過長時 Telegram 直接送不出去等 10 項正確性問題
(詳細內容,使用教學) - v25.2.3:緊急修復動畫瘋停用舊版影片來源 API(
ajax/m3u8.php固定回 404)導致所有下載全面失敗的問題,改用網頁播放器目前實際使用的新端點;
修正登入 Cookie 刷新節流閥誤丟合法輪換導致 Cookie 長時間無法更新的問題,並新增背景保溫機制降低長時間閒置後 Cookie 失效的機率;
修正機動調整可能於目標時間到達前就提前失效、每日新番通知「本日排程更新」與「機動調整異動」時間顯示矛盾、已從動畫瘋公告頁撤下的公告仍永遠卡在「操作處置」清單、
排程下載暫停通知每 30 秒重複洗版等問題;修正終止手動任務時背景執行緒噴出未捕捉例外、反應遲緩且會遺留下載到一半的暫存檔案、
批次任務終止確認框被進度視窗壓住看不到、單集手動任務「終止任務」按鈕沒有反應、終止任務後誤發送內容矛盾的「下載完成 0MB」通知等問題,
並新增「手動任務-已取消」專屬通知類別;新增 Telegram 通知偵測到 Bad Gateway 時自動重試(3 秒後、最多 3 次),
3 次仍失敗可在通知發送歷史按「手動重試」再送 1 次;修正手動重試結果彈窗被「發送歷史」視窗蓋住看不到、
手動任務「掃描集數」結果清單過長超出畫面等問題
(詳細內容,使用教學) - v25.2.4:公告新增模糊時段解析(相對日期詞+白天/早上/上午/中午/下午/晚上/深夜等時段詞),沒有明確時刻的公告
也能正確判定為延後更新並直接套用「本週延後更新」;「操作處置」新增「自訂時間範圍」處置方式,可指定開始~結束時間、
範圍內每分鐘檢查一次;修正每日新番通知「機動調整異動」恆顯示「今日」、「本日排程更新」清單誤把已覆蓋到別天的項目
也列入今天等日期顯示問題;修正公告視窗/提示視窗點擊背景會意外關閉的問題;「操作處置」自訂時間欄位版面重新設計,
避免日期/時間顯示不全;發布前針對全部原始碼跑了一輪完整程式碼審查,額外修正 22 項問題,包含番劇頁面零集數時
整支程式直接崩潰、檔案剛好 5MB 時被永遠重複下載等穩定性問題,「匯入設定」對話框可被觸發 XSS、目錄喜好路徑
可繞過系統磁碟機瀏覽限制等安全性問題,以及公告模糊時段解析(深夜跨日時段推算多一天、大後天誤判成後天等)、
下載取消時 ffmpeg 合併不會真的中止、Dashboard 手動任務連點兩次可能重複啟動下載等多項邏輯錯誤;修正 Dashboard
網頁存檔後須等下一輪自動檢查或重啟程式才會套用新設定的問題,改為存檔當下立即生效
(詳細內容,使用教學) - v25.2.5:「重新檢查排程更新」→「檢查指定排程」清單新增依星期/時間排序,並在最上方新增「推薦檢查」
區塊,自動列出過去 12 小時內排定時段的項目且預設勾選;修正下載目錄/暫存目錄連不到時,Dashboard 幾支
窄範圍端點(新增/移除喜好路徑、略過版本通知、
改登入密碼等)可能悄悄把該路徑設定洗成本機預設值的問題;修正 Dashboard 資料夾偵測不到時永久停用控制面板、
資料夾補回來也不會自動恢復的問題;修正分段下載模式本機合併階段完全沒有逾時判斷,ffmpeg 卡死時只能手動
砍進程的問題;修正 Cookie 保溫背景機制的一般使用者提示訊息帶有「除錯」字樣與技術性診斷內容,容易誤導成
程式出錯的問題;發布前另外針對全部原始碼跑了一輪聚焦「多個背景執行緒/操作同時觸發會不會互相干擾」的
完整審查,額外修正 12 項問題,包含下載中設定被悄悄復原、同一集被排程與手動任務同時下載兩次等資料一致性
風險,Dashboard 維護操作連點兩下可能同時執行、Cookie 保溫誤判閒置等併發風險,以及資料庫連線逾時不一致、
頻繁印出狀態訊息時額外開啟子行程等效能/資源問題;修正「發現新版本」彈窗排版跑版(條列項目多出「- 」、
該換行的地方黏在一起、贊助連結消失)與該按鈕出現時擠壓導覽列、蓋住下方版面的問題;並將「公告偵測」與
「檢查最新版本(含預告)」從「更新間隔(分鐘)」中獨立出來,改為固定每分鐘各自檢查一次
(詳細內容)
本專案基於 miyouzi/aniGamerPlus 進行客製修改,授權條款與原專案一致,詳見 LICENSE。



























