// ==UserScript==
// @name McbbsReviewServerHelperForUser
// @version 0.1.03
// @description MRSHFU - 你的服务器发帖好助手
// @author 萌萌哒丶九灬书
// @namespace https://space.bilibili.com/1501743
// @mainpage https://gf.qytechs.cn/zh-CN/scripts/420651-mcbbsreviewserverhelperForUser/
// @supportURL https://gf.qytechs.cn/zh-CN/scripts/420651-mcbbsreviewserverhelperForUser/feedback
// @home-url https://gf.qytechs.cn/zh-TW/scripts/420651-mcbbsreviewserverhelperForUser/
// @homepageURL https://gf.qytechs.cn/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
// ==/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 '<font color="green">' + str + '</font>';
}else{
return '';
}
}
function red(str){
//文本快捷变红
if(str != ''){
return '<font color="red">' + str + '</font>';
}else{
return '';
}
}
function orange(str){
//文本快捷变橘
if(str != ''){
return '<font color="#A63C00">' + str + '</font>';
}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 = /^<br>$/;
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()) == ''){
//如果内容中只有‘<br>’且无其他内容时,跳出判断。
//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 '<div align="center" class="FontSizeTipsDiv"><font size="4" class="FontSizeTips">' + TipText + '</font></div>' + origText;
});
}
function CheckMultipleThread(){
//一服多贴tips
var UserHomeHref = jq('.avtm').attr("href");
var ServerThreadHref = '&do=thread&from=space&fid=179';
var TipText = '<a href="' + UserHomeHref + ServerThreadHref + '" class="CheckMultipleThread">' + orange('🔔检查一服多贴') + '</a>|'
jq('.FontSizeTips').html(function(i,origText){
return TipText + origText;
});
}
function isNowInServerForum(str){
var ZZ1 = />服务器</;
var ZZ2 = />服务器审核区</;
var ZZ3 = /服务器\/玩家评论<\/a>\s<em>›<\/em>/
var ZZ4 = />人才市场<\/a>\s<em>›<\/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(`<style id="ServerHighLightThreads">
.tl .icn.pass{
background-image: linear-gradient(90deg, rgba(022, 198, 012, 0.3), transparent);
border-left: 3px solid rgb(022, 198, 012);
}
.tl .icn.out{
background-image: linear-gradient(90deg, rgba(240, 058, 023, 0.3), transparent);
border-left: 3px solid rgb(240, 058, 023);
}
.tl .icn.wait{
background-image: linear-gradient(90deg, rgba(255, 200, 061, 0.3), transparent);
border-left: 3px solid rgb(255, 200, 061);
}
.tl .icn.closed{
background-image: linear-gradient(90deg, rgba(255, 129, 255, 0.3), transparent);
border-left: 3px solid rgb(255, 129, 255);
}
</style>`);
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 = "<dt>积分</dt><dd>" + jf_int.toString() + "</dd>" +
"<dt>人气</dt><dd>" + rq_int.toString() + " 点</dd>" +
"<dt>贡献</dt><dd>" + gx_int.toString() + " 份</dd>" +
"<dt>爱心</dt><dd>" + ax_int.toString() + " 心</dd>" +
"<dt>金粒</dt><dd>" + jl_int.toString() + " 粒</dd>" +
"<dt>绿宝石</dt><dd>" + bs_int.toString() + " 颗</dd>" +
"<dt>钻石</dt><dd>" + zs_int.toString() + " 颗</dd>"
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 + '<div class="CheckThreadIsFlashed"></div>';
});
}
/************************
* 从这开始,为主函数
**/
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();
//勋章长度还原
}
})
};
});
})();