tieba_hide_someone

屏蔽某些人的帖子

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey, το Greasemonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

You will need to install an extension such as Tampermonkey to install this script.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Userscripts για να εγκαταστήσετε αυτόν τον κώδικα.

You will need to install an extension such as Tampermonkey to install this script.

Θα χρειαστεί να εγκαταστήσετε μια επέκταση διαχείρισης κώδικα χρήστη για να εγκαταστήσετε αυτόν τον κώδικα.

(Έχω ήδη έναν διαχειριστή κώδικα χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Έχω ήδη έναν διαχειριστή στυλ χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

// ==UserScript==
// @name           tieba_hide_someone
// @description    屏蔽某些人的帖子
// @include        http://tieba.baidu.com/*
// @exclude        http://tieba.baidu.com/tb*
// @exclude        http://tieba.baidu.com/mo/*
// @icon           http://imgsrc.baidu.com/forum/pic/item/6fd108fb43166d229cb84fac452309f79152d2e2.png
// @author         congxz6688
// @version        2014.8.14.2
// @grant          GM_getValue
// @grant          GM_setValue
// @grant          GM_registerMenuCommand
// @namespace https://greasyfork.org/scripts/148
// ==/UserScript==


//脚本双存储相互恢复
if (!localStorage.tiebaHideBlackList && GM_getValue("tiebaHideBlackList", "") != "") {
	localStorage.tiebaHideBlackList = GM_getValue("tiebaHideBlackList");
}
if (GM_getValue("tiebaHideBlackList", "") == "" && localStorage.tiebaHideBlackList) {
	GM_setValue("tiebaHideBlackList", localStorage.tiebaHideBlackList);
}
if (!localStorage.whiteUserIds && GM_getValue("whiteUserIds", "") != "") {
	localStorage.whiteUserIds = GM_getValue("whiteUserIds");
}
if (GM_getValue("whiteUserIds", "") == "" && localStorage.whiteUserIds) {
	GM_setValue("whiteUserIds", localStorage.whiteUserIds);
}

//从存储的数据中提取黑白名单
var getBlackList = GM_getValue("tiebaHideBlackList", "") != "" ? GM_getValue("tiebaHideBlackList").split(",") : [];
var whiteUsIds = GM_getValue("whiteUserIds", "") != "" ? GM_getValue("whiteUserIds").split(",") : [];

//今天的日期
var yuy = new Date();
var fulltime = yuy.toLocaleDateString();
var $ = unsafeWindow.$;

//当前日期、用户、已屏蔽之数据
var userData = unsafeWindow.PageData;
var userName = userData.user.name ? userData.user.name : userData.user.user_name;
var HideToday = JSON.parse((localStorage["HideToday"]) ? localStorage["HideToday"] : "{}");
HideToday[userName] = HideToday[userName] ? HideToday[userName] : [];

function addStyle(css) {
	document.head.appendChild(document.createElement("style")).textContent = css;
}

function addNodeInsertedListener(elCssPath, handler, executeOnce, noStyle) {
	var animName = "anilanim",
	prefixList = ["-o-", "-ms-", "-khtml-", "-moz-", "-webkit-", ""],
	eventTypeList = ["animationstart", "webkitAnimationStart", "MSAnimationStart", "oAnimationStart"],
	forEach = function (array, func) {
		for (var i = 0, l = array.length; i < l; i++) {
			func(array[i]);
		}
	};
	if (!noStyle) {
		var css = elCssPath + "{",
		css2 = "";
		forEach(prefixList, function (prefix) {
			css += prefix + "animation-duration:.001s;" + prefix + "animation-name:" + animName + ";";
			css2 += "@" + prefix + "keyframes " + animName + "{from{opacity:.9;}to{opacity:1;}}";
		});
		css += "}" + css2;
		addStyle(css);
	}
	if (handler) {
		var bindedFunc = function (e) {
			var els = document.querySelectorAll(elCssPath),
			tar = e.target,
			match = false;
			if (els.length !== 0) {
				forEach(els, function (el) {
					if (tar === el) {
						if (executeOnce) {
							removeNodeInsertedListener(bindedFunc);
						}
						handler.call(tar, e);
						return;
					}
				});
			}
		};
		forEach(eventTypeList, function (eventType) {
			document.addEventListener(eventType, bindedFunc, false);
		});
		return bindedFunc;
	}
}
//移除精确监听
function removeNodeInsertedListener(bindedFunc) {
	var eventTypeList = ["animationstart", "webkitAnimationStart", "MSAnimationStart", "oAnimationStart"],
	forEach = function (array, func) {
		for (var i = 0, l = array.length; i < l; i++) {
			func(array[i]);
		}
	};
	forEach(eventTypeList, function (eventType) {
		document.removeEventListener(eventType, bindedFunc, false);
	});
}
//逐一屏蔽函数
function goHideOneByOne(nn, lp) {
	if (whiteUsIds.indexOf(userName) == -1) {
		if (HideToday.date != fulltime) {
			HideToday = {};
			HideToday.date = fulltime;
			HideToday[userName] = [];
		}
		getHiddenList = (HideToday[userName]) ? HideToday[userName] : [];
		if (getHiddenList.indexOf(getBlackList[nn]) == -1) {
			var postData = encodeURI("type=1&hide_un=" + getBlackList[nn] + "&ie=utf-8");
			var urll = "http://tieba.baidu.com/tphide/add";
			onebyone = new XMLHttpRequest();
			onebyone.open("POST", urll, true);
			onebyone.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			onebyone.setRequestHeader("Content-length", postData.length);
			onebyone.setRequestHeader("Connection", "close");
			onebyone.send(postData);
			onebyone.onreadystatechange = function () {
				if (onebyone.readyState == 4) {
					if (onebyone.status == 200) {
						var reTextTxt = JSON.parse(onebyone.responseText);
						console.log(fulltime + " 屏蔽 " + getBlackList[nn] + " " + reTextTxt.msg);
						ssw = HideToday[userName].push(getBlackList[nn]);
						if (nn == lp) {
							HideToday[userName] = getBlackList;
							localStorage["HideToday"] = JSON.stringify(HideToday);
							console.log(fulltime + " 眼中钉全部屏蔽完毕!");
						} else {
							localStorage["HideToday"] = JSON.stringify(HideToday);
							ns = nn + 1;
							setTimeout(function () {
								goHideOneByOne(ns, lp); //自调用,顺序循环
							}, 1000);
						}
					}
				}
			}
		} else {
			console.log(getBlackList[nn] + " 今天已经屏蔽过了。");
			if (nn == lp) {
				HideToday[userName] = getBlackList;
				localStorage["HideToday"] = JSON.stringify(HideToday);
				console.log(fulltime + " 眼中钉全部屏蔽完毕!");
			} else {
				ns = nn + 1;
				goHideOneByOne(ns, lp); //自调用,顺序循环
			}
		}
	}
}
//以用户脚本命令输入黑名单
function hideSomeOneBlackSet() {
	if (getBlackList.toString() == "") {
		mess = "请输入屏蔽黑名单,以小写的逗号相互隔开,可带小写空格,或者是小写的引号:";
		caseShow = "坏人甲,坏人乙";
	} else {
		mess = "请修改屏蔽黑名单,以小写的逗号相互隔开,可带小写空格,或者是小写的引号:";
		caseShow = getBlackList.toString();
	}
	var getSetData = prompt(mess, caseShow);
	getBlackList = (getSetData == "坏人甲,坏人乙" || getSetData == "") ? [] : getSetData.replace(/,/g, ",").replace(/\s/g, "").replace(/["']/g, "").split(",");
	localStorage.tiebaHideBlackList = getBlackList.toString();
	GM_setValue("tiebaHideBlackList", getBlackList.toString());
	goHideOneByOne(0, getBlackList.length - 1);
}
//以用户脚本命令输入马甲白名单
function hideSomeOneWhiteSet() {
	if (whiteUsIds.toString() == "") {
		mess = "请输入不执行本脚本的小号名单,以小写逗号相分隔,可带小写空格或小写引号,比如\r\n文科980195412是我的一个小号,当我用她登录时,不执行屏蔽:";
		caseShow = "文科980195412,xyz";
	} else {
		mess = "请修改不执行脚本的小号名单,以小写逗号相分隔,可带小写空格或小写引号:";
		caseShow = whiteUsIds.toString();
	}
	var getSetData = prompt(mess, caseShow);
	whiteUsIds = (getSetData == "文科980195412,xyz" || getSetData == "") ? [] : getSetData.replace(/,/g, ",").replace(/\s/g, "").replace(/["']/g, "").split(",");
	localStorage.whiteUserIds = whiteUsIds.toString();
	GM_setValue("whiteUserIds", whiteUsIds.toString());
}
GM_registerMenuCommand("tieba_Hide_SomeOne黑名单设置", hideSomeOneBlackSet);
GM_registerMenuCommand("tieba_Hide_SomeOne白名单设置", hideSomeOneWhiteSet);

//判断条件 执行屏蔽动作

if (whiteUsIds.indexOf(userName) == -1 && (HideToday.date != fulltime || HideToday[userName].toString() != getBlackList.toString())) {
	goHideOneByOne(0, getBlackList.length - 1);
}

if (whiteUsIds.indexOf(userName) == -1) {
	addNodeInsertedListener(".j_thread_list", function () { //帖子列表
		var Lhtml = $(this).find(".tb_icon_author").attr("title").match(/.*[::]\s?(.*)/)[1];
		if (getBlackList.indexOf(Lhtml) != -1) {
			$(this).remove();
		}
	});
	addNodeInsertedListener(".lzl_single_post", function () { //楼中楼
		var iUserIdhtml = $(this).find(".j_user_card").attr("username");
		if (getBlackList.indexOf(iUserIdhtml) != -1) {
			$(this).remove();
		}
	});
	addNodeInsertedListener(".j_feed_replyme", function () { //回复我的
		var iUserIdhtml = $(this).find(".replyme_user").text().replace(":", "");
		if (getBlackList.indexOf(iUserIdhtml) != -1) {
			$(this).remove();
		}
	});
}