// ==UserScript== // @name McbbsReviewServerHelperForUser // @version 0.1.03 // @description MRSHFU - 你的服务器发帖好助手 // @author 萌萌哒丶九灬书 // @namespace https://space.bilibili.com/1501743 // @mainpage https://greasyfork.org/zh-CN/scripts/420651-mcbbsreviewserverhelperForUser/ // @supportURL https://greasyfork.org/zh-CN/scripts/420651-mcbbsreviewserverhelperForUser/feedback // @home-url https://greasyfork.org/zh-TW/scripts/420651-mcbbsreviewserverhelperForUser/ // @homepageURL https://greasyfork.org/zh-TW/scripts/420651-mcbbsreviewserverhelperforuser // @license GNU General Public License v3.0 // @create 2021-01-25 // @lastmodified 2023-07-29 // @note 0.1.03 更新: 1.修复了部分细节错误; // @note 0.1.02 更新: 1.新增了新版版本号判定; // @note 0.1.01 更新: 1.移除了旧版版本号判定; // @note 0.1.00 更新: 1.发布了针对用户的版本; // @note 新增、更改、修复、移除、精简、*可能* // @match *://www.mcbbs.net/thread-* // @match *://www.mcbbs.net/forum.php?mod=viewthread* // @match *://www.mcbbs.net/forum-serverpending* // @match *://www.mcbbs.net/forum.php?mod=forumdisplay&fid=296* // @match *://www.mcbbs.net/forum-server* // @match *://www.mcbbs.net/forum.php?mod=forumdisplay&fid=179* // @match *://www.mcbbs.net/forum-362* // @match *://www.mcbbs.net/forum.php?mod=forumdisplay&fid=362* // @grant GM_xmlhttpRequest // @grant GM_getResourceText // @grant GM_getValue // @grant GM_setValue // @require https://cdn.staticfile.org/jquery/1.12.4/jquery.min.js // @downloadURL https://update.greasyfork.icu/scripts/420651/McbbsReviewServerHelperForUser.user.js // @updateURL https://update.greasyfork.icu/scripts/420651/McbbsReviewServerHelperForUser.meta.js // ==/UserScript== (function() { 'use strict'; var jq = jQuery.noConflict(); //jq名称重定义,避免冲突 function isThisTitleJudged(str){ //是否有判定标识 var ZZ1 = /(🍃|🍁|🍂|✅|❌|🔔)+/; if(ZZ1.test(str)){ return true; }else{ return false; } } function ThreeDifferentTips(ele,str,info1,info2,info3){ //顾名思义,添加了三种不同的tips if(ele > 0){ str.html(function(i,origText){ return '🍃' + origText + '🍃' + green(info1); }); }else if(ele < 0) { str.html(function(i,origText){ return '🍁' + origText + '🍁' + red(info2); }); }else { str.html(function(i,origText){ return '🍂' + origText + '🍂' + orange(info3); }); }; } function TrueOrFalsOrNull(ele,str,info2,info3){ //顾名思义,添加了通过、不通过、NULL三种不同的tips if(ele > 0){ str.html(function(i,origText){ return '✅' + origText; }); }else if(ele < 0) { str.html(function(i,origText){ return '❌' + origText + '❌' + red(info2); }); }else { str.html(function(i,origText){ return '🔔' + origText + '🔔' + orange(info3); }); }; } function TrueOrFalse(ele,str,info2){ //顾名思义,添加了通过、不通过两种不同的tips if(ele){ str.html(function(i,origText){ return '✅' + origText; }); }else { str.html(function(i,origText){ return '❌' + origText + '❌' + red(info2); }); }; } function OnlyFalse(ele,str,info2){ //顾名思义,只添加了不通过的tip if(!ele){ str.html(function(i,origText){ return '❌' + red(info2) + origText; }); }; } function green(str){ //文本快捷变绿 if(str != ''){ return '' + str + ''; }else{ return ''; } } function red(str){ //文本快捷变红 if(str != ''){ return '' + str + ''; }else{ return ''; } } function orange(str){ //文本快捷变橘 if(str != ''){ return '' + str + ''; }else{ return ''; } } var flag_ReviewTitleZZ = true; function ReviewTitleZZ(str){ //正则判断标题 //var ZZ = /^\[(电信|联通|移动|双线|多线|教育|港澳|台湾|欧洲|美洲|亚太|内网)\]([\u4e00-\u9fa5]|\w|\s|[\u0800-\u4e00])*(\s|)——(\s|).[^\[]*\[(\d|\.|X|x|\-)+]$/; //var ZZ = /^\[(电信|联通|移动|双线|多线|教育|港澳|台湾|欧洲|美洲|亚太|内网)\]([0-9a-zA-Z\u2160-\u217f\u3040-\u30ff\u31f0-\u31ff\u4e00-\u9fa5]|\s)+——([^\u2014]|\s)+\[(\-?((1\.\d{1,2}(\.(\d{1,2}|X|x))?)|(\d{2}w\d{2}[a-z]))){1,2}\]$/; /** * 全角英文:\u2160-\u217f Ⅰ-ⅿ * 日语:\u3040-\u30ff\u31f0-\u31ff ぀-ヿㇰ-ㇿ * 中文:\u4e00-\u9fa5 一-龥 * 破折号:\u2014 — * 黑块:\u2588\u2589\u3013 █▉〓 * emoji:\uD83C\uDF00-\uDFFF\uD83D\uDC00-\uDE4F\uD83D\uDE80-\uDEFF\u2700-\u27BF\uFE0F 🌀-�🐀-�🚀-�✀-➿️ **/ var ZZ = /^\[(电信|联通|移动|双线|多线|教育|港澳|台湾|欧洲|美洲|亚太|内网)\]([0-9a-zA-Z\u2160-\u217f\u3040-\u30ff\u31f0-\u31ff\u4e00-\u9fa5]|\s)+——([^\u2014\u2588\u2589\u3013\uD83C\uDF00-\uDFFF\uD83D\uDC00-\uDE4F\uD83D\uDE80-\uDEFF\u2700-\u27BF\uFE0F]|(\s))+\[(\-?((1\.\d{1,2}(\.(\d{1,2}|X|x))?)|(\d{2}w\d{2}[a-z]))){1,2}\]$/; if (ZZ.test(str)){ return true; }else{ flag_ReviewTitleZZ = false; return false; } } function UserPointZZ(ele){ //正则判断数值是否为正(绿宝石&贡献) var ZZ = /^[0-9]*\s/; return ZZ.test(ele); } function trim(str){ //通过正则,清空字符串左右的空白 return str.replace(/(^\s*)|(\s*$)/g, ""); } function ServerTitleName(str,SvrName){ var PoZheHao = str.indexOf("—"); //从左寻找 “—” 的位置 var YouKuoHao = str.indexOf("]"); //从左寻找 “]” 的位置 var subStr = String(str.substring(YouKuoHao + 1,PoZheHao)); //通过 “]” 和 “—” 定位服务器名称 subStr = trim(subStr); SvrName = trim(SvrName); //使用trim函数,清空字符串左右的空白 //console.log("sbS:" + subStr); //console.log("SN:" + SvrName); //用于debug输出↑ if (subStr == SvrName){ return 3; } else if (subStr + "服务器" == SvrName){ return 2; } else if (subStr == SvrName + "服务器"){ return 1; } else{ return 0; }; } var VersionList = ['1.20.1','1.20', '1.19.4','1.19.3','1.19.2','1.19.1','1.19', '1.18.2','1.18.1','1.18', '1.17.1','1.17', '1.16.5','1.16.4','1.16.3','1.16.2','1.16.1','1.16', '1.15.2', '1.15.1', '1.15', '1.14.4', '1.14', '1.13.2', '1.13.1', '1.13', '1.12.2', '1.12', '1.11.2', '1.11', '1.10.X', '1.9.4', '1.9', '1.8.X', '1.7.10', '1.7.2', '1.6.4']; var VersionList_X = ['1.6.X', '1.7.X', '1.8.X', '1.9.X', '1.10.X', '1.11.X', '1.12.X', '1.13.X', '1.14.X', '1.15.X','1.16.X','1.17.X','1.18.X','1.19.X','1.20.X']; var VersionList_x = ['1.6.x', '1.7.x', '1.8.x', '1.9.x', '1.10.x', '1.11.x', '1.12.x', '1.13.x', '1.14.x', '1.15.x','1.16.x','1.17.x','1.18.x','1.19.x','1.20.x']; function ServerVersionXS(str){ //从VersionList调取.x的最大值,如果不是.x,传回原str for(var i = 0; i < VersionList_X.length; i++){ if((str == VersionList_X[i])||(str == VersionList_x[i])){ break; }; }; switch(i){ case 14: //1.20.1 return VersionList[VersionList.length - 37]; case 13: //1.19.4 return VersionList[VersionList.length - 35]; case 12: //1.18.2 return VersionList[VersionList.length - 30]; case 11: //1.17.1 return VersionList[VersionList.length - 27]; case 10: //1.16.5 return VersionList[VersionList.length - 25]; case 9: //1.15.2 return VersionList[VersionList.length - 19]; case 8: //1.14.4 return VersionList[VersionList.length - 16]; case 7: //1.13.2 return VersionList[VersionList.length - 14]; case 6: //1.12.2 return VersionList[VersionList.length - 11]; case 5: //1.11.2 return VersionList[VersionList.length - 9]; case 4: //1.10.x return VersionList[VersionList.length - 7]; case 3: //1.9.4 return VersionList[VersionList.length - 6]; case 2: //1.8.x return VersionList[VersionList.length - 4]; case 1: //1.7.10 return VersionList[VersionList.length - 3]; case 0: //1.6.4 return VersionList[VersionList.length - 1]; default: return str; }; } function ServerVersionXE(str){ //从VersionList调取.x的最小值,如果不是.x,传回原str for(var i = 0; i < VersionList_X.length; i++){ if((str == VersionList_X[i])||(str == VersionList_x[i])){ break; }; }; switch(i){ case 14: //1.20 return VersionList[VersionList.length - 36]; case 13: //1.19 return VersionList[VersionList.length - 31]; case 12: //1.18 return VersionList[VersionList.length - 28]; case 11: //1.17 return VersionList[VersionList.length - 26]; case 10: //1.16 return VersionList[VersionList.length - 20]; case 9: //1.15 return VersionList[VersionList.length - 17]; case 8: //1.14 return VersionList[VersionList.length - 15]; case 7: //1.13 return VersionList[VersionList.length - 12]; case 6: //1.12 return VersionList[VersionList.length - 10]; case 5: //1.11 return VersionList[VersionList.length - 8]; case 4: //1.10.x return VersionList[VersionList.length - 7]; case 3: //1.9 return VersionList[VersionList.length - 5]; case 2: //1.8.x return VersionList[VersionList.length - 4]; case 1: //1.7.2 return VersionList[VersionList.length - 2]; case 0: //1.6.4 return VersionList[VersionList.length - 1]; default: return str; }; } function SwitchLength(str1, str2){ for(var i = 0; i < str2.length; i++){ //在str2里遍历,直到找到str1位置 if(str1 == str2[i]){ return i; }; }; } function isServerVersionSelectTRUE(str1, str2, ServerVersion){ //ServerVersion为模板选择的版本号 var sv1_Diff = SwitchLength(ServerVersionXE(str1), VersionList) - SwitchLength(ServerVersionXS(str1), VersionList); //sv1在VersionList的.x区间长度 var sv1_Diff2 = SwitchLength(ServerVersionXE(str1), ServerVersion) - SwitchLength(ServerVersionXS(str1), ServerVersion); //sv1在模板的.x区间长度 if(str2 == null ){ if (sv1_Diff == sv1_Diff2){ return 1; }else{ return -1; } }else{ var sv2_Diff = SwitchLength(ServerVersionXE(str2), VersionList) - SwitchLength(ServerVersionXS(str2), VersionList); //sv2在VersionList的.x区间长度 var sv2_Diff2 = SwitchLength(ServerVersionXE(str2), ServerVersion) - SwitchLength(ServerVersionXS(str2), ServerVersion); //sv2在模板的.x区间长度 if ((sv1_Diff == sv1_Diff2) && (sv2_Diff == sv2_Diff2)){ return 1; }else{ return -1; } } } function ServerVersionTips(str1){ var str2 = jq(".cgtl.mbm tbody tr td").eq(2).text(); var ServerVersion = trim(str2) ServerVersion = ServerVersion.split(/\s+/); if (str1 > 0){ if (ServerVersion.length > 5){ ThreeDifferentTips(-1, jq(".cgtl.mbm tbody tr td").eq(2), "", "你确定有这么多核心?", "") }else{ ThreeDifferentTips(1, jq(".cgtl.mbm tbody tr td").eq(2), "新版版规判定正确", "", "") } }else{ OnlyFalse(-1, jq(".cgtl.mbm tbody tr td").eq(2), "模板版本号与标题不符") } } function getServerVersion(str1, str2){ var strL = str1.lastIndexOf("["); var strR = str1.lastIndexOf("]"); var subStr = String(str1.substring(strL + 1,strR)); subStr = trim(subStr); var ServerVersion = trim(str2) ServerVersion = ServerVersion.split(/\s+/); //ServerVersion为模板选择的核心版本号 var ZZ5 = /^1\.\d{1,2}(\.(\d{1,2}|X|x))?\-\d{2}w\d{2}[a-z]$/ //1.7.x-20w05a var ZZ4 = /^\d{2}w\d{2}[a-z]$/; //20w05a var ZZ3 = /^1\.\d{1,2}(\.(\d{1,2}|X|x))?\-1\.\d{1,2}(\.(\d{1,2}|X|x))?$/; //1.7.x-1.12.x var ZZ2 = /^1\.\d{1,2}(\.\d{1,2})?$/; //1.7.10 var ZZ1 = /^1\.\d{1,2}\.(X|x)$/; //1.7.x /* console.log("sbS:" + subStr); console.log("SvS:" + ServerVersion[0] + "; SvE:" + ServerVersion[ServerVersion.length - 1]); console.log("SvL:" + ServerVersion.length); console.log("VlS:" + VersionList[0] + "; VlE:" + VersionList[VersionList.length - 1]); console.log("VlL:" + VersionList.length); console.log(ZZ5.test(subStr)); console.log(ZZ4.test(subStr)); console.log(ZZ3.test(subStr)); console.log(ZZ2.test(subStr)); console.log(ZZ1.test(subStr)); ↑调试用 */ if(ZZ5.test(subStr) && ServerVersion[ServerVersion.length - 1] == '其他版本'){ /** * 标题为 1.7.2-20w05a 且勾选了 其他版本 的情况 * 此为23年7月新版规规范 */ var TitleVersion5 = subStr.split('-'); //TitleVersion为标题版本号 trim(TitleVersion5[0]); trim(TitleVersion5[1]); //避免有人在-的左右加空格 if(ZZ1.test(TitleVersion5[0])){ //如果标题版本号1为.x if(isServerVersionSelectTRUE(TitleVersion5[0],null,ServerVersion)){ //如果.x勾选正确 return 5; }else{ //标题中的版本号和模板不符 就直接return -3 return -3; }; }else{ //如果标题版本号1为.数字 if(TitleVersion5[0] == ServerVersion[ServerVersion.length - 2]){ //判定标题中 左侧的版本号 是否和 模板倒数第二个(倒数第一为其他版本) 相符合 return 5; }else{ //标题中的版本号和模板不符 就直接return -3 return -3; }; } }else if(ZZ4.test(subStr) && ServerVersion[ServerVersion.length - 1] == '其他版本'){ /** * 标题为20w05a 且模板勾选了 其他版本 的情况 */ if (ServerVersion.length > 1 ){ //模板选择多版本,标题选择单版本的情况 return -1 return -1; }else{ //模板有且仅有一个'其他版本'时 return 4 return 4; } }else if(ZZ3.test(subStr)){ /** * 标题为 1.7.x-1.12.x 多版本的情况 * 23年7月新版规 */ var TitleVersion3 = subStr.split('-'); //TitleVersion为标题版本号 trim(TitleVersion3[0]); trim(TitleVersion3[1]); //避免有人在-的左右加空格 //console.log("TV1:" + TitleVersion3[0] + "; TV2:" + TitleVersion3[1]); // ↑ 调试用 ↑ if(ZZ1.test(TitleVersion3[0]) && ZZ1.test(TitleVersion3[1])){ //如果标题版本号1和2均为.x //console.log("tv1"); // ↑ 调试用 ↑ if(isServerVersionSelectTRUE(TitleVersion3[0], TitleVersion3[1], ServerVersion)){ //如果.x勾选正确 return 3; }else{ //标题中的版本号和模板不符 就直接return -3 return -3; }; }else if(ZZ1.test(TitleVersion3[0])){ //如果标题版本号1为.x,标题版本号2为.2 //console.log("tv2"); // ↑ 调试用 ↑ if(isServerVersionSelectTRUE(TitleVersion3[0], null, ServerVersion) && (TitleVersion3[1] == ServerVersion[0])){ //标题版本号1勾选正确,标题版本号2是否为模板版本号第一个 return 3; }else{ //标题中的版本号和模板不符 就直接return -3 return -3; }; }else if(ZZ1.test(TitleVersion3[1])){ //如果标题版本号1为.2,标题版本号2为.x //console.log("tv3"); // ↑ 调试用 ↑ if((TitleVersion3[0] == ServerVersion[ServerVersion.length - 1]) && isServerVersionSelectTRUE(TitleVersion3[1], null, ServerVersion)){ //标题版本号1是否为模板版本号倒数第一个, 标题版本号2勾选正确 return 3; }else{ //标题中的版本号和模板不符 就直接return -3 return -3; }; }else{ //console.log("tv4"); // ↑ 调试用 ↑ //如果标题版本号1和2均为.2 if((TitleVersion3[0] == ServerVersion[ServerVersion.length - 1]) && (TitleVersion3[1] == ServerVersion[0])){ //标题版本号1是否为模板版本号倒数第一个,标题版本号2是否为模板版本号第一个 return 3; }else{ //标题中的版本号和模板不符 就直接return -3 return -3; }; } }else if(ZZ2.test(subStr)){ /** * 标题为 1.7.2 单版本的情况 */ var TitleVersion2 = trim(subStr); if (ServerVersion.length > 1 ){ //模板选择多版本,标题选择单版本的情况 return -1 return -1; } if ((TitleVersion2 == ServerVersion[0]) || ((TitleVersion2 != ServerVersion[0]) && (ServerVersion[ServerVersion.length - 1] == '其他版本'))){ //判定标题中的版本号是否和模板相符合 || 不符合的时候 是否选择了其他版本 return 2; }else{ //标题中的版本号和模板不符 就直接return -3 return -3; }; }else if(ZZ1.test(subStr)){ /** * 标题为 1.7.x 复合版本的情况, 23年7月新版规 */ var TitleVersion1 = trim(subStr); if(ZZ1.test(TitleVersion1)){ //如果标题版本号1为.x if(isServerVersionSelectTRUE(TitleVersion1,null,ServerVersion)){ //如果.x勾选正确 return 1; }else{ //标题中的版本号和模板不符 就直接return -3 return -3; }; }else{ //如果标题版本号1为.数字 if(TitleVersion1 == ServerVersion[0]){ //判定标题中 左侧的版本号 是否和 模板第一个 相符合 return 1; }else{ //标题中的版本号和模板不符 就直接return -3 return -3; }; } }else{ //标题中的版本号和模板不符 就直接return -3 return -3; }; } function ServerIPAddress(str){ var SvrIPAddress = trim(str); var ZZ3 = /((\w)+\.)+(\w)+(\:[0-9]+)?/; //正则匹配带端口或不带端口的域名地址 var ZZ2 = /((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}/; //正则匹配不带端口的IP地址 var ZZ1 = /([\u4e00-\u9fa5]|\w|\s|[\u0800-\u4e00])+/; //正则匹配至少输入了点东西的 if(ZZ3.test(SvrIPAddress)){ return 3; }else if(ZZ2.test(SvrIPAddress)){ return 2; }else if(ZZ1.test(SvrIPAddress)){ return 1; }else{ return 0; }; } function ServerType(str){ var strR = str.indexOf("»"); //从左寻找 “»” 的位置 var subStr = String(str.substring(0,strR)); //从开头到 “»” 定位服务器类型 subStr = trim(subStr); //console.log(subStr); if(subStr == "纯净服务器"){ return 1; } else if(subStr == "Mod服务器"){ return -1; } else if(subStr == "其他(下面注明)"){ return 0; }; } function ServerClientDownloadSet(str){ var strL = str.indexOf("»"); //从左寻找 “»” 的位置 var strR = str.indexOf("下"); //从左寻找 “下” 的位置 var subStr = String(str.substring(strL + 1,strR)); //通过 “»” 和 “下” 定位服务器是否需要下载专用客户端 subStr = trim(subStr); if(subStr == "不需要"){ //忽视内容,返回99 return 99; } else if(subStr == "需要"){ return -1; } else if(subStr == ""){ return 0; }; } function ServerClientDownload(str){ var SvrCD = trim(str); var ZZ1 = /((\w)+\.)+(\w)+(\:[0-9]+)?/; var ZZ_1 = /^http(s)?\:\/\/(www.)?([\u4e00-\u9fa5]|\s|[\u0800-\u4e00]|)+(\w)*([0-9]+)*.com$/; var ZZ_2 = /jq\.qq\.com/; var ZZ_3 = /(群|君羊|裙)+/; var ZZ_4 = /mcbbs\.net/ if(ZZ_4.test(SvrCD)){ return -4; }else if(ZZ_3.test(SvrCD)){ return -3; }else if(ZZ_2.test(SvrCD)){ return -2; }else if(ZZ_1.test(SvrCD)){ return -1; }else if(ZZ1.test(SvrCD)){ return 1; }else { return 0; }; } var flag_SeverBusinessConditionsWrite = false; //是否正确填写,正确填写为true,填写错误为false var flag_SeverBusinessConditionsValue = false; //是否为公益服,公益服为true,商业服为false function SeverBusinessConditions(str1,str2){ var strR = str1.indexOf("服"); //从左寻找 “服” 的位置 var subStr = String(str1.substring(0,strR)); //从头开始,通过 “服” 定位服务器是否公益 var ZZ1 = /本服是公益服并且愿意承担虚假宣传的一切后果/; if(subStr == "公益"){ if(ZZ1.test(str2)){ //如果是公益服,且写明了标语,则返回中立 flag_SeverBusinessConditionsValue = true; flag_SeverBusinessConditionsWrite = true; return 0; } else { //如果是公益服,没写明标语,则返回false flag_SeverBusinessConditionsValue = true; flag_SeverBusinessConditionsWrite = false; return -1; }; } else if (subStr == "商业"){ if(ZZ1.test(str2)){ //如果是商业服,却写了标语,则返回false flag_SeverBusinessConditionsValue = false; flag_SeverBusinessConditionsWrite = false; return -1; } else { //如果是商业服,没写明标语,则返回true(unlimited) flag_SeverBusinessConditionsValue = false; flag_SeverBusinessConditionsWrite = true; return 99; }; } else{ //其他情况,返回false,提醒审核 flag_SeverBusinessConditionsValue = false; flag_SeverBusinessConditionsWrite = false; return -1; }; } function isAllEqual(array){ //输入一个值,或是一个数组,判定其是否所有数值都相等; return array.every(function(value,i){ return value == 1; }); } function JudgeSameColor(str1,str2){ //输入color1和color2,判定两个值是否在某个误差内 var Dvalue = 15; var check = []; var str1L = str1.indexOf("("); var str1R = str1.indexOf(")"); var subStr1 = String(str1.substring(str1L + 1,str1R)); var Color1 = subStr1.split(', '); var str2L = str2.indexOf("("); var str2R = str2.indexOf(")"); var subStr2 = String(str2.substring(str2L + 1,str2R)); var Color2 = subStr2.split(', '); for(var i_1 = 0; i_1 < Color1.length; i_1++){ if(Math.abs(Color1[i_1] - Color2[i_1]) <= Dvalue){ check[i_1] = 1; }else{ check[i_1] = 0; }; }; return isAllEqual(check); } var flag_BodyTextSize = true; var flag_BodyTextColor = true; var flag_BodyTextBGColor = true; var flag_BodyTextGGL = true; //设置全局变量 字体大小, 字体颜色, 背景颜色, 刮刮乐 function BodyFont_Size_Color(str){ var str_ZZ1 = /font\scolor/; var str_ZZ2 = /^
$/; var str_ZZ3 = /^\s+$/; var str_ZZ4 = /^\s$/; if (str_ZZ1.test(String(str.html()))){ //如果内容中还包含‘font color’,跳出判断。 //console.log('text: ' + str.text()); //console.log('color: ' + cssFontColor); //console.log('flag_HTML: ' + String(str.html())); return true; }else if(str_ZZ2.test(str.html()) && trim(str.find("*").children().text()) == ''){ //如果内容中只有‘
’且无其他内容时,跳出判断。 //console.log('1_text: ' + str.text()); //console.log('1_color: ' + cssFontColor); //console.log('1_flag_HTML: ' + String(str.html())); return true; } /* 旧版判断 if(trim(str.text()) == '' || trim(str.find("*").children().text()) != '' ) //如果内容为空,或依旧有内容时,直接返回true,即跳出判断; */ var color = ['rgb(0, 255, 255)','rgb(255, 255, 0)','rgb(0, 255, 0)','rgb(36, 255, 36)','rgb(255, 0, 255)'] var color_RGBA = ['rgba(0, 255, 255, 0)','rgba(255, 255, 0, 0)','rgba(0, 255, 0, 0)','rgba(36, 255, 36, 0)','rgba(255, 0, 255, 0)'] //按顺序,分别为亮青色, 亮黄色, 亮绿色, 亮绿色, 亮粉色 var flag_FontSize = true; var cssFontSize = str.css('font-size'); //找到font-size的css,并提取 var px = cssFontSize.indexOf('px'); //找到px字符的位置 var FontSize=cssFontSize.substring(0,px); //将px切割,保留数字字符 if(parseInt(FontSize) > 24){ //将string转换为int型,并判断 flag_BodyTextSize = false; flag_FontSize = false; } var flag_FontColor = true; var cssFontColor = str.css('color'); //var cssFontColor = str.getElementById('color').style.color; //找到color的css,并提取 for (var i_color = 0; i_color < color.length; i_color++){ if((JudgeSameColor(cssFontColor, color[i_color]) || JudgeSameColor(cssFontColor, color_RGBA[i_color])) && cssFontColor !='' && !str_ZZ3.test(str.text())){ //判定RGB | RGBA | 是否为空 | 内容是否为多个空格 console.log('2_text: ' + str.text()); console.log('2_color: ' + cssFontColor); console.log('2_flag_HTML: ' + String(str.html())); console.log('2_color['+ i_color +']: ' + color[i_color] + 'RGBA['+ i_color +']: ' + color_RGBA[i_color]); console.log(str_ZZ3.test(str.text())); /* 调试用 暂时不删 ↑*/ flag_BodyTextColor = false; flag_FontColor = false; break; } } var flag_FontBGColor = true; var cssFontBGColor = str.css("background-color"); //var cssFontBGColor = str.getElementById('color').style.backgroundColor; //找到color的css,并提取 for (var i_BGColor = 0; i_BGColor < color_RGBA.length; i_BGColor++){ if((JudgeSameColor(cssFontBGColor, color[i_BGColor]) || JudgeSameColor(cssFontBGColor, color_RGBA[i_BGColor])) && cssFontBGColor !='' && !str_ZZ4.test(str.text())){ console.log('3_text: ' + str.text()); console.log('3_BGcolor: ' + cssFontBGColor); console.log('3_flag_HTML: ' + String(str.html())); console.log('3_BGcolor['+ i_BGColor +']: ' + color[i_BGColor] + 'RGBA['+ i_BGColor +']: ' + color_RGBA[i_BGColor]); /* 调试用 暂时不删 ↑*/ flag_BodyTextBGColor = false; flag_FontBGColor = false; break; } } var flag_FontGGL = true; if (JudgeSameColor(cssFontBGColor, cssFontColor) && (cssFontBGColor != '' || cssFontColor != '') && !str_ZZ4.test(str.text())){ console.log('4_text: ' + str.text()); console.log('4_BGcolor: ' + cssFontBGColor); console.log('4_flag_HTML: ' + String(str.html())); console.log('4_BGcolor['+ i_BGColor +']: ' + color[i_BGColor] + 'RGBA['+ i_BGColor +']: ' + color_RGBA[i_BGColor]); /* 调试用 暂时不删 ↑*/ flag_BodyTextGGL = false; flag_FontGGL = false; } return flag_FontSize && flag_FontColor && flag_FontBGColor && flag_FontGGL; } function BodyFontFlag(){ //用于输出是否违规的tips var TipText = ''; if(flag_BodyTextSize == false){ TipText = TipText + red('❌字号大于5'); }else{ TipText = TipText + green('✅字号合规'); }; if(flag_BodyTextColor == false){ TipText = TipText + '|' + red('❌亮色字体'); }else{ TipText = TipText + '|' + green('✅亮色字体'); }; if(flag_BodyTextBGColor == false){ TipText = TipText + '|' + red('❌亮色背景'); }else{ TipText = TipText + '|' + green('✅亮色背景'); }; if(flag_BodyTextGGL == false){ TipText = TipText + '|' + red('❌妨碍阅读的字体/背景'); }else{ TipText = TipText + '|' + green('✅其他颜色违规'); }; jq('.t_f').html(function(i,origText){ return '
' + TipText + '
' + origText; }); } function CheckMultipleThread(){ //一服多贴tips var UserHomeHref = jq('.avtm').attr("href"); var ServerThreadHref = '&do=thread&from=space&fid=179'; var TipText = '' + orange('🔔检查一服多贴') + '|' jq('.FontSizeTips').html(function(i,origText){ return TipText + origText; }); } function isNowInServerForum(str){ var ZZ1 = />服务器服务器审核区\s›<\/em>/ var ZZ4 = />人才市场<\/a>\s›<\/em>/ var ZZ5 = /服务器版块版规|公告/ var ZZ10 = /gid=167/; //多人联机大区分区的固定URL if((ZZ1.test(str) || ZZ2.test(str)) && !ZZ3.test(str) && !ZZ4.test(str) && !ZZ5.test(str) && ZZ10.test(str)){ return true; } else { return false; }; } function isNull(str){ str = trim(str); if(str == '' || str == '-' || str == '\\' || str == '/'){ return 0; } else{ return 1; } } function isNowPassOK(str){ //判定是否能审核 var ZZ1 = /待编辑|编辑中|讨论/; if(ZZ1.test(str)){ return false; } else { return true; }; } function checkServerTitleInForum(){ //判定页面上的标题是否合格 jq("th.common").each(function(){ //用于判定标题是否合格 //console.log(jq(".common").text()); if(jq(this).parent().parent().find('a[title*="本版置顶主题"]').length <= 0 && jq(this).parent().parent().find('a[title*="分类置顶主题"]').length <= 0 && jq(this).parent().parent().find('a[title*="全局置顶主题"]').length <= 0){ if(!isThisTitleJudged(jq(this).find(".s.xst").text())){ if(isNowPassOK(jq(this).text())){ //用于判定页面所有非编辑状态下的服务器帖的标题 TrueOrFalse(ReviewTitleZZ(jq(this).find(".s.xst").text()), jq(this).find(".s.xst"), '') }else{ TrueOrFalsOrNull(0,jq(this).find(".s.xst"),'',''); }; }; }; //console.log(jq(this).find(".s.xst").text()); }); jq("th.new").each(function(){ //用于判定标题是否合格_new if(jq(this).parent().parent().find('a[title*="本版置顶主题"]').length <= 0 && jq(this).parent().parent().find('a[title*="分类置顶主题"]').length <= 0 && jq(this).parent().parent().find('a[title*="全局置顶主题"]').length <= 0){ if(!isThisTitleJudged(jq(this).find(".s.xst").text())){ if(isNowPassOK(jq(this).text())){ TrueOrFalse(ReviewTitleZZ(jq(this).find(".s.xst").text()), jq(this).find(".s.xst"), ''); }else{ TrueOrFalsOrNull(0,jq(this).find(".s.xst"),'',''); }; }; }; }); ServerHighLightThreads(); } function ServerHighLightThreads(){ //感谢MCBBS Extender提供的思路 jq("head").append(``); jq('a[title*="关闭的主题"]').parent().addClass("closed"); jq('th.common').find(".s.xst:contains('✅')").parent().parent().children(".icn").addClass("pass"); jq('th.common').find(".s.xst:contains('❌')").parent().parent().children(".icn").addClass("out"); jq('th.common').find(".s.xst:contains('🔔')").parent().parent().children(".icn").addClass("wait"); jq('th.new').find(".s.xst:contains('✅')").parent().parent().children(".icn").addClass("pass"); jq('th.new').find(".s.xst:contains('❌')").parent().parent().children(".icn").addClass("out"); jq('th.new').find(".s.xst:contains('🔔')").parent().parent().children(".icn").addClass("wait"); } function NextPageEventListener(_func){ //用于监听下一页按钮,并重新审核标题 if((jq('#autopbn').text() != '下一页 »') && (jq('#autopbn').css("display") !='none')){ //console.log(1); setTimeout(function (){ NextPageEventListener(_func); }, 250); }else{ _func(); } } function Old_point(){ //积分还原 var i = 0; jq(".pil.cl").each(function(){ var str1 = jq(".pil.cl").eq(i).text(); var str2 = jq(".i.y").children(".cl").eq(i).text(); var jf = str2.match(/积分-?\d+/); var rq = str2.match(/人气-?\d+/); var gx = str2.match(/贡献-?\d+/); var ax = str2.match(/爱心-?\d+/); var jl = str1.match(/金粒-?\d+/); var bs = str1.match(/宝石-?\d+/); var zs = str2.match(/钻石-?\d+/); var jf_int = jf[0].match(/-?\d+/); var rq_int = rq[0].match(/-?\d+/); var gx_int = gx[0].match(/-?\d+/); var ax_int = ax[0].match(/-?\d+/); var jl_int = jl[0].match(/-?\d+/); var bs_int = bs[0].match(/-?\d+/); var zs_int = zs[0].match(/-?\d+/); var str3 = "
积分
" + jf_int.toString() + "
" + "
人气
" + rq_int.toString() + " 点
" + "
贡献
" + gx_int.toString() + " 份
" + "
爱心
" + ax_int.toString() + " 心
" + "
金粒
" + jl_int.toString() + " 粒
" + "
绿宝石
" + bs_int.toString() + " 颗
" + "
钻石
" + zs_int.toString() + " 颗
" jq(".pil.cl").eq(i).html(str3); i++; }); } function Old_medal(){ //勋章长度还原 jq(".md_ctrl").css("max-height","5000px"); } function CheckThreadIsFlashed(){ //判定页面是否刷新 jq('.t_f').eq(0).html(function(i,origText){ return origText + '
'; }); } /************************ * 从这开始,为主函数 **/ var Flag_TitleTrue = true; var Flag_UserPoint_GX = true; var Flag_UserPoint_LBS = true; function js_main_thread_body(){ //贴子内,内容检测 Flag_UserPoint_GX = UserPointZZ(jq(".pil.cl dd").eq(2).text()); TrueOrFalse(Flag_UserPoint_GX, jq(".pil.cl dd").eq(2), ''); //eq(2)为贡献 Flag_UserPoint_LBS = UserPointZZ(jq(".pil.cl dd").eq(5).text()); TrueOrFalse(Flag_UserPoint_LBS, jq(".pil.cl dd").eq(5), ''); //eq(5)为绿宝石 TrueOrFalse(ServerTitleName(jq('#thread_subject').text(), jq(".cgtl.mbm tbody tr td").eq(0).text()) > 0 , jq(".cgtl.mbm tbody tr td").eq(0), '模板服务器名称与标题不符'); //eq(0)为服务器名称 //提取标题中的服务器名称后,和模板内服务器名称做对比 ServerVersionTips(getServerVersion(jq('#thread_subject').text(), jq(".cgtl.mbm tbody tr td").eq(2).text())); //eq2为版本号 //提取标题中的版本号后,和模板内版本号做对比 jq('.t_f').find('font').each(function(){ OnlyFalse(BodyFont_Size_Color(jq(this)), jq(this), ''); }); //console.log(flag_BodyTextSize); //用于debug输出是否有大于5号的字↑ jq('.spoilerbody').each(function(){ jq(this).css('display','block'); }) //展开所有的折叠页 BodyFontFlag(); //输出是否违规的tips CheckMultipleThread(); //输出检查一服多贴的tips //console.log(jq(".cgtl.mbm tbody tr td").eq(14).text()); //用于debug输出IP地址↑ TrueOrFalse(ServerIPAddress(jq(".cgtl.mbm tbody tr td").eq(14).text()) >= 1 , jq(".cgtl.mbm tbody tr td").eq(14), '未在模板标注有效的IP地址/获取方式'); //eq(14)为IP地址 //使用正则来匹配IP地址 TrueOrFalsOrNull(ServerClientDownload(jq(".cgtl.mbm tbody tr td").eq(11).text()) + ServerClientDownloadSet(jq(".cgtl.mbm tbody tr td").eq(9).text()), jq(".cgtl.mbm tbody tr td").eq(11), '未在模板标注有效的客户端下载地址', '记得测试一下是否有效'); //eq(9)为服务器类型,eq(11)为客户端下载地址 ThreeDifferentTips(ServerType(jq(".cgtl.mbm tbody tr td").eq(9).text()), jq(".cgtl.mbm tbody tr td").eq(9), '该服为“纯净”类型,注意Mod/插件', '', '只允许领域服选择“其他”类型'); //eq(9)为服务器类型 TrueOrFalsOrNull(SeverBusinessConditions(jq(".cgtl.mbm tbody tr td").eq(3).text(), jq('.t_f').text()), jq(".cgtl.mbm tbody tr td").eq(3), "公益服标语不合格", "需要注意其公益服标语"); //eq(3)为服务器营利模式, jq('.t_f').text()为服务器内容 /** * ↓↓最后执行↓↓ */ jq(".cgtl.mbm tbody tr td").each( function(){ //用于判定模板是否有空 OnlyFalse(isNull(jq(this).text()), jq(this), '该项为空'); }); }; function js_main_thread_head(){ //帖子内,标题部分 Flag_TitleTrue = ReviewTitleZZ(jq('#thread_subject').text()); TrueOrFalse(Flag_TitleTrue, jq('#thread_subject'), ''); //通过正则表达式判断标题是否正确 }; function js_main_forum(){ //在版块时运行的函数 checkServerTitleInForum(); //用于判定页面所有服务器帖的标题 try{ document.getElementById('autopbn').addEventListener('click', function(e){ //监听下一页按钮触发click时,再次审核一遍 NextPageEventListener(checkServerTitleInForum); }, false); }catch(err){ "none"; }; }; jq(document).ready(function(){ if (isNowInServerForum(jq(".bm.cl").html())) { //判定在服务器版,执行以下操作; CheckThreadIsFlashed(); //用于检测页面是否被刷新 Old_point(); //还原旧版积分 Old_medal(); //勋章长度还原 js_main_forum(); //在版块时运行的函数 js_main_thread_head(); js_main_thread_body(); //在贴内的函数 jq(".pl.bm").children("div").on('DOMNodeInserted',function(){ //当内容被改变时,重新加载body部分函数 if(jq(".CheckThreadIsFlashed").val() == undefined){ CheckThreadIsFlashed(); //用于检测页面是否被刷新 Old_point(); //还原旧版积分 Old_medal(); //勋章长度还原 js_main_thread_body(); //在贴内的函数 } }) }else{ //判定不在服务器版,执行以下操作; CheckThreadIsFlashed(); Old_point(); //还原旧版积分 Old_medal(); //勋章长度还原 jq(".pl.bm").children("div").on('DOMNodeInserted',function(){ //当内容被改变时,重新加载body部分函数 if(jq(".CheckThreadIsFlashed").val() == undefined){ CheckThreadIsFlashed(); //用于检测页面是否被刷新 Old_point(); //还原旧版积分 Old_medal(); //勋章长度还原 } }) }; }); })();