// ==UserScript== // @name 老男人助手 // @namespace http://tampermonkey.net/ // @version 0.6 // @description 适用于老男人游戏论坛:https://bbs.oldmanemu.net/ 的小工具 // @author rock128 // @match https://bbs.oldmanemu.net/* // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant none // @require https://cdn.bootcdn.net/ajax/libs/jscolor/2.4.7/jscolor.min.js // @license GPL-3.0 License // @downloadURL none // ==/UserScript== (function() { 'use strict'; const BLACK_TYPE_ALL = "全部"; const BLACK_TYPE_THREAD = "帖子"; const BLACK_TYPE_REPLY = "回复"; var SIGN_TITLE = "签到" var HAS_HIDDEN_CONTENT_KEYWORD = "此处隐藏内容请回复后再查看" var AUTO_REPLY_MSG = [] var BLACK_LIST = {} var BACKGROUND_COLOR = '#C7EDCC'; var FONT_COLOR = '#000000'; var AUTHOR_BACKGROUND_COLOR = '#96a48b' var AUTHOR_QUOTE_BACKGROUND_COLOR = '#b7b1a5' jscolor.presets.default = { position: 'right', palette: [ '#FFFFFF', '#FAF9DE', '#FFF2E2', '#FDE6E0', '#E3EDCD', '#DCE2F1', '#E9EBFE', '#EAEAEF', '#C7EDCC', '#CCE8CF', '#6E7B6C' ] }; var actionArray = [ { describe : "页面自动签到", open : false, matchCondition : function(){ return isMatchPageCategory("index") || window.location.href == 'https://bbs.oldmanemu.net/' }, doAction : function(){ if($("#sign_title").text() == SIGN_TITLE){ $.xpost(xn.url("my-sign"),"",function(message){}); } }, settingPanelHtml: '签到按钮文本:

' }, { describe : "去除灯笼", open : false, matchCondition : function(){ return true }, doAction : function(){ $(".deng") && $(".deng").remove() } }, { describe : "黑名单", open : true, matchCondition : function(){ return isMatchPageCategory("") || isMatchPageCategory("index") }, doAction : function(){ hideBlackListUserContent() }, settingPanelHtml: '
' }, { describe : "自动回复隐藏帖子", open : false, matchCondition : function(){ return isMatchPageCategory("thread") }, doAction : function(){ if($(".alert-warning") && $(".alert-warning").text().indexOf(HAS_HIDDEN_CONTENT_KEYWORD) != -1){ var msg = AUTO_REPLY_MSG[Math.floor(Math.random()*AUTO_REPLY_MSG.length)]; $(".message .form-control").val(msg) $("#quick_reply_form").submit() } }, settingPanelHtml:'识别页面是否有隐藏内容的关键词:


自动回复消息模板:

' }, { describe : "键盘左右键翻页", open : false, matchCondition : function(){ return true }, doAction : function(){ $(document).keydown(function(event){ if(event.keyCode == 37){ let preA = $(".page-link:contains('◀')") if(preA && preA.length > 0){ window.location.href = preA.attr("href") } }else if(event.keyCode == 39){ let nextA = $(".page-link:contains('▶')") if(nextA && nextA.length > 0){ window.location.href = nextA.attr("href") } } }); } }, { describe : "阅读模式", open : false, matchCondition : function(){ return true }, doAction : function(){ $(document).find("*").each(function(i,item){ if($(item).parents('#helper-setting-panel').length > 0){ return } let oldCss = item.style.cssText || "" $(item).css("cssText",oldCss+"background-color:"+BACKGROUND_COLOR+"!important;color:"+FONT_COLOR+"!important;background-image:none!important;") }) }, settingPanelHtml:'背景色:    文字颜色:
' }, { describe : "双击返回顶部", open : false, matchCondition : function(){ return true }, doAction : function(){ $(document).dblclick("click",function () { $('html,body').animate({scrollTop: '0px'}, 300) }); } }, { describe : "楼主高亮显示", open : false, matchCondition : function(){ return true }, doAction : function(){ $(".badge.badge-secondary.small.haya-post-info-first-floor").each(function(){ var block = $(this).parent().parent().parent().parent().get(0) let oldCss = block.style.cssText || "" $(block).css("cssText",oldCss+"background-color:"+AUTHOR_BACKGROUND_COLOR+"!important;") var quote = $(block).find(".blockquote").get(0) if(quote){ oldCss = quote.style.cssText || "" $(quote).css("cssText",oldCss+"background-color:"+AUTHOR_QUOTE_BACKGROUND_COLOR+"!important;") } }) }, settingPanelHtml:'背景色:    引用背景颜色:
' }, { describe : "表情", open : true, matchCondition : function(){ return isMatchPageCategory("thread") }, doAction : function(){ var style = document.createElement('style'); style.innerText = '.emoji-item{width:40px;height:40px;display:flex;justify-content:center;align-items:center;cursor:default;font-size:20px;}.emojis-panel{display:none;height:300px;width:300px;overflow:auto;background:#EEEEEE;display:flex;flex-direction:row;flex-wrap:wrap;}.emojis::-webkit-scrollbar{display:none;}'; document.head.appendChild(style); var emojisPanel = $('
') $("body").append(emojisPanel) var emojRange = [ [128513, 128591],[127744,128511],[128640, 128704],[9986, 10160] ]; for (var i = 0; i < emojRange.length; i++) { var range = emojRange[i]; for (var x = range[0]; x < range[1]; x++) { var d = $('
&#'+x+';
'); d.addClass("emoji-item") d.attr("code","0x"+x.toString(16)) d.click(function(){ var code = $(this).attr("code") var msg = $("#message").val() var start = $("#message")[0].selectionStart var end = $("#message")[0].selectionEnd $("#message").val(msg.substring(0, start) + String.fromCodePoint(code) + msg.substring(end, msg.length)) }) emojisPanel.append(d) } } var button = $('
😄
') $(button).click(function(){ if($(".emojis-panel").css("display")==='none'){ $(".emojis-panel").css("position", "absolute"); $(".emojis-panel").css("top", $('#message').offset().top - 310); $(".emojis-panel").css("left", $('#message').offset().left); $(".emojis-panel").show(200); }else{ $(".emojis-panel").hide(200) } }) $("#message").focus(function(){ if($(".emojis-panel").css("display")!='none'){ $(".emojis-panel").hide(200) } }) $("#submit").parent().css("display","flex") $("#submit").parent().append(button) } } ] Function.prototype.getMultiLine = function() { var lines = new String(this); lines = lines.substring(lines.indexOf("/*") + 3, lines.lastIndexOf("*/")); return lines; } String.prototype.format= function() { if(arguments.length === 0) return this; var param = arguments[0], str= this; if(typeof(param) === 'object') { for(var key in param) str = str.replace(new RegExp("\\{" + key + "\\}", "g"), param[key]); return str; } else { for(var i = 0; i < arguments.length; i++) str = str.replace(new RegExp("\\{" + i + "\\}", "g"), arguments[i]); return str; } } function hideBlackListUserContent(){ $(".media.thread.tap") && $(".media.thread.tap").each(function(i,item){ var id = $(item).children().eq(0).attr("href") id = id.replace("user-","").replace(".htm","") if(isBan(id,BLACK_TYPE_ALL) || isBan(id,BLACK_TYPE_THREAD) ){ $(item).hide() } }) $(".media.post") && $(".media.post").each(function(i,item){ var id = $(item).children().eq(0).attr("href") id = id.replace("user-","").replace(".htm","") if(isBan(id,BLACK_TYPE_ALL) || isBan(id,BLACK_TYPE_REPLY) ){ $(item).hide() } }) } function isBan(userId,type){ var content = BLACK_LIST[userId]; if(content == undefined){ return false; } if(content == "" && type == BLACK_TYPE_THREAD){ return true; } return content == type } function localStorageGetItem(key,defaultVal){ let val = localStorage.getItem(key) return val ? val : defaultVal } function localStorageGetStringArray(key,defaultVal,split=","){ let value = localStorage.getItem(key) return (value && value.length > 0) ? value.split(split) : defaultVal } // 读取黑名单数据的兼容方法,最初版本是用数组保存,现在改成对象,如果 localStorage 保存的是数组格式数据,在这里转换为对象 function loadBlackList(){ let value = localStorage.getItem("BLACK_LIST") if(!value || value.length == 0){ return {} } if(/^(\d+,)*\d+$/.test(value)){ let blackList = {} let array = value.split(","); for(let i of array){ blackList[i]="" } return blackList } return JSON.parse(value); } function loadSettingFromLocalStorage(){ SIGN_TITLE = localStorageGetItem("SIGN_TITLE","签到") HAS_HIDDEN_CONTENT_KEYWORD = localStorageGetItem("HAS_HIDDEN_CONTENT_KEYWORD","本帖含有隐藏内容") AUTO_REPLY_MSG = localStorageGetStringArray("AUTO_REPLY_MSG",[]) BLACK_LIST = loadBlackList() BACKGROUND_COLOR = localStorageGetItem("BACKGROUND_COLOR","#E3EDCD") AUTHOR_BACKGROUND_COLOR = localStorageGetItem("AUTHOR_BACKGROUND_COLOR",AUTHOR_BACKGROUND_COLOR) AUTHOR_QUOTE_BACKGROUND_COLOR = localStorageGetItem("AUTHOR_QUOTE_BACKGROUND_COLOR",AUTHOR_QUOTE_BACKGROUND_COLOR) FONT_COLOR = localStorageGetItem("FONT_COLOR","#000000") let fnOpenStatus = localStorageGetStringArray("fnOpenStatus",[]) for(let i =0;i屏蔽用户帖子") var button2 = $("") var button3 = $("") $(button).click(function(){ var id = $(this).attr("user-id") BLACK_LIST[id] = BLACK_TYPE_THREAD var username = $(this).attr("user-name") BLACK_LIST["username-"+id] = username hideBlackListUserContent() saveSettingFromLocalStorage() $("#user-operate-menu").hide(); }); $(button2).click(function(){ var id = $(this).attr("user-id") BLACK_LIST[id] = BLACK_TYPE_REPLY var username = $(this).attr("user-name") BLACK_LIST["username-"+id] = username hideBlackListUserContent() saveSettingFromLocalStorage() $("#user-operate-menu").hide(); }); $(button3).click(function(){ var id = $(this).attr("user-id") BLACK_LIST[id] = BLACK_TYPE_ALL var username = $(this).attr("user-name") BLACK_LIST["username-"+id] = username hideBlackListUserContent() saveSettingFromLocalStorage() $("#user-operate-menu").hide(); }); $("#user-operate-menu").empty() $("#user-operate-menu").append(button) $("#user-operate-menu").append(button2) $("#user-operate-menu").append(button3) $("#user-operate-menu").css("position", "absolute"); $("#user-operate-menu").css("top", $(this).offset().top); $("#user-operate-menu").css("left", $(this).offset().left - 70); $("#user-operate-menu").show(); $('#user-operate-menu').unbind() $('#user-operate-menu').mouseleave(function(){ //console.log("鼠标移出悬浮菜单") $("#user-operate-menu").hide(); }) }) $('.avatar-3').mouseleave(function(){ var href = $(this).parent().attr("href") var offset = $("#user-operate-menu").offset() var width = $("#user-operate-menu").outerWidth(true) + 10 var height = $("#user-operate-menu").outerHeight(true) + 10 if(window.__xx && window.__yy){ if(window.__xx > Math.ceil(offset.left + width) || window.__yy > Math.ceil(offset.top + height) || window.__xx < Math.ceil(offset.left) || window.__yy < Math.ceil(offset.height)){ $("#user-operate-menu").hide(); } } //console.log("mouse:"+window.__xx+","+window.__yy+" div:"+offset.left+","+offset.top+","+width+","+height+" "+Math.ceil(offset.left + width)+","+Math.ceil(offset.top + height)) }) window.onClickFunctionSwitch = function (checkbox,fnPanelId){ if(checkbox.checked){ $("#"+fnPanelId).show(250) }else{ $("#"+fnPanelId).hide(250) } } function functionListHtml(){ /**
{describe}
{html}
*/ } function updateFunctionSwitch(){ actionArray.forEach(function(e,i){ e.open = $("#fn-checkbox-"+i)[0].checked }) } function loadJSColor(){ var input = $("[data-jscolor]"); for(var i=0;i' new $Msg({ useHTML:true, content:html, type:"success", cancle:function(){}, confirm:function(){ SIGN_TITLE = $("#sign-key").val(); HAS_HIDDEN_CONTENT_KEYWORD = $("#hide-key").val(); AUTO_REPLY_MSG = $("#auto-reply").val().split("\n"); var blackListInfo = $("#black-list").val().split("\n"); BLACK_LIST = {}; for(let i of blackListInfo){ let tmpArray = i.split("=") if(tmpArray.length == 1){ BLACK_LIST[tmpArray[0]] = "" }else if(tmpArray.length == 2){ BLACK_LIST[tmpArray[0]] = tmpArray[1] }else if(tmpArray.length == 3){ BLACK_LIST[tmpArray[0]] = tmpArray[1] BLACK_LIST["username-"+tmpArray[0]] = tmpArray[2] } } BACKGROUND_COLOR = $("#background-color-input").val(); FONT_COLOR = $("#font-color-input").val(); AUTHOR_BACKGROUND_COLOR = $("#author-background-color-input").val(); AUTHOR_QUOTE_BACKGROUND_COLOR = $("#author-quote-background-color-input").val(); updateFunctionSwitch() saveSettingFromLocalStorage() window.location.reload(); new $Msg({content:"设置已经保存",contentStyle:{ backgroundColor:white, color:black }}) } },function(){ loadJSColor(); }) } // 设置按钮代码参考:https://greasyfork.org/zh-CN/scripts/419215-%E8%87%AA%E5%8A%A8%E6%97%A0%E7%BC%9D%E7%BF%BB%E9%A1%B5 let _style = `` let _html = `