// ==UserScript== // @name Bahamut Anime to AniList Sync // @name:zh-TW 巴哈姆特動畫瘋同步到 AniList // @name:zh-CN 巴哈姆特动画疯同步到 AniList // @namespace https://github.com/downwarjers/WebTweaks // @version 6.8.0 // @description 巴哈姆特動畫瘋同步到 AniList。支援系列設定、自動計算集數、自動日期匹配、深色模式UI // @description:zh-TW 巴哈姆特動畫瘋同步到 AniList。支援系列設定、自動計算集數、自動日期匹配、深色模式UI // @description:zh-CN 巴哈姆特动画疯同步到 AniList。支持系列设置、自动计算集数、自动日期匹配、深色模式UI // @author downwarjers // @license MIT // @match https://ani.gamer.com.tw/* // @connect acg.gamer.com.tw // @connect graphql.anilist.co // @icon https://ani.gamer.com.tw/apple-touch-icon-144.jpg // @run-at document-idle // @grant GM_xmlhttpRequest // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @grant GM_addStyle // @grant GM_setClipboard // @noframes // @downloadURL https://raw.githubusercontent.com/downwarjers/WebTweaks/main/UserScripts/bahamut-anime-to-anilist-sync/bahamut-anime-to-anilist-sync.user.js // @updateURL https://raw.githubusercontent.com/downwarjers/WebTweaks/main/UserScripts/bahamut-anime-to-anilist-sync/bahamut-anime-to-anilist-sync.user.js // ==/UserScript== (function () { 'use strict'; // #region ================= [Constants] 常數管理 ================= const CONSTANTS = { // --- 基礎與除錯設定 --- DEBUG: false, // 除錯模式開關 API_URL: 'https://graphql.anilist.co', // AniList 的 API 網址 // --- OAuth 設定 --- ANILIST_CLIENT_ID: '35264', // --- 同步與匹配邏輯設定 --- SYNC_DEBOUNCE_MS: 2000, // 防抖動時間 (毫秒) MATCH_TOLERANCE_DAYS: 2, // 開播日期匹配容許誤差 (天) SEARCH_RANGE_DAYS: 10, // 自動模糊搜尋範圍 (天) STORAGE_PREFIX: 'baha_acg_', // 本地儲存 (Local Storage) 的 key 前綴 SYNC_ON_BIND: false, // 綁定後是否立即同步 URLS: { VIDEO_PAGE: 'animeVideo.php', // 用於判斷是否在播放頁 }, // --- API 連線重試機制 --- API_MAX_RETRIES: 5, // API連線失敗時的最大重試次數 RETRY_DELAY_MS: 3000, // 重試前的等待時間 (毫秒) // --- 本地儲存的鍵名 (Key Names) --- KEYS: { TOKEN: 'ANILIST_TOKEN', // AniList Access Token SYNC_MODE: 'SYNC_MODE', // 同步模式的設定 CUSTOM_SEC: 'SYNC_CUSTOM_SECONDS', // 自訂秒數的數值 }, // --- DOM 元素選擇器 (Selectors) --- // 巴哈姆特資訊 SELECTORS: { // 當前頁面頁面操作 PAGE: { seasonList: '.season ul li', // 動畫瘋播放頁下方的集數列表 seasonUl: '.season ul', // 動畫瘋播放頁下方的全部列表 playing: '.playing', // 正在播放的 CSS class acgLink: 'a[href*="acgDetail.php"]', // 作品資料頁的連結 acgLinkAlt: 'a', // 備用選擇器 (用於 contains 文字搜尋) videoElement: 'video', // 網頁上的影片播放器元素 (