一键复制磁力链和推送到115离线

支持BT4G/BTDig/BTSOW/Nyaa/GY/DMHY/SOBT/BTMulu等网站,可一键复制磁力链和推送到115网盘进行离线,支持打开磁力链,并支持通过脚本菜单控制各按钮的显示(推送离线任务需当前浏览器已登录(不可用)115会员账号)

目前為 2025-08-19 提交的版本,檢視 最新版本

// ==UserScript==
// @name         一键复制磁力链和推送到115离线
// @author       [email protected]
// @description  支持BT4G/BTDig/BTSOW/Nyaa/GY/DMHY/SOBT/BTMulu等网站,可一键复制磁力链和推送到115网盘进行离线,支持打开磁力链,并支持通过脚本菜单控制各按钮的显示(推送离线任务需当前浏览器已登录(不可用)115会员账号)
// @version      1.1.2.20250819
// @icon         data:image/gif;base64,R0lGODlhgAGAAZECAPr7/ERNVv///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5OTk5ODkxZS0wMWE2LTRlMTItYWM1Mi00YTIzMzI1MTViYjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkU2QTk5NkYxM0UzMTFFQzg5RkRCRTMwRTcyQUZCRjIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkU2QTk5NkUxM0UzMTFFQzg5RkRCRTMwRTcyQUZCRjIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxOTQyMDFlMi00OGRjLTQ3OTgtOTFlNi05ZjkyNzhjNTJlZTUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplMjk3YTUwZC00MTM4LWVmNDYtYTY3Ni1kZTkzNDU1ZjNmOTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRm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
// @include      *://bt4gprx.com/*
// @include      *://*btdig.com/*
// @include      *://*btsow.*/*
// @include      *://nyaa.si/*
// @include      *://*gying.*/*
// @include      *://*gyg.*/*
// @include      *://*dmhy.*/*
// @include      *://sobt*.*/*
// @include      *://*btmulu.*/*
// @grant        GM_setClipboard
// @grant        GM_xmlhttpRequest
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_registerMenuCommand
// @connect      115.com
// @connect      login.115.com
// @connect      *
// @run-at       document-end
// @namespace    https://gf.qytechs.cn/users/1453515
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);

    const CONFIG = {
        notificationTimeout: isMobile ? 5000 : 3000,
        cookieRefreshInterval: 30 * 60 * 1000,
        enableCopyButton: GM_getValue('enableCopyButton', true),
        enableOfflineButton: GM_getValue('enableOfflineButton', true),
        enableOpenButton: GM_getValue('enableOpenButton', true)
    };

    const ERROR_CODES = {
        10008: '任务已存在,无需重复添加',
        911: '需要账号验证,请确保已登录(不可用)115会员账号',
        990: '任务包含违规内容,无法添加',
        991: '服务器繁忙,请稍后再试',
        992: '离线下载配额已用完',
        993: '当前账号无权使用离线下载功能',
        994: '文件大小超过限制',
        995: '不支持的链接类型',
        996: '网络错误,请检查连接',
        997: '服务器内部错误',
        998: '请求超时',
        999: '未知错误'
    };

    function initializeScript() {
        addMenuCommands();
        setInterval(checkCookieRefresh, 5 * 60 * 1000);
        setupMutationObserver();
        addActionButtons();
    }

    function addMenuCommands() {
        GM_registerMenuCommand("检查115登录(不可用)状态", async () => {
            const isLoggedIn = await check115Login(true);
            showNotification('115状态', isLoggedIn ? '已登录(不可用)' : '未登录(不可用)');

            if (!isLoggedIn) {
                setTimeout(() => {
                    if (confirm('需要登录(不可用)115网盘,是否进入115网盘登录(不可用)页面?')) {
                        window.open("https://115.com/?mode=login", "_blank");
                    }
                }, 500);
            }
        });

        GM_registerMenuCommand("打开115网盘", () => window.open("https://115.com/?cid=0&offset=0&mode=wangpan", "_blank"));

        const toggleCopyButtonText = CONFIG.enableCopyButton ? "禁用复制按钮" : "启用复制按钮";
        GM_registerMenuCommand(toggleCopyButtonText, () => {
            const newState = !CONFIG.enableCopyButton;
            CONFIG.enableCopyButton = newState;
            GM_setValue('enableCopyButton', newState);
            showNotification('设置已保存', newState ? '已启用"复制"按钮' : '已禁用"复制"按钮');
            addActionButtons();
        });

        const toggleOfflineButtonText = CONFIG.enableOfflineButton ? "禁用离线按钮" : "启用离线按钮";
        GM_registerMenuCommand(toggleOfflineButtonText, () => {
            const newState = !CONFIG.enableOfflineButton;
            CONFIG.enableOfflineButton = newState;
            GM_setValue('enableOfflineButton', newState);
            showNotification('设置已保存', newState ? '已启用"离线"按钮' : '已禁用"离线"按钮');
            addActionButtons();
        });

        const toggleOpenButtonText = CONFIG.enableOpenButton ? "禁用打开按钮" : "启用打开按钮";
        GM_registerMenuCommand(toggleOpenButtonText, () => {
            const newState = !CONFIG.enableOpenButton;
            CONFIG.enableOpenButton = newState;
            GM_setValue('enableOpenButton', newState);
            showNotification('设置已保存', newState ? '已启用"打开"按钮' : '已禁用"打开"按钮');
            addActionButtons();
        });
    }

    async function checkCookieRefresh() {
        try {
            await check115Login(true);
        } catch (error) {
            console.error('检查cookie刷新失败:', error);
        }
    }

    function setupMutationObserver() {
        const observer = new MutationObserver((mutations) => {
            for (const mutation of mutations) {
                if (mutation.addedNodes.length) {
                    addActionButtons();
                }
            }
        });
        observer.observe(document, {
            childList: true,
            subtree: true
        });
    }

    function addActionButtons() {
        if (window.location.host.includes('bt4gprx.com')) {
            handleBT4GSite();
        }
        else {
            handleCommonSites();
        }
    }

    function createButton(type, element, icon = null, noDefaultClick = false) {
        const btn = document.createElement('button');
        btn.className = `${type}-magnet-btn`;

        const buttonIcon = icon || ICONS[type] || ICONS.offline;
        applyButtonStyle(btn, type, buttonIcon);

        if (!noDefaultClick) {
            setupButtonClickHandler(btn, type, element);
        }

        return btn;
    }

    const ICONS = {
        copy: '<svg width="15" height="15" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="12" fill="#000"/><g transform="scale(0.8) translate(3,3)"><path d="M10 13C10.4295 13.5741 10.9774 14.0491 11.6066 14.3929C12.2357 14.7367 12.9315 14.9411 13.6466 14.9923C14.3618 15.0435 15.0796 14.9403 15.7513 14.6897C16.4231 14.4392 17.0331 14.047 17.54 13.54L20.54 10.54C21.4508 9.59695 21.9548 8.33394 21.9434 7.02296C21.932 5.71198 21.4061 4.45791 20.479 3.53087C19.5519 2.60383 18.2978 2.07799 16.9869 2.0666C15.6759 2.0552 14.4129 2.55916 13.47 3.46997L11.75 5.17997" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M14 11C13.5705 10.4259 13.0226 9.9508 12.3934 9.60705C11.7642 9.26329 11.0684 9.05889 10.3533 9.00766C9.63816 8.95643 8.92037 9.05963 8.24861 9.3102C7.57685 9.56077 6.96684 9.95296 6.45996 10.46L3.45996 13.46C2.54915 14.403 2.04518 15.666 2.05659 16.977C2.068 18.288 2.59383 19.542 3.52087 20.4691C4.44791 21.3961 5.70198 21.922 7.01296 21.9334C8.32394 21.9448 9.58695 21.4408 10.53 20.53L12.24 18.82" stroke="#fff" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></g></svg>',
        offline: '<img src="data:image/x-icon;base64,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" style="width:15px;height:15px;">',
        open: '<svg width="15" height="15" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="9" stroke="#2563EB" stroke-width="2"/><path d="M3 12H21M12 3C14.501 6.738 15.922 10.592 16 12C15.922 13.408 14.501 17.262 12 21C9.499 17.262 8.078 13.408 8 12C8.078 10.592 9.499 6.738 12 3Z" stroke="#3B82F6" stroke-width="1.5"/></svg>'
    };

    function applyButtonStyle(btn, type, icon) {
        Object.assign(btn.style, {
            cursor: 'pointer',
            backgroundColor: 'transparent',
            color: '#555',
            border: '1px solid #ddd',
            borderRadius: '4px',
            padding: '2px 6px',
            fontSize: '12px',
            marginRight: '5px',
            transition: 'all 0.15s ease-in-out',
            fontWeight: '400',
            lineHeight: '1.5',
            verticalAlign: 'middle',
            touchAction: 'manipulation',
            width: '30px',
            height: '26px',
            minWidth: '30px',
            minHeight: '26px',
            boxSizing: 'border-box',
        });

        const titles = {
            copy: '复制磁力链',
            offline: '推送到115离线',
            open: '打开磁力链'
        };
        btn.title = titles[type] || '操作';

        btn.innerHTML = icon || ICONS[type] || ICONS.offline;

        btn.addEventListener('mouseenter', () => {
            btn.style.backgroundColor = '#f0f0f0';
            btn.style.borderColor = '#ccc';
        });
        btn.addEventListener('mouseleave', () => {
            btn.style.backgroundColor = 'transparent';
            btn.style.borderColor = '#ddd';
        });
        btn.addEventListener('touchstart', () => {
            btn.style.backgroundColor = '#f0f0f0';
            btn.style.borderColor = '#ccc';
        });
        btn.addEventListener('touchend', () => {
            btn.style.backgroundColor = 'transparent';
            btn.style.borderColor = '#ddd';
        });
    }

    function createButtonContainer(options = {}) {
        const elementType = options.elementType || 'span';
        const btnContainer = document.createElement(elementType);
        btnContainer.className = 'magnet-action-buttons';

        const styles = {
            display: 'inline-block',
            marginRight: options.marginRight || '5px',
            marginLeft: options.marginLeft || '0px',
            verticalAlign: options.verticalAlign || 'middle',
            ...options.customStyles
        };

        Object.assign(btnContainer.style, styles);
        return btnContainer;
    }

    function createCombinedButtons(magnetLinkOrElement) {
        const combinedBtn = document.createElement('button');
        combinedBtn.className = 'magnet-combined-button';
        combinedBtn.style.display = 'inline-flex';
        combinedBtn.style.alignItems = 'center';
        combinedBtn.style.justifyContent = 'center';
        combinedBtn.style.backgroundColor = 'transparent';
        combinedBtn.style.border = '1px solid #ddd';
        combinedBtn.style.borderRadius = '3px';
        combinedBtn.style.padding = '2px';
        combinedBtn.style.fontSize = '12px';
        combinedBtn.style.cursor = 'pointer';
        combinedBtn.style.transition = 'all 0.15s ease-in-out';
        combinedBtn.style.userSelect = 'none';
        combinedBtn.style.boxSizing = 'border-box';
        combinedBtn.style.height = '26px';

        const createButtonPart = (type, icon, isLast = false) => {
            const part = document.createElement('span');
            part.className = `magnet-button-part ${type}-part`;
            part.style.padding = '0 6px';
            part.style.color = '#333';
            part.style.transition = 'all 0.15s ease-in-out';
            part.style.display = 'inline-flex';
            part.style.alignItems = 'center';
            part.style.justifyContent = 'center';
            part.style.minWidth = '20px';
            part.style.height = '22px';
            part.innerHTML = icon;
            part.dataset.type = type;
            
            const titles = {
                copy: '复制磁力链',
                offline: '推送到115离线',
                open: '打开磁力链'
            };
            part.title = titles[type] || '操作';
            
            return part;
        };

        const copyPart = createButtonPart('copy', ICONS.copy);
        const offlinePart = createButtonPart('offline', ICONS.offline);
        let openPart = null;

        if (CONFIG.enableOpenButton) {
            openPart = createButtonPart('open', ICONS.open);
        }

        const buttonParts = [];

        if (CONFIG.enableCopyButton) {
            buttonParts.push(copyPart);
        }

        if (CONFIG.enableOfflineButton) {
            buttonParts.push(offlinePart);
        }

        if (CONFIG.enableOpenButton && openPart) {
            buttonParts.push(openPart);
        }

        if (buttonParts.length > 0) {
            buttonParts[0].style.borderRadius = '2px 0 0 2px';
            combinedBtn.appendChild(buttonParts[0]);

            for (let i = 1; i < buttonParts.length; i++) {
                const sep = document.createElement('span');
                sep.style.padding = '0 2px';
                sep.style.color = '#999';
                sep.innerText = '|';
                combinedBtn.appendChild(sep);
                combinedBtn.appendChild(buttonParts[i]);
            }

            buttonParts[buttonParts.length - 1].style.borderRadius = '0 2px 2px 0';
        }

        combinedBtn.addEventListener('mouseenter', () => {
            combinedBtn.style.backgroundColor = '#f5f5f5';
            combinedBtn.style.borderColor = '#ccc';
        });
        combinedBtn.addEventListener('mouseleave', () => {
            combinedBtn.style.backgroundColor = 'transparent';
            combinedBtn.style.borderColor = '#ddd';
        });

        combinedBtn.addEventListener('click', async (e) => {
            e.preventDefault();
            e.stopPropagation();

            const clickedPart = e.target.closest('.magnet-button-part');
            if (!clickedPart) return;

            const type = clickedPart.dataset.type;
            const magnetLink = typeof magnetLinkOrElement === 'string' ? magnetLinkOrElement : await extractMagnetLink(magnetLinkOrElement);

            if (!magnetLink) return;

            if (type === 'copy') {
                await handleCopyAction(combinedBtn, magnetLink);
            } else if (type === 'offline') {
                await handleOfflineAction(combinedBtn, magnetLink);
            } else if (type === 'open') {
                window.open(magnetLink, '_blank');
                showNotification('已打开磁力链', '磁力链已在新标签页打开');
                showButtonFeedback(combinedBtn, 'open');
            }
        });

        return combinedBtn;
    }

    function setupButtonClickHandler(btn, type, element) {
        const handleClick = async (e) => {
            e.preventDefault();
            e.stopPropagation();

            const magnetLink = typeof element === 'string' ? element : await extractMagnetLink(element);
            if (!magnetLink) return;

            if (type === 'copy') {
                await handleCopyAction(btn, magnetLink);
            } else {
                await handleOfflineAction(btn, magnetLink);
            }
        };

        btn.addEventListener('click', handleClick);
        btn.addEventListener('touchend', handleClick);
    }

    async function handleCopyAction(btn, magnetLink) {
        try {
            let decodedMagnetLink = magnetLink;
                try {
                    decodedMagnetLink = decodeURIComponent(magnetLink);
                } catch (e) {
                }

            GM_setClipboard(decodedMagnetLink, 'text');

            if (isMobile && navigator.clipboard && navigator.clipboard.writeText) {
                try {
                    await navigator.clipboard.writeText(decodedMagnetLink);
                } catch (clipboardError) {
                    console.log('使用navigator.clipboard失败:', clipboardError);
                }
            }

            let displayText = decodedMagnetLink;

            showNotification('磁力链已复制', displayText);
            showButtonFeedback(btn, 'copy');
        } catch (error) {
            showNotification('复制失败', `请手动复制: ${magnetLink}`);
        }
    }

    const SUCCESS_FEEDBACK_SVG = '<svg width="15" height="15" viewBox="0 0 14 14" style="display:inline-flex;align-items:center;justify-content:center;"><circle cx="7" cy="7" r="7" fill="#4caf50"/><polyline points="4,7 6,9 10,5" fill="none" stroke="#fff" stroke-width="1.5"/></svg>';

    function showButtonFeedback(btn, type = null) {
        const feedbackHTML = SUCCESS_FEEDBACK_SVG;

        if (btn.classList.contains('magnet-combined-button')) {
            let clickedPart;
            if (type) {
                clickedPart = btn.querySelector(`.magnet-button-part[data-type="${type}"]`);
            } else {
                clickedPart = btn.querySelector('.magnet-button-part');
            }

            if (clickedPart) {
                const originalContent = clickedPart.innerHTML;
                clickedPart.style.minHeight = '22px';
                clickedPart.style.display = 'inline-flex';
                clickedPart.style.alignItems = 'center';
                clickedPart.style.justifyContent = 'center';
                clickedPart.innerHTML = feedbackHTML;
                btn.disabled = true;
                setTimeout(() => {
                    clickedPart.innerHTML = originalContent;
                    btn.disabled = false;
                }, 2000);
            }
        } else {
            const originalHTML = btn.innerHTML;
            btn.style.minHeight = '26px';
            btn.innerHTML = feedbackHTML;
            btn.disabled = true;
            setTimeout(() => {
                btn.innerHTML = originalHTML;
                btn.disabled = false;
            }, 2000);
        }
    }

    async function handleOfflineAction(btn, magnetLink) {
        await process115Offline(magnetLink);
        showButtonFeedback(btn, 'offline');
    }

    function handleBT4GSite() {
        document.querySelectorAll('.result-item h5 > a[href^="/magnet/"]').forEach(titleA => {
            if (titleA.dataset.bt4gButtonsAdded) return;
            titleA.dataset.bt4gButtonsAdded = 'true';

            const btnContainer = createButtonContainer({
                marginRight: '8px'
            });
            const combinedBtn = createCombinedButtons(titleA);
            btnContainer.appendChild(combinedBtn);
            titleA.parentNode.insertBefore(btnContainer, titleA);
        });

        document.querySelectorAll('.card-body').forEach(cardBody => {
            if (cardBody.dataset.buttonsAdded) return;

            const magnetBtn = cardBody.querySelector('a[href*="downloadtorrentfile.com/hash/"]');
            if (!magnetBtn) return;

            cardBody.dataset.buttonsAdded = true;
            const btnContainer = createButtonContainer({
                elementType: 'div',
                marginRight: '10px'
            });
            const combinedBtn = createCombinedButtons(magnetBtn);
            btnContainer.appendChild(combinedBtn);
            magnetBtn.parentNode.insertBefore(btnContainer, magnetBtn);
        });
    }

    async function fetchBT4GMagnetFromDetail(detailHref) {
        try {
            let url = detailHref;
            if (!/^https?:/.test(url)) {
                url = location.origin + url;
            }
            const resp = await fetch(url, { credentials: 'omit' });
            const html = await resp.text();
            const parser = new DOMParser();
            const doc = parser.parseFromString(html, 'text/html');
            const magnetA = doc.querySelector('a.btn.btn-primary.me-2[href*="downloadtorrentfile.com/hash/"]');
            if (!magnetA) return null;

            const href = magnetA.href;
            const hashMatch = href.match(/hash\/([a-f0-9]{40})/i);
            if (!hashMatch) return null;

            const hash = hashMatch[1];
            const nameMatch = href.match(/[?&]name=([^&]+)/i);

            let magnetLink = `magnet:?xt=urn:btih:${hash}`;

            if (nameMatch && nameMatch[1]) {
                const name = nameMatch[1];
                magnetLink += `&dn=${name}`;
            }

            return magnetLink;
        } catch (e) {
            return null;
        }
    }

    function handleCommonSites() {
        if (/sobt[^.]+\..+/.test(window.location.host)) {
            handleSOBTSite();
        }
        else if (window.location.host.endsWith('btdig.com')) {
            handleBTDigSite();
        }
        else if (window.location.host.includes('nyaa.si')) {
            handleNyaaSite();
        }
        else if (window.location.host.includes('dmhy.org')) {
            handleDMHYSite();
        }
        else if (/(\.gying|\.gyg)\..+/.test(window.location.host)) {
            handleGyingGygSite();
        }
        else if (/(\.|^)btsow\./.test(window.location.host)) {
            handleBtsowSite();
        }
        else if (/\.btmulu\./.test(window.location.host)) {
            handleBTMULUSite();
        }
    }

    function handleBtsowSite() {
        document.querySelectorAll('.row.data-row .file').forEach(titleLink => {
            if (titleLink.dataset.buttonsAdded) return;

            titleLink.dataset.buttonsAdded = true;

            const btnContainer = createButtonContainer({
                marginRight: '8px'
            });

            const magnetLink = extractBtsowMagnetLink(titleLink);
            if (!magnetLink) return;

            const combinedBtn = createCombinedButtons(magnetLink);
            btnContainer.appendChild(combinedBtn);

            titleLink.parentNode.insertBefore(btnContainer, titleLink);
        });

        document.querySelectorAll('textarea.magnet-link[readonly]').forEach(textarea => {
            if (textarea.dataset.buttonsAdded) return;

            textarea.dataset.buttonsAdded = true;

            const magnetLink = textarea.value.trim();
            if (!magnetLink || !magnetLink.startsWith('magnet:')) return;

            const btnContainer = document.createElement('div');
            btnContainer.className = 'magnet-action-buttons';
            btnContainer.style.display = 'inline-block';
            btnContainer.style.marginLeft = '10px';
            btnContainer.style.verticalAlign = 'middle';

            const combinedBtn = createCombinedButtons(magnetLink);
            btnContainer.appendChild(combinedBtn);

            textarea.parentNode.insertBefore(btnContainer, textarea.nextSibling);
        });
    }

    async function fetchBTMULUMagnetFromDetail(detailHref) {
        try {
            let url = detailHref;
            if (!/^https?:/.test(url)) {
                url = location.origin + url;
            }
            const resp = await fetch(url, { credentials: 'omit' });
            const html = await resp.text();
            const parser = new DOMParser();
            const doc = parser.parseFromString(html, 'text/html');
            const magnetA = doc.querySelector('div.media-body a[href^="magnet:"]');
            if (!magnetA) return null;

            return magnetA.href;
        } catch (e) {
            console.error('获取BTMULU磁力链失败:', e);
            return null;
        }
    }

    function handleBTMULUSite() {
        document.querySelectorAll('div[style="overflow: hidden;"] a[href^="/hash/"] h4').forEach(titleElement => {
            const titleLink = titleElement.closest('a[href^="/hash/"]');
            if (!titleLink || titleLink.dataset.buttonsAdded) return;

            titleLink.dataset.buttonsAdded = true;

            const labelElement = titleElement.querySelector('span.label');
            if (!labelElement) return;

            const btnContainer = createButtonContainer({
                customStyles: {
                    margin: '0 8px'
                }
            });

            (async () => {
                try {
                    const magnetLink = await fetchBTMULUMagnetFromDetail(titleLink.href);
                    if (magnetLink) {
                        const combinedBtn = createCombinedButtons(magnetLink);
                        btnContainer.appendChild(combinedBtn);
                        if (labelElement.nextSibling) {
                            titleElement.insertBefore(btnContainer, labelElement.nextSibling);
                        } else {
                            titleElement.appendChild(btnContainer);
                        }
                    }
                } catch (e) {
                    console.error('处理BTMULU磁力链失败:', e);
                }
            })();
          });

        document.querySelectorAll('div.media-body a[href^="magnet:"]').forEach(magnetLink => {
            if (magnetLink.dataset.buttonsAdded) return;

            magnetLink.dataset.buttonsAdded = true;

            const btnContainer = createButtonContainer({
                elementType: 'div',
                customStyles: {
                    display: 'block',
                    marginTop: '10px'
                }
            });

            const combinedBtn = createCombinedButtons(magnetLink.href);
            btnContainer.appendChild(combinedBtn);

            magnetLink.parentNode.insertBefore(btnContainer, magnetLink.nextSibling);
        });
    }

    function extractBtsowMagnetLink(element) {
        try {
            const hashMatch = element.href.match(/detail\/(\w+)/i);
            if (hashMatch && hashMatch[1]) {
                const titleText = element.textContent.trim();
                return `magnet:?xt=urn:btih:${hashMatch[1]}&dn=${encodeURIComponent(titleText)}`;
            }
            throw new Error('无法提取磁力链Hash');
        } catch (error) {
            return null;
        }
    }

    function handleSOBTSite() {
        document.querySelectorAll('h3 > a[href^="/torrent/"]').forEach(titleLink => {
            if (titleLink.dataset.buttonsAdded) return;

            titleLink.dataset.buttonsAdded = true;

            const btnContainer = document.createElement('span');
            btnContainer.className = 'magnet-action-buttons';
            btnContainer.style.display = 'inline-block';
            btnContainer.style.marginRight = '5px';

            const combinedBtn = createCombinedButtons(titleLink);
            btnContainer.appendChild(combinedBtn);

            titleLink.parentNode.insertBefore(btnContainer, titleLink);
        });

        document.querySelectorAll('a.download[id="down-url"]').forEach(openLinkBtn => {
            if (openLinkBtn.dataset.buttonsAdded) return;
            openLinkBtn.dataset.buttonsAdded = true;

            const btnContainer = createButtonContainer({
                marginRight: '8px'
            });

            const magnetLink = openLinkBtn.href;

            const combinedBtn = createCombinedButtons(magnetLink);
            btnContainer.appendChild(combinedBtn);

            openLinkBtn.parentNode.insertBefore(btnContainer, openLinkBtn);
        });
    }

    function handleBTDigSite() {
        document.querySelectorAll('.torrent_name > a').forEach(titleLink => {
            if (titleLink.dataset.buttonsAdded) return;

            titleLink.dataset.buttonsAdded = true;

            const btnContainer = createButtonContainer({
                marginRight: '10px'
            });

            let resultDiv = titleLink.closest('.one_result');
            let magnetLink = resultDiv ? resultDiv.querySelector('.torrent_magnet a[href^="magnet:"]') : null;
            if (!magnetLink) return;

            const combinedBtn = createCombinedButtons(magnetLink);
            btnContainer.appendChild(combinedBtn);

            titleLink.parentNode.insertBefore(btnContainer, titleLink);
        });

        document.querySelectorAll('tr td div.fa.fa-magnet a[href^="magnet:"]').forEach(magnetLink => {
            if (magnetLink.dataset.buttonsAdded) return;

            magnetLink.dataset.buttonsAdded = true;

            const btnContainer = createButtonContainer({
                marginLeft: '10px'
            });

            const combinedBtn = createCombinedButtons(magnetLink);
            btnContainer.appendChild(combinedBtn);

            magnetLink.parentNode.appendChild(btnContainer);
        });
    }

    function handleNyaaSite() {
        document.querySelectorAll('td.text-center a[href^="magnet:"]').forEach(magnetLink => {
            if (magnetLink.dataset.buttonsAdded) return;

            magnetLink.dataset.buttonsAdded = true;

            let tr = magnetLink.closest('tr');
            let downloadBtn = tr ? tr.querySelector("a[href^='/download/']") : null;
            const btnContainer = createButtonContainer({
                marginRight: '6px',
                customStyles: {
                    display: 'inline-flex',
                    alignItems: 'center'
                }
            });

            const combinedBtn = createCombinedButtons(magnetLink);
            btnContainer.appendChild(combinedBtn);

            if (downloadBtn) {
                downloadBtn.parentNode.insertBefore(btnContainer, downloadBtn);
            } else {
                magnetLink.parentNode.insertBefore(btnContainer, magnetLink.nextSibling);
            }
        });

        document.querySelectorAll('.panel-footer .card-footer-item[href^="magnet:"]').forEach(magnetLink => {
            if (magnetLink.dataset.buttonsAdded) return;
            magnetLink.dataset.buttonsAdded = true;

            const btnContainer = createButtonContainer({
                marginLeft: '10px'
            });

            const combinedBtn = createCombinedButtons(magnetLink);
            btnContainer.appendChild(combinedBtn);

            magnetLink.parentNode.insertBefore(btnContainer, magnetLink.nextSibling);
        });
    }

    function handleDMHYSite() {
        const magnetHeader = document.querySelector('#topic_list th:nth-child(4)');
        if (magnetHeader) {
            magnetHeader.style.width = '18%';
        }

        document.querySelectorAll('a.download-arrow.arrow-magnet').forEach(magnetLink => {
            if (magnetLink.dataset.buttonsAdded) return;

            magnetLink.dataset.buttonsAdded = true;

            const btnContainer = createButtonContainer({
                marginLeft: '5px'
            });

            const combinedBtn = createCombinedButtons(magnetLink);
            btnContainer.appendChild(combinedBtn);

            magnetLink.parentNode.insertBefore(btnContainer, magnetLink);
        });

        document.querySelectorAll('#tabs-1 a.magnet, #tabs-1 a#magnet2').forEach(magnetLink => {
            if (magnetLink.dataset.buttonsAdded) return;

            magnetLink.dataset.buttonsAdded = true;

            const btnContainer = createButtonContainer({
                marginLeft: '5px'
            });

            const combinedBtn = createCombinedButtons(magnetLink);
            btnContainer.appendChild(combinedBtn);

            magnetLink.parentNode.insertBefore(btnContainer, magnetLink.nextSibling);
        });
    }

    function handleGyingGygSite() {
        document.querySelectorAll('li.down-list2').forEach(item => {
            const magnetLink = item.querySelector('a.torrent[href^="magnet:"]');
            const detailLink = item.querySelector('a[href^="/bt/"]');

            if (!magnetLink || !detailLink || detailLink.dataset.buttonsAdded) return;

            detailLink.dataset.buttonsAdded = true;

            const btnContainer = document.createElement('span');
            btnContainer.className = 'magnet-action-buttons';
            btnContainer.style.display = 'inline-block';
            btnContainer.style.marginRight = '8px';

            const combinedBtn = createCombinedButtons(magnetLink);
            btnContainer.appendChild(combinedBtn);

            detailLink.parentNode.insertBefore(btnContainer, detailLink);
        });

        document.querySelectorAll('div.alert-info ul.down123').forEach(list => {
            const magnetItem = list.querySelector('li[data-clipboard-text^="magnet:"]');

            if (!magnetItem || magnetItem.dataset.buttonsAdded) return;

            magnetItem.dataset.buttonsAdded = true;

            const magnetLink = magnetItem.getAttribute('data-clipboard-text');

            if (!magnetLink || !magnetLink.startsWith('magnet:')) return;

            const newLi = document.createElement('li');
            newLi.className = 'magnet-script-custom-li';

            Object.assign(newLi.style, {
                display: 'inline-flex',
                alignItems: 'center',
                marginRight: '8px',
                verticalAlign: 'middle',
                padding: '0',
                backgroundColor: 'transparent',
                border: 'none',
                boxShadow: 'none',
                listStyle: 'none',
                fontSize: '12px',
                lineHeight: '1.5',
                fontFamily: 'Arial, sans-serif',
                color: '#333',
                textDecoration: 'none',
                userSelect: 'none',
                float: 'none',
                clear: 'none',
                width: 'auto',
                height: 'auto',
                minWidth: '0',
                minHeight: '0',
                maxWidth: 'none',
                maxHeight: 'none',
                position: 'relative',
                overflow: 'visible',
                zIndex: '100',
                whiteSpace: 'nowrap',
                transform: 'translateY(-8.5px)'
            });

            const combinedBtn = createCombinedButtons(magnetLink);
            combinedBtn.className = 'magnet-combined-button';

            newLi.appendChild(combinedBtn);

            list.insertBefore(newLi, magnetItem);
        });
    }

    async function extractMagnetLink(element) {
        try {
            if (typeof element === 'string') {
                if (element.startsWith('magnet:')) {
                    return element;
                }
                throw new Error('无法提取磁力链Hash');
            }

            if (element.href) {
                if (element.href.startsWith('magnet:')) {
                    return element.href;
                }
                if (element.href.includes('/magnet/')) {
                    return await fetchBT4GMagnetFromDetail(element.href);
                }
                if (element.href.includes('/torrent/')) {
                    const hashMatch = element.href.match(/\/torrent\/([a-f0-9]+)\.html$/i);
                    if (hashMatch && hashMatch[1]) {
                        return `magnet:?xt=urn:btih:${hashMatch[1]}`;
                    }
                }
                if (element.href.includes('downloadtorrentfile.com/hash/')) {
                    const hashMatch = element.href.match(/hash\/([a-f0-9]+)/i);
                    if (hashMatch && hashMatch[1]) {
                        const hash = hashMatch[1];
                        const nameMatch = element.href.match(/[?&]name=([^&]+)/i);
                        let magnetLink = `magnet:?xt=urn:btih:${hash}`;
                        if (nameMatch && nameMatch[1]) {
                            magnetLink += `&dn=${nameMatch[1]}`;
                        }
                        return magnetLink;
                    }
                }
                if (element.href.includes('/hash/')) {
                    const hashMatch = element.href.match(/\/hash\/([a-f0-9]+)\.html$/i);
                    if (hashMatch && hashMatch[1]) {
                        return `magnet:?xt=urn:btih:${hashMatch[1]}`;
                    }
                }
            }

            throw new Error('无法提取磁力链Hash');
        } catch (error) {
            showNotification('错误', error.message);
            return null;
        }
    }

    async function check115Login(forceCheck = false) {
        try {
            const lastRefresh = GM_getValue('115_last_cookie_refresh', 0);
            const currentCookies = GM_getValue('115_cookies', '');

            if (!forceCheck && currentCookies && Date.now() - lastRefresh < CONFIG.cookieRefreshInterval) {
                return true;
            }

            const cookies = await getCurrent115Cookies();
            if (!cookies) {
                GM_setValue('115_cookies', '');
                GM_setValue('115_last_cookie_refresh', 0);
                return false;
            }

            const isValid = await validate115Cookies(cookies);
            if (isValid) {
                GM_setValue('115_cookies', cookies);
                GM_setValue('115_last_cookie_refresh', Date.now());
                return true;
            }

            GM_setValue('115_cookies', '');
            GM_setValue('115_last_cookie_refresh', 0);
            return false;
        } catch (error) {
            console.error('检查登录(不可用)状态失败:', error);
            return false;
        }
    }

    function getCurrent115Cookies() {
        return new Promise((resolve) => {
            GM_xmlhttpRequest({
                url: 'https://115.com/',
                method: 'GET',
                anonymous: true,
                onload: function(response) {
                    const cookieHeader = response.responseHeaders
                        .split('\n')
                        .find(row => row.toLowerCase().startsWith('set-cookie:'));

                    if (cookieHeader) {
                        const cookies = cookieHeader.replace(/^set-cookie:\s*/i, '').split(';')[0];
                        resolve(cookies);
                    } else {
                        if (response.finalUrl.includes('login.115.com')) {
                            resolve('');
                        } else {
                            const savedCookies = GM_getValue('115_cookies', '');
                            resolve(savedCookies);
                        }
                    }
                },
                onerror: () => resolve('')
            });
        });
    }

    function validate115Cookies(cookies) {
        return new Promise((resolve) => {
            GM_xmlhttpRequest({
                url: 'https://115.com/web/lixian/',
                method: 'GET',
                headers: {
                    'Cookie': cookies
                },
                onload: function(response) {
                    resolve(!response.finalUrl.includes('login.115.com'));
                },
                onerror: () => resolve(false)
            });
        });
    }

    async function process115Offline(magnetLink) {
        const notificationId = Date.now();

        try {
            showNotification('115离线', '正在检查登录(不可用)状态...', notificationId);
            const isLoggedIn = await check115Login(true);
            if (!isLoggedIn) {
                throw new Error('请先登录(不可用)115网盘');
            }

            showNotification('115离线', '正在提交离线任务...', notificationId);
            const result = await submit115OfflineTask(magnetLink);
            handleOfflineResult(result);

        } catch (error) {
            showNotification('115离线失败', error.message);

            if (error.message.includes('登录(不可用)')) {
                setTimeout(() => {
                    if (confirm('需要登录(不可用)115网盘,是否进入115网盘登录(不可用)页面?')) {
                        window.open('https://115.com/?mode=login', '_blank');
                    }
                }, 500);
            }
        }
    }

    async function submit115OfflineTask(magnetLink) {
        const cookies = GM_getValue('115_cookies', '');
        if (!cookies) {
            throw new Error('未检测到有效的登录(不可用)状态');
        }

        const response = await fetch115Api(
            `https://115.com/web/lixian/?ct=lixian&ac=add_task_url&url=${encodeURIComponent(magnetLink)}`,
            {
                headers: {
                    'Cookie': cookies
                }
            }
        );

        return tryParseJson(response);
    }

    function handleOfflineResult(result) {
        if (!result) {
            throw new Error('无效的响应');
        }

        if (result.state) {
            showNotification('115离线成功', '任务已成功添加到离线下载列表');
            return;
        }

        const errorMsg = ERROR_CODES[result.errcode] || result.error_msg || '未知错误';
        throw new Error(errorMsg);
    }

    function fetch115Api(url, options = {}) {
        return new Promise((resolve, reject) => {
            GM_xmlhttpRequest({
                url: url,
                method: options.method || 'GET',
                headers: {
                    'User-Agent': navigator.userAgent,
                    'Origin': 'https://115.com',
                    ...(options.headers || {})
                },
                data: options.body,
                onload: function(response) {
                    if (response.status >= 200 && response.status < 300) {
                        resolve(response.responseText);
                    } else {
                        reject(new Error(`请求失败: ${response.status}`));
                    }
                },
                onerror: reject
            });
        });
    }

    function tryParseJson(text) {
        try {
            return JSON.parse(text);
        } catch (e) {
            return null;
        }
    }

    function showNotification(title, text, id = null) {
        const notificationContainer = document.createElement('div');
        notificationContainer.className = 'custom-notification';
        notificationContainer.id = id ? `notification-${id}` : `notification-${Date.now()}`;

        Object.assign(notificationContainer.style, {
            position: 'fixed',
            bottom: '20px',
            right: '20px',
            padding: '12px 16px',
            backgroundColor: 'rgba(255, 255, 255, 0.8)',
            color: '#333',
            borderRadius: '8px',
            boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',
            zIndex: '9999',
            maxWidth: '300px',
            wordWrap: 'break-word',
            opacity: '0',
            transform: 'translateY(20px)',
            transition: 'opacity 0.3s ease, transform 0.3s ease',
            fontFamily: 'system-ui, -apple-system, BlinkMacSystemFont, sans-serif',
            backdropFilter: 'blur(10px)',
            WebkitBackdropFilter: 'blur(10px)',
            border: '1px solid rgba(255, 255, 255, 0.2)'
        });

        const titleElement = document.createElement('div');
        titleElement.textContent = title;
        titleElement.style.fontWeight = 'bold';
        titleElement.style.marginBottom = '4px';

        const textElement = document.createElement('div');
        try {
            if (text && (text.includes('%') || text.includes('magnet:'))) {
                textElement.textContent = decodeURIComponent(text);
            } else {
                textElement.textContent = text;
            }
        } catch (e) {
            textElement.textContent = text;
        }
        textElement.style.fontSize = '14px';

        notificationContainer.appendChild(titleElement);
        notificationContainer.appendChild(textElement);

        document.body.appendChild(notificationContainer);

        setTimeout(() => {
            notificationContainer.style.opacity = '1';
            notificationContainer.style.transform = 'translateY(0)';
        }, 10);

        const timeoutId = setTimeout(() => {
            notificationContainer.style.opacity = '0';
            notificationContainer.style.transform = 'translateY(20px)';

            setTimeout(() => {
                if (document.body.contains(notificationContainer)) {
                    document.body.removeChild(notificationContainer);
                }
            }, 300);
        }, CONFIG.notificationTimeout);

        notificationContainer.addEventListener('click', () => {
            clearTimeout(timeoutId);
            notificationContainer.style.opacity = '0';
            notificationContainer.style.transform = 'translateY(20px)';
            setTimeout(() => {
                if (document.body.contains(notificationContainer)) {
                    document.body.removeChild(notificationContainer);
                }
            }, 300);
        });
    }

    initializeScript();
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址