吧主之怒

对贴子最后回复人进行封禁,拉黑操作,主要用于爆吧情况,封禁拉黑一条龙服务。

目前為 2014-09-15 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        吧主之怒
// @namespace   https://greasyfork.org/zh-CN/users/3846-kassent
// @version     1.1
// @description 对贴子最后回复人进行封禁,拉黑操作,主要用于爆吧情况,封禁拉黑一条龙服务。
// @include     http://tieba.baidu.com/f?*
// @copyright   2014+, Kassent
// @grant       none
// ==/UserScript==

//========用户设置部分================
var bantime = 10;//封禁天数,大吧可以1或10天,小吧只能一天。默认大吧十天,小吧一天。大吧可以修改其为一天。
var PageSum = 5;//获取页数,客户端贴吧页面的页数,每页50个贴子。
var maxlevel = 10;//对低于 x 级的ID进行操作
var isbanId = 1, //是否封禁ID,0为否,1为是
isdeleteItem = 0, //是否删除贴子,0为否,1为是,此功能暂时不可用。
isaddBlackList = 1; //是否拉黑ID,0为否,1为是

//=========以下部分不要随意修改===========
var reg=/^[a-z0-9.]*$/gi;
var pattern=/\d+/g;
var fid=PageData.forum.forum_id;
var bar_name =PageData.forum.forum_name;
var tbs=PageData.tbs;
var BDUSS = "";
var power;
var LastReplyerList = new Array();
var TrueLastReplyerList = new Array();
var LinkList = new Array();
var DeleteList = new Array();
var BanList = new Array();
var BlackList = new Array();

document.addEventListener('DOMContentLoaded', createButton, false);

function createButton() {
	var controlBtn = document.createElement('div');
	controlBtn.id = "startBanID";
    controlBtn.onclick = function(){if(confirm('确定要执行吗?')==true){confirmPower();if(power!=0){getLinkList(PageSum);}}};
	controlBtn.setAttribute("style","position: fixed; bottom: 35px; right: 25px;z-index: 99999999999;background: #009dd1; opacity: 1;color:#fff;font-size: 9pt;cursor: pointer;text-align: center;color:#fff;padding: 6px 8px");
	controlBtn.appendChild(document.createTextNode('吧主之怒'));
	document.body.appendChild(controlBtn); 
}

$.ajaxSetup({async: false });

var hexcase=0;var b64pad="";function hex_md5(s){return rstr2hex(rstr_md5(str2rstr_utf8(s)));}function b64_md5(s){return rstr2b64(rstr_md5(str2rstr_utf8(s)));}function any_md5(s,e){return rstr2any(rstr_md5(str2rstr_utf8(s)),e);}function hex_hmac_md5(k,d){return rstr2hex(rstr_hmac_md5(str2rstr_utf8(k),str2rstr_utf8(d)));}function b64_hmac_md5(k,d){return rstr2b64(rstr_hmac_md5(str2rstr_utf8(k),str2rstr_utf8(d)));}function any_hmac_md5(k,d,e){return rstr2any(rstr_hmac_md5(str2rstr_utf8(k),str2rstr_utf8(d)),e);}function md5_vm_test(){return hex_md5("abc").toLowerCase()=="900150983cd24fb0d6963f7d28e17f72";}function rstr_md5(s){return binl2rstr(binl_md5(rstr2binl(s),s.length*8));}function rstr_hmac_md5(key,data){var bkey=rstr2binl(key);if(bkey.length>16)bkey=binl_md5(bkey,key.length*8);var ipad=Array(16),opad=Array(16);for(var i=0;i<16;i++){ipad[i]=bkey[i]^0x36363636;opad[i]=bkey[i]^0x5C5C5C5C;}var hash=binl_md5(ipad.concat(rstr2binl(data)),512+data.length*8);return binl2rstr(binl_md5(opad.concat(hash),512+128));}function rstr2hex(input){try{hexcase}catch(e){hexcase=0;}var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var output="";var x;for(var i=0;i<input.length;i++){x=input.charCodeAt(i);output+=hex_tab.charAt((x>>>4)&0x0F)+hex_tab.charAt(x&0x0F);}return output;}function rstr2b64(input){try{b64pad}catch(e){b64pad='';}var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var output="";var len=input.length;for(var i=0;i<len;i+=3){var triplet=(input.charCodeAt(i)<<16)|(i+1<len?input.charCodeAt(i+1)<<8:0)|(i+2<len?input.charCodeAt(i+2):0);for(var j=0;j<4;j++){if(i*8+j*6>input.length*8)output+=b64pad;else output+=tab.charAt((triplet>>>6*(3-j))&0x3F);}}return output;}function rstr2any(input,encoding){var divisor=encoding.length;var i,j,q,x,quotient;var dividend=Array(Math.ceil(input.length/2));for(i=0;i<dividend.length;i++){dividend[i]=(input.charCodeAt(i*2)<<8)|input.charCodeAt(i*2+1);}var full_length=Math.ceil(input.length*8/(Math.log(encoding.length)/Math.log(2)));var remainders=Array(full_length);for(j=0;j<full_length;j++){quotient=Array();x=0;for(i=0;i<dividend.length;i++){x=(x<<16)+dividend[i];q=Math.floor(x/divisor);x-=q*divisor;if(quotient.length>0||q>0)quotient[quotient.length]=q;}remainders[j]=x;dividend=quotient;}var output="";for(i=remainders.length-1;i>=0;i--)output+=encoding.charAt(remainders[i]);return output;}function str2rstr_utf8(input){var output="";var i=-1;var x,y;while(++i<input.length){x=input.charCodeAt(i);y=i+1<input.length?input.charCodeAt(i+1):0;if(0xD800<=x&&x<=0xDBFF&&0xDC00<=y&&y<=0xDFFF){x=0x10000+((x&0x03FF)<<10)+(y&0x03FF);i++;}if(x<=0x7F)output+=String.fromCharCode(x);else if(x<=0x7FF)output+=String.fromCharCode(0xC0|((x>>>6)&0x1F),0x80|(x&0x3F));else if(x<=0xFFFF)output+=String.fromCharCode(0xE0|((x>>>12)&0x0F),0x80|((x>>>6)&0x3F),0x80|(x&0x3F));else if(x<=0x1FFFFF)output+=String.fromCharCode(0xF0|((x>>>18)&0x07),0x80|((x>>>12)&0x3F),0x80|((x>>>6)&0x3F),0x80|(x&0x3F));}return output;}function str2rstr_utf16le(input){var output="";for(var i=0;i<input.length;i++)output+=String.fromCharCode(input.charCodeAt(i)&0xFF,(input.charCodeAt(i)>>>8)&0xFF);return output;}function str2rstr_utf16be(input){var output="";for(var i=0;i<input.length;i++)output+=String.fromCharCode((input.charCodeAt(i)>>>8)&0xFF,input.charCodeAt(i)&0xFF);return output;}function rstr2binl(input){var output=Array(input.length>>2);for(var i=0;i<output.length;i++)output[i]=0;for(var i=0;i<input.length*8;i+=8)output[i>>5]|=(input.charCodeAt(i/8)&0xFF)<<(i%32);return output;}function binl2rstr(input){var output="";for(var i=0;i<input.length*32;i+=8)output+=String.fromCharCode((input[i>>5]>>>(i%32))&0xFF);return output;}function binl_md5(x,len){x[len>>5]|=0x80<<((len)%32);x[(((len+64)>>>9)<<4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(var i=0;i<x.length;i+=16){var olda=a;var oldb=b;var oldc=c;var oldd=d;a=md5_ff(a,b,c,d,x[i+0],7,-680876936);d=md5_ff(d,a,b,c,x[i+1],12,-389564586);c=md5_ff(c,d,a,b,x[i+2],17,606105819);b=md5_ff(b,c,d,a,x[i+3],22,-1044525330);a=md5_ff(a,b,c,d,x[i+4],7,-176418897);d=md5_ff(d,a,b,c,x[i+5],12,1200080426);c=md5_ff(c,d,a,b,x[i+6],17,-1473231341);b=md5_ff(b,c,d,a,x[i+7],22,-45705983);a=md5_ff(a,b,c,d,x[i+8],7,1770035416);d=md5_ff(d,a,b,c,x[i+9],12,-1958414417);c=md5_ff(c,d,a,b,x[i+10],17,-42063);b=md5_ff(b,c,d,a,x[i+11],22,-1990404162);a=md5_ff(a,b,c,d,x[i+12],7,1804603682);d=md5_ff(d,a,b,c,x[i+13],12,-40341101);c=md5_ff(c,d,a,b,x[i+14],17,-1502002290);b=md5_ff(b,c,d,a,x[i+15],22,1236535329);a=md5_gg(a,b,c,d,x[i+1],5,-165796510);d=md5_gg(d,a,b,c,x[i+6],9,-1069501632);c=md5_gg(c,d,a,b,x[i+11],14,643717713);b=md5_gg(b,c,d,a,x[i+0],20,-373897302);a=md5_gg(a,b,c,d,x[i+5],5,-701558691);d=md5_gg(d,a,b,c,x[i+10],9,38016083);c=md5_gg(c,d,a,b,x[i+15],14,-660478335);b=md5_gg(b,c,d,a,x[i+4],20,-405537848);a=md5_gg(a,b,c,d,x[i+9],5,568446438);d=md5_gg(d,a,b,c,x[i+14],9,-1019803690);c=md5_gg(c,d,a,b,x[i+3],14,-187363961);b=md5_gg(b,c,d,a,x[i+8],20,1163531501);a=md5_gg(a,b,c,d,x[i+13],5,-1444681467);d=md5_gg(d,a,b,c,x[i+2],9,-51403784);c=md5_gg(c,d,a,b,x[i+7],14,1735328473);b=md5_gg(b,c,d,a,x[i+12],20,-1926607734);a=md5_hh(a,b,c,d,x[i+5],4,-378558);d=md5_hh(d,a,b,c,x[i+8],11,-2022574463);c=md5_hh(c,d,a,b,x[i+11],16,1839030562);b=md5_hh(b,c,d,a,x[i+14],23,-35309556);a=md5_hh(a,b,c,d,x[i+1],4,-1530992060);d=md5_hh(d,a,b,c,x[i+4],11,1272893353);c=md5_hh(c,d,a,b,x[i+7],16,-155497632);b=md5_hh(b,c,d,a,x[i+10],23,-1094730640);a=md5_hh(a,b,c,d,x[i+13],4,681279174);d=md5_hh(d,a,b,c,x[i+0],11,-358537222);c=md5_hh(c,d,a,b,x[i+3],16,-722521979);b=md5_hh(b,c,d,a,x[i+6],23,76029189);a=md5_hh(a,b,c,d,x[i+9],4,-640364487);d=md5_hh(d,a,b,c,x[i+12],11,-421815835);c=md5_hh(c,d,a,b,x[i+15],16,530742520);b=md5_hh(b,c,d,a,x[i+2],23,-995338651);a=md5_ii(a,b,c,d,x[i+0],6,-198630844);d=md5_ii(d,a,b,c,x[i+7],10,1126891415);c=md5_ii(c,d,a,b,x[i+14],15,-1416354905);b=md5_ii(b,c,d,a,x[i+5],21,-57434055);a=md5_ii(a,b,c,d,x[i+12],6,1700485571);d=md5_ii(d,a,b,c,x[i+3],10,-1894986606);c=md5_ii(c,d,a,b,x[i+10],15,-1051523);b=md5_ii(b,c,d,a,x[i+1],21,-2054922799);a=md5_ii(a,b,c,d,x[i+8],6,1873313359);d=md5_ii(d,a,b,c,x[i+15],10,-30611744);c=md5_ii(c,d,a,b,x[i+6],15,-1560198380);b=md5_ii(b,c,d,a,x[i+13],21,1309151649);a=md5_ii(a,b,c,d,x[i+4],6,-145523070);d=md5_ii(d,a,b,c,x[i+11],10,-1120210379);c=md5_ii(c,d,a,b,x[i+2],15,718787259);b=md5_ii(b,c,d,a,x[i+9],21,-343485551);a=safe_add(a,olda);b=safe_add(b,oldb);c=safe_add(c,oldc);d=safe_add(d,oldd);}return Array(a,b,c,d);}function md5_cmn(q,a,b,x,s,t){return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b);}function md5_ff(a,b,c,d,x,s,t){return md5_cmn((b&c)|((~b)&d),a,b,x,s,t);}function md5_gg(a,b,c,d,x,s,t){return md5_cmn((b&d)|(c&(~d)),a,b,x,s,t);}function md5_hh(a,b,c,d,x,s,t){return md5_cmn(b^c^d,a,b,x,s,t);}function md5_ii(a,b,c,d,x,s,t){return md5_cmn(c^(b|(~d)),a,b,x,s,t);}function safe_add(x,y){var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF);}function bit_rol(num,cnt){return(num<<cnt)|(num>>>(32-cnt));}


function getPostData(data){
	var a = {
     "BDUSS":BDUSS,
     "_client_id":"wappc_1391906375532_83",
     "_client_type":"2",
     "_client_version":"4.5.3",
     "_phone_imei":"862663020162818"
	};
	data = $.extend(a,data);
	return data;
}

function decodeURI_post(postData) {
	var SIGN_KEY = "tiebaclient!!!";
	var s = "";
	for (var i in postData) {
	s += i + "=" + postData[i];
	}
	var sign = hex_md5(decodeURIComponent(s) + SIGN_KEY);
	var data = "";
	for (var i in postData) {
	data += "&" + i + "=" + postData[i];
	}
	data += "&sign=" + sign;
	return data.replace("&", "");
}

function compareObject(obj1,obj2){
	if(obj1.id<obj2.id){return -1;}
	else if(obj1.id>obj2.id){return 1;}
		else{return 0;}
}

function uniqueArray(arr){
	var temp = new Array();
    arr.sort(compareObject);
      for(i = 0; i < arr.length - 1; i++) {
          if(arr[i].id == arr[i+1].id) {
            continue;
        }
          temp[temp.length]=arr[i];
      }
    return temp;
	
}

function getLinkList(PageSum){	
	$.ajaxSetup({async: false });
	var check_list = 0,page_num;
	for(var i=0;i<PageSum;i++){
		page_num = i + 1;
		var PostData = getPostData({
   		  "from":"tiebawap_bottom",
    	  "kw":bar_name,
    	  "net_type":"3",
   	      "pn":page_num,
    	  "st_type":"tb_forumlist"
		});
		$.post('/c/f/frs/page', decodeURI_post(PostData), function (msg) {
				var tlist = msg.thread_list;
				for(var i=0;i<tlist.length;i++){
					//if(tlist[i].is_goog==1||tlist[i].is_top==1)continue; //排除精品贴和置顶贴
					LinkList.push(tlist[i].tid);
					TrueLastReplyerList.push(tlist[i].last_replyer);
				}
				check_list = tlist.length;
			},"json");
		console.log("第"+ page_num +"页贴子获取完毕");
        if(check_list<50)break;
	}
	console.log("共" + page_num + "页贴子列表获取完毕");
	console.log("共获取到" + LinkList.length + "个贴子");
	console.log("开始获取最后回复人信息并进行操作");
	getList();	
}

function getList(){
	var id_num = LinkList.length;
	var sum = 0; 
	for(var i=0;i<id_num;i++){
		var PostObData = getPostData({
     		"back":"0",
    		"kz":LinkList[i], 
    		"last":"1",
     		"net_type":"3",
     		"q_type":"2",
     		"r":"1",
     		"rn":"30",
     		"with_floor":"1"
   			});
		$.post('/c/f/pb/page', decodeURI_post(PostObData), function (msg){
			if(msg.error_code!=0){console.log("获取失败,未知错误,或贴子已被删除");}
			else{
				var LastReplyer = msg.post_list[0].author;
				var Content = msg.post_list[0].content;
				var pid = msg.post_list[0].id;
				LastReplyerList.push(LastReplyer);
				if(LastReplyer.is_like==0||LastReplyer.level_id<=maxlevel)
				{
					console.log("最后回复人ID:" + LastReplyer.id + '\t' + "用户名:" + LastReplyer.name + '\t' + "是否关注本吧:" + LastReplyer.is_like + '\t' + "等级:" + LastReplyer.level_id + '\t' + "头衔:" + LastReplyer.level_name + '\t' +"执行!");
					BanList.push(LastReplyer);
					BlackList.push(LastReplyer);
					var itemobj = {
						"tid":LinkList[i],
						"pid":pid
					};
					DeleteList.push(itemobj);
            	}else{console.log("最后回复人ID:" + LastReplyer.id + '\t' + "用户名:" + LastReplyer.name + '\t' + "是否关注本吧:" + LastReplyer.is_like + '\t' + "等级:" + LastReplyer.level_id + '\t' + "头衔:" + LastReplyer.level_name + '\t' +"跳过!");}}
            	sum++;
            	if(sum==LinkList.length){
	            	BanList  = uniqueArray(BanList);
	            	BlackList  = uniqueArray(BlackList);
	            	console.log("数组去重完毕,开始执行封禁拉黑操作");
	            	}
		},'json');
		
	}
	chooseWay();  
}

function banID(name){	
	if(power == 1&&bantime ==10){bantime = 1;}
	var json = {
		       "cm":"filter_forum_user",
    		   "ban_days":bantime,
     		   "user_name":name,
     		   "word":PageData.forum.name,
     		   "fid":PageData.forum.forum_id,
     		   "tbs":PageData.tbs,
     		   "ie": "utf-8"
			   };
     $.post("/bawu/cm",json,function(e){
	    if(e.error.errno==0){console.log(name + " 已被封禁" + bantime +"天");}
	     	else{console.log(name + "封禁失败,未知错误");}
	     },'json');
     
}

function deleteItem(tid,pid){
	var json = {
			   "commit_fr":"pb",
     		   "fid":fid,
    		   "ie":"utf-8",
    		   "is_finf":false,
    		   "is_vipdel":"0",
    		   "kw":bar_name,
    		   "pid":pid,
     		   "tbs":tbs,
     		   "tid":tid
				   };
	$.post("http://tieba.baidu.com/f/commit/post/delete",json,function(responses)
	{
		var status = JSON.parse(responses).err_code;
		if(!status){console.log("贴子已删除!");}else{console.log("删帖失败,未知错误");}
	});	
}

function addBlackList(id,name){
		var json = {
                    "tbs":tbs,
					"user_id":id,
					"word":bar_name,
					"ie":"utf-8",
					};
		$.post("http://tieba.baidu.com/bawu2/platform/addBlack",json,function(data){
			var mess = JSON.parse(data).errno;
            if(mess==0){
              console.log(name + " 成功拉黑");}
            else{console.log("拉黑失败,未知错误");}
		});		
}

function chooseWay(){
	    var t,i,len;
	    if(isbanId==1&&power!=0){
		    for(i=0,len=BanList.length;i<len;i++){
			    banID(BanList[i].name);
		    }  
	    }
	    if(isaddBlackList==1&&power==2){
		    for(i=0,len=BlackList.length;i<len;i++){
			    addBlackList(BlackList[i].id,BlackList[i].name); 
		    }  
	    }
	    if(isdeleteItem==1&&power!=0){
		    for(i=0,len=DeleteList.length;i<len;i++){
			    clearTimeout(t);
			    setTimeout(deleteItem(DeleteList[i].tid,DeleteList[i].pid), 1000);   
		    }  
	    }
        LinkList.length = DeleteList.length = BanList.length = BlackList.length = LastReplyerList.length = TrueLastReplyerList.length = 0;
        console.log("执行完毕!");
}

function confirmPower(){
	try{
		var isbawu = PageData.user.power.bawu;
		var isxiaoba = PageData.user.power.is_assist;
	}catch(ex){
		var isbawu = PageData.power.can_filter_id;
		var isxiaoba = !PageData.power.can_add_manager_team;		
	} 
	if(!isbawu){power = 0;console.log("该帐号非吧务无权限");}
		else if(isxiaoba){power = 1;console.log("该帐号拥有小吧主权限")}
			 else{power = 2;console.log("该帐号拥有吧主权限")}	
}