您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
为 RARBG 定制的强力工具箱
// ==UserScript== // @name RARBG Helper // @name:zh-CN RARBG 助手 // @author PeratX // @connect * // @description Powerful Toolbox for RARBG // @description:zh-cn 为 RARBG 定制的强力工具箱 // @grant GM_xmlhttpRequest // @license Apache License 2.0 // @match *://rarbg.to/* // @match *://rarbg2018.org/* // @match *://rarbg2019.org/* // @match *://rarbg2020.org/* // @match *://rarbg2021.org/* // @match *://rarbgaccess.org/* // @match *://rarbgaccessed.org/* // @match *://rarbgcdn.org/* // @match *://rarbgcore.org/* // @match *://rarbgdata.org/* // @match *://rarbgenter.org/* // @match *://rarbgget.org/* // @match *://rarbggo.org/* // @match *://rarbgindex.org/* // @match *://rarbgmirror.org/* // @match *://rarbgmirrored.org/* // @match *://rarbgp2p.org/* // @match *://rarbgproxied.org/* // @match *://rarbgproxies.org/* // @match *://rarbgproxy.org/* // @match *://rarbgprx.org/* // @match *://rarbgto.org/* // @match *://rarbgtor.org/* // @match *://rarbgtorrents.org/* // @match *://rarbgunblock.org/* // @match *://rarbgunblocked.org/* // @match *://rarbgway.org/* // @match *://rarbgweb.org/* // @match *://proxyrarbg.org/* // @match *://unblockedrarbg.org/* // @match *://rarbg.com/* // @match *://rarbgmirror.com/* // @match *://rarbgproxy.com/* // @match *://rarbgunblock.com/* // @namespace https://peratx.net // @supportURL https://github.com/PeratX/RARBGHelper // @version 1.7.5 // ==/UserScript== (async () => { "use strict"; const settings = { downloadImg: '<img src="//dyncdn.me/static/20/img/16x16/download.png" style="height:12px;margin-bottom:-2px;" />', loadInfoOnHover: (typeof localStorage.getItem("loadInfoOnHover") === 'string' ? !!localStorage.getItem("loadInfoOnHover") : true), localStorageMaxEntries: 1000, magnetImg: '<img src="//dyncdn.me/static/20/img/magnet.gif" style="height:12px;margin-bottom:-2px;" />', modifications: [ { ref: '#description img[src*="22pixx.xyz/os/"], #description img[src*="22pixx.xyz/rs/"], #description img[src*="22pixx.xyz/s/"]', handler(img) { img.src = img.src.replace(new RegExp(/\.xyz\/os\//), ".xyz/o/"); img.src = img.src.replace(new RegExp(/\.xyz\/rs\//), ".xyz/r/"); img.src = img.src.replace(new RegExp(/\.xyz\/s\//), ".xyz/i/"); img.style.maxWidth = "unset"; img.style.width = "100%"; }, }, { ref: '#description img[src*="imagecurl.com/images/"]', handler(img) { img.src = img.src.replace(new RegExp(/_thumb\./), "."); img.style.maxWidth = "unset"; img.style.width = "100%"; }, }, { ref: '#description img[src*="freebunker.com/tn/t"], #description img[src*="imgcarry.com/tn/t"], #description img[src*="imgshots.com/tn/t"], #description img[src*="imagesnake.com/tn/t"], #description img[src*="pornbus.org/tn/t"]', handler(img) { img.src = img.src.replace(new RegExp(/\/tn\/t/), "tn/i"); img.style.maxWidth = "unset"; img.style.width = "100%"; }, }, { ref: '#description img[src*="imgprime.com/uploads/"]', handler(img) { img.src = img.src.replace(new RegExp(/\/small\//), "/big/"); img.style.maxWidth = "unset"; img.style.width = "100%"; }, }, ], options: `<div style="align-items:center;display:flex;flex-direction:row;justify-content:center;">RARBG Helper <iframe src="//ghbtns.com/github-btn.html?user=PeratX&repo=RARBGHelper&type=star&count=true" frameborder="0" style="height:20px;width:120px;"></iframe> <input onchange='javascript:(()=>localStorage.setItem("loadInfoOnHover",this.checked?"1":""))();' type="checkbox" /> show more options on hover</div>`, }; let headerNode; if (document.querySelector("#searchTorrent")) headerNode = document.querySelector("#searchTorrent")?.closest("form"); else if (document.querySelector('td[align="center"] > b')?.innerText?.match(/top 100? torrents/i)) headerNode = document.querySelector('td[align="center"] > b')?.closest("table"); if (headerNode) { headerNode.innerHTML = settings.options + headerNode.innerHTML; headerNode.querySelector('input[type="checkbox"]').checked = settings.loadInfoOnHover; } else for (const modification of settings.modifications) if (modification.handler) for (const ref of document.querySelectorAll(modification.ref) || []) modification.handler(ref); document.onmousemove = (e) => { let xoff = e.pageX + xoffset; let yoff = e.pageY + yoffset; if (pop.children[0]) { const top = document.scrollingElement.scrollTop + document.scrollingElement.clientHeight - pop.children[0].height - 10; if (yoff > top) yoff = top; } pop.style.left = xoff + "px"; pop.style.top = yoff + "px"; }; const cache = []; function addSuffix(node) { const url = node?.getAttribute("href"); if (!cache.includes(url)) { cache.push(url); fetch(url) .then((res) => res.text()) .then((res) => { const $ = new DOMParser().parseFromString(res, "text/html"); const imdb = $.querySelector('a[href*="imdb.com/title/"]')?.getAttribute("href"); const ratingStars = $.querySelector("#ratingstars p")?.innerText || ''; const ref = $.querySelector("td.lista a[id]"); const downloadLink = ref?.getAttribute("href"); const magnetLink = ref?.nextElementSibling?.getAttribute("href"); node.parentNode.innerHTML = node.parentNode.innerHTML.replace(/(imdb: [0-9.\/]+)/i, `<a href="${imdb}" target="_blank">$1</a>`) + (downloadLink ? `<a href="${downloadLink}" target="_blank">${settings.downloadImg}</a> ` : '') + (magnetLink ? `<a href="${magnetLink}" target="_blank">${settings.magnetImg}</a> ` : '') + ratingStars; }); } } const opened = JSON.parse(localStorage.getItem("opened") || "[]"); const viewed = JSON.parse(localStorage.getItem("viewed") || "[]"); setTimeout(() => { for (let node of document.querySelectorAll('.lista2 > td:nth-child(2) > a[href^="/torrent/"], .lista_related a[href^="/torrent/"]') || []) { const borderNode = node.closest("tr")?.firstElementChild; if (viewed.includes(node.href)) borderNode.style.borderLeft = "2px solid yellow"; else viewed.push(node.href); if (opened.includes(node.href)) borderNode.style.borderLeft = "2px solid red"; const onMouseOver = node.attributes.onmouseover; if (!onMouseOver) continue; if (settings.loadInfoOnHover) node.addEventListener("mouseover", () => addSuffix(node)); const parts = onMouseOver.value.split("/"); switch (parts[3]) { case "static": { switch (parts[4]) { case "over": // 18+ onMouseOver.value = onMouseOver.value.replace("static/over", "posters2/" + parts[5].substr(0, 1)); break; case "20": // tvdb onMouseOver.value = onMouseOver.value.replace("_small", "_banner_optimized"); break; } break; } case "mimages": // movie onMouseOver.value = onMouseOver.value.replace("over_opt", "poster_opt"); break; } } }); if (location.href.match(/https?:\/\/[^\/]*rarbg[^\/]*\.[a-z]{2,4}\/torrent\/[^\/\?]+/) && !opened.includes(location.href)) opened.push(location.href); localStorage.setItem("opened", JSON.stringify(opened.slice(~settings.localStorageMaxEntries + 1))); localStorage.setItem("viewed", JSON.stringify(viewed.slice(~settings.localStorageMaxEntries + 1))); })();