吧主之怒

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

当前为 2014-09-15 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

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

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 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("该帐号拥有吧主权限")}	
}