🏠 Home 

MJZ-BT之家小助手

替换下载地址为真实地址,可以自动滚动至最新BT处,可以自动隐藏介绍,可以隐藏置顶帖子 。


Install this script?
// ==UserScript==
// @name         MJZ-BT之家小助手
// @namespace    https://github.com/maijz128
// @version      22.11.13
// @description  替换下载地址为真实地址,可以自动滚动至最新BT处,可以自动隐藏介绍,可以隐藏置顶帖子 。
// @author       MaiJZ
// @match        *://*.btbtt.co/*
// @match        *://*.btbtt.me/*
// @match        *://*.btbtt.net/*
// @match        *://*.btbtt.pw/*
// @match        *://*.btbtt.la/*
// @match        *://*.btbtt.org/*
// @match        *://*.btbtt15.com/*
// @match        *://*.btbtt11.com/*
// @match        *://*.btbtt12.com/*
// @match        *://*.btbtt13.com/*
// @require      https://greasyfork.org/scripts/39499-go-to-top/code/Go%20to%20Top.js
// @grant        none
// ==/UserScript==
const strContainerID = "btbtt-helper";
var css = "";
(function () {
'use strict';
// BT下载页面
if (matchURL("/attach-dialog")) {
autoClickDownload();
}
// 帖子页面
else if (matchURL("/thread-index-fid")) {
ThreadPage();
}
// 帖子浏览页面
else if (matchURL("/forum-index-fid")) {
ToggleTopThread();
}
// 搜索页面
else if (matchURL("/search-index-")) {
css += ".width {width: ####px !important; }";
css += ".wrapper_bg_c { display: none !important;}";
}
HighlightUserName();
css += "#threadtype a {font-family: 微软雅黑; text-shadow: 0 0 1.15px #fcf6ecd9, 0 0 1px #7b7b7b, 0 0 0.75px #65625e57;}";
css += "#wrapper2 > div.width.border{display: none !important;}";
addStyle(css);
})();
// BT下载页面 ////////////////////////////////////////////////////////////
function autoClickDownload() {
const AUTO_CLOSE_TIME = 800;
var inter = setInterval(function () {
var elA = document.querySelector("#body > div > dl dd a");
if (elA) {
console.log(elA);
clearInterval(inter);
window.location.href = elA.getAttribute("href");
setTimeout(function () {
window.close();
}, AUTO_CLOSE_TIME);
}
}, 50);
}
// 帖子页面 ////////////////////////////////////////////////////////////////
function ThreadPage() {
addContainer();
hideIntroduction();
replaceLink();
Post_DownloadAllBT();
Post_FixInvalidImage();
scrollToBT();
// 添加容器
function addContainer() {
var strContainer = '<div id="' + strContainerID + '" style="font-size: medium;"></div> ';
$('.post_td:first').prepend(strContainer);
var style = "#" + strContainerID + " span {";
style += "margin-right: 10px;";
style += "}";
addStyle(style);
}
// start 隐藏介绍
function hideIntroduction() {
var elContainer = $('#' + strContainerID);
// 添加toggle按钮
{
var fun_toggleIntroduction = '<script>function toggleIntroduction(){';
fun_toggleIntroduction += '$(".post_td .post:first").toggle();';
fun_toggleIntroduction += '}</script>';
$('head:first').append(fun_toggleIntroduction);
var strButton = '<button onclick="toggleIntroduction()" ' +
'style="width:100%;height:30px;">隐藏/显示介绍</button>';
elContainer.prepend(strButton);
}
// 添加选项按钮:是否自动隐藏介绍
{
var fun_toggleAutoHideIntroduction = '<script>function toggleAutoHideIntroduction(){';
fun_toggleAutoHideIntroduction += 'localStorage.isHideIntroduction = $("#cb-HideIntroduction").attr("checked");';
fun_toggleAutoHideIntroduction += '}</script>';
$('head:first').append(fun_toggleAutoHideIntroduction);
var strCheckbox_HideIntroduction = '<span><input type="checkbox" id="cb-HideIntroduction"';
strCheckbox_HideIntroduction += ' onchange="toggleAutoHideIntroduction()">';
strCheckbox_HideIntroduction += '自动隐藏介绍<span>';
elContainer.append(strCheckbox_HideIntroduction);
}
var isHideIntroduction = localStorage.isHideIntroduction || "false";
if (isHideIntroduction === "true") {
// 隐藏介绍
$('.post_td:first .post').hide();
$("#cb-HideIntroduction").attr("checked", true);
}
}
// 滚动至最新的bt
function scrollToBT() {
var elContainer = $('#' + strContainerID);
// 添加选项按钮:是否自动滚动
{
var fun_toggleAutoScrollToBT = '<script>function toggleAutoScrollToBT(){';
fun_toggleAutoScrollToBT += 'localStorage.isScrollToBT = $("#cb-ScrollToBT").attr("checked");';
fun_toggleAutoScrollToBT += '}</script>';
$('head:first').append(fun_toggleAutoScrollToBT);
var strCheckbox_HideIntroduction = '<span><input type="checkbox" id="cb-ScrollToBT"';
strCheckbox_HideIntroduction += ' onchange="toggleAutoScrollToBT()">';
strCheckbox_HideIntroduction += '自动滚动至最新发布的BT<span>';
elContainer.append(strCheckbox_HideIntroduction);
}
var isScrollToBT = localStorage.isScrollToBT || "false";
if (isScrollToBT === "true") {
$("#cb-ScrollToBT").attr("checked", true);
$('html, body').animate({
scrollTop: $(".post td a:last").offset().top - 100
}, 1000);
}
}
// 替换下载链接:下载网页->直接地址
function replaceLink() {
// 替换前:attach-dialog-fid-950-aid-4323928.htm
// 替换后:attach-download-fid-950-aid-4323928.htm
const QUERY = "#body table td.post_td div.post div.attachlist";
var el_attachlist_list = document.querySelectorAll(QUERY);
console.assert(el_attachlist_list.length > 0, "没找到BT列表");
el_attachlist_list.forEach(function (el_attachlist) {
var elA_list = el_attachlist.querySelectorAll("a");
if (elA_list) {
for (var i = 0; i < elA_list.length; i++) {
const itemA = elA_list[i];
const href = itemA.getAttribute("href");
const str1 = "attach-dialog-fid";
const str2 = "attach-download-fid";
const newHref = href.replace(str1, str2);
itemA.setAttribute("href", newHref);
}
}
});
}
}
function Post_DownloadAllBT(){
$(".post .attachlist").each(function(){
// var btnDownloadAllBT = '<a href="#" onclick="downloadAllBT(this)">下载所有BT</a>';
var btnDownloadAllBT = document.createElement("button");
btnDownloadAllBT.textContent = "下载所有BT";
btnDownloadAllBT.onclick = function(){
// console.log(this);
downloadAllBT(this);
};
$(this).append(btnDownloadAllBT);
});
var downloadAllBT = function(e){
var attachlist = $(e).parent();
var alist = attachlist.find("a");
alist.each(function(index){
var epHref = $(this).attr("href");
var epName = $(this).text();
console.log(epName);
console.log(epHref);
var url =  epHref;
setTimeout(function () {
window.open(url);
}, 500 * index + 500);
});
};
window.downloadAllBT= downloadAllBT;
document.downloadAllBT = downloadAllBT;
}
function Post_FixInvalidImage(){
$(".post img").each(function(){
var imgsrc = $(this).attr("src");
if (imgsrc.indexOf("btbtt") > -1) {
var newsrc = imgsrc.replace("http://", "").replace("https://", "");
var oldhost = newsrc.split("/")[0];
newsrc = newsrc.replace(oldhost, window.location.origin);
$(this).attr("src", newsrc);
}
});
}
// 帖子浏览页面:隐藏置顶帖子 ////////////////////////////////////////////////////////
function ToggleTopThread() {
const TITLE_SELECTOR = "#body div.header td.subject";
addToggleTopThreadButton();
addToggleTopThreadContainerFunction();
addCheckbox();
function addToggleTopThreadButton() {
var header_td = document.querySelector(TITLE_SELECTOR);
if (header_td) {
var strButton = '<button onclick="toggleTopThreadContainer()" ' +
'style="font-size: x-small; font-weight:bold;">显示/隐藏 置顶帖子</button>';
$(header_td).append(strButton);
}
}
function addToggleTopThreadContainerFunction() {
var toggleTopThreadFun = '<script> function toggleTopThreadContainer() {';
toggleTopThreadFun += '    $("#threadlist > .bg2").prevAll().toggle();';
toggleTopThreadFun += '} </script>';
$('head:first').prepend(toggleTopThreadFun);
}
// 添加选项按钮:是否自动隐藏置顶帖子
function addCheckbox() {
var fun_toggleAutoHideTopThread = '<script>function toggleAutoHideTopThread(){';
fun_toggleAutoHideTopThread += 'localStorage.isHideTopThread = $("#cb-HideTopThread").attr("checked");';
fun_toggleAutoHideTopThread += '}</script>';
$('head:first').append(fun_toggleAutoHideTopThread);
var strCheckbox_HideTopThread = '<span style="margin-left: 5px; font-weight:bold;">';
strCheckbox_HideTopThread += '<input type="checkbox" id="cb-HideTopThread"';
strCheckbox_HideTopThread += ' onchange="toggleAutoHideTopThread()">';
strCheckbox_HideTopThread += '自动隐藏置顶帖子<span>';
$(TITLE_SELECTOR).append(strCheckbox_HideTopThread);
}
var isHideTopThread = localStorage.isHideTopThread || "false";
if (isHideTopThread === "true") {
// 隐藏置顶帖子
$("#threadlist > .bg2").prevAll().hide();
$("#cb-HideTopThread").attr("checked", true);
}
}
function HighlightUserName(){
var SuperModerators = ["david19710102", "Eddie wang",
"lvchao9947", "Asuka601" //电影
];
$("td.username a").each(function(){
var name = $(this).text();
if (SuperModerators.includes(name)) {
$(this).parent().removeClass("grey");
$(this).parent().addClass("purple");
}
});
}
// Util //////////////////////////////////////////////////////
function matchURL(url) {
const URL = window.location.href;
return URL.indexOf(url) > -1;
}
function addStyle(styleContent) {
var elStyle = document.createElement("style");
elStyle.innerHTML = styleContent;
document.head.appendChild(elStyle);
}