更新版本至 1.5.0,新增用户头像旁拉黑按钮功能,优化描述信息

This commit is contained in:
6uu1
2025-08-02 04:17:41 +00:00
parent f44ee05db6
commit 3aec4b42c2
+94 -63
View File
@@ -1,8 +1,8 @@
// ==UserScript==
// @name 全球主机交流论坛增强
// @version 1.4.9
// @version 1.5.0
// @author X.I.U
// @description 自动签到(访问空间 +22 积分)、屏蔽用户(黑名单)、屏蔽关键词(帖子标题)、回帖小尾巴、自动无缝翻页、快捷回到顶部(右键网页两侧空白处)、收起预览帖子(左键网页两侧空白处)、屏蔽投票贴、快速添加链接、屏蔽阅读权限 255 帖子、预览帖子快速回复带签名、显示是否在线、显示帖子内隐藏回复
// @description 自动签到(访问空间 +22 积分)、屏蔽用户(黑名单)、屏蔽关键词(帖子标题)、回帖小尾巴、自动无缝翻页、快捷回到顶部(右键网页两侧空白处)、收起预览帖子(左键网页两侧空白处)、屏蔽投票贴、快速添加链接、屏蔽阅读权限 255 帖子、预览帖子快速回复带签名、显示是否在线、显示帖子内隐藏回复、用户头像旁添加拉黑按钮
// @match *://hostloc.com/*
// @match *://91ai.net/*
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABYUlEQVR4nM2VMUrFQBCG/xUbUz20EGwkIAjewMYreAabtLlKcgLP4BVsPEHEB0J4TeAJPuy0i42TsJP8byfgY/fvNplM9v92Ztb1fd9jgZxzpjhr2qMlPz+EjvUDcSgOtOO6rk2J9XeMSHQCTtdAyHHbtot+kOc5AKAsSwBTEtEJDDUgzpnjqqpmExRF4a2zLPPWTdPs3UA6BJjE+dfmZfb96vLWWwsRTYIpHQKs7wfnPx97E70+PwIAbu4eAExrgyk6AToHrM61uu0OwEhCK7k5MCEwvNC1sH6aTbC6vvfWUgtaQiQ5AvQ2/P58956fnF3NJrDGMaVHICTd76E4EYtPjwCbiOLo4vwUwNgV+sx1nMwFpugEgnNAJmK3eQMwOtMSp9o5639RdAKLN9Btd8FzPegG/lt0Duhu0LejvgOkK6xnL4pOgHbBJPCPBLvtRFbnougEzHcBm5AszqroBH4BBkemS0VRyL4AAAAASUVORK5CYII=
@@ -20,7 +20,6 @@
// @supportURL https://github.com/XIU2/UserScript
// @homepageURL https://github.com/XIU2/UserScript
// ==/UserScript==
(function() {
'use strict';
var menu_ALL = [
@@ -33,13 +32,13 @@
['menu_thread_pageLoading', '帖子内自动翻页', '帖子内自动翻页', true],
['menu_showhide', '显示帖内隐藏回复', '显示帖内隐藏回复', true],
['menu_delate255', '屏蔽阅读权限 255 帖子', '屏蔽阅读权限 255 帖子', true],
['menu_delatePolls', '屏蔽投票帖子', '屏蔽投票帖子', false]
['menu_delatePolls', '屏蔽投票帖子', '屏蔽投票帖子', false],
['menu_addBlockButton', '用户头像旁添加拉黑按钮', '用户头像旁添加拉黑按钮', true]
], menu_ID = [];
for (let i=0;i<menu_ALL.length;i++){ // 如果读取到的值为 null 就写入默认值
if (GM_getValue(menu_ALL[i][0]) == null){GM_setValue(menu_ALL[i][0], menu_ALL[i][3])};
}
registerMenuCommand();
// 注册脚本菜单
function registerMenuCommand() {
if (menu_ID.length > menu_ALL.length){ // 如果菜单ID数组多于菜单数组,说明不是首次添加菜单,需要卸载所有脚本菜单
@@ -64,7 +63,6 @@
}
menu_ID[menu_ID.length] = GM_registerMenuCommand('💬 反馈 & 建议', function () {window.GM_openInTab('https://github.com/XIU2/UserScript#xiu2userscript', {active: true,insert: true,setParent: true});window.GM_openInTab('https://greasyfork.org/zh-CN/scripts/414005/feedback', {active: true,insert: true,setParent: true});});
}
// 菜单开关
function menu_switch(menu_status, Name, Tips) {
if (menu_status == 'true'){
@@ -76,7 +74,6 @@
}
registerMenuCommand(); // 重新注册脚本菜单
};
// 返回菜单值
function menu_value(menuName) {
for (let menu of menu_ALL) {
@@ -85,7 +82,6 @@
}
}
}
// 检查是否登陆
var loginStatus = false;
if (document.getElementById('um')){
@@ -93,10 +89,8 @@
} else {
if (typeof discuz_uid != 'undefined') loginStatus = (discuz_uid != '0' ? true : false);
}
// 默认 ID 为 0
var curSite = {SiteTypeID: 0};
// 自动翻页规则
let DBSite = {
forum: {
@@ -139,7 +133,6 @@
}
}
};
// 用于脚本内部判断当前 URL 类型
let SiteType = {
FORUM: DBSite.forum.SiteTypeID, // 各板块帖子列表
@@ -147,11 +140,9 @@
GUIDE: DBSite.guide.SiteTypeID, // 导读帖子列表
SEARCH: DBSite.search.SiteTypeID // 搜索结果列表
};
// URL 匹配正则表达式
let patt_thread = /\/thread-\d+-\d+\-\d+.html/,
patt_forum = /\/forum-\d+-\d+\.html/
// URL 判断
if (patt_thread.test(location.pathname) || location.search.indexOf('mod=viewthread') > -1) { // 帖子内
if (menu_value('menu_thread_pageLoading')) {
@@ -162,6 +153,7 @@
blockUsers('thread'); // 屏蔽用户(黑名单)
onlineStatus(); // 显示是否在线
replyCustom('thread'); // 回复自定义
if (menu_value('menu_addBlockButton')) addBlockButton(); // 添加拉黑按钮
} else if (patt_forum.test(location.pathname) || location.search.indexOf('mod=forumdisplay') > -1) { // 各板块帖子列表
curSite = DBSite.forum;
collapsedNowPost(); // 收起当前帖子预览(左键左右两侧空白处)
@@ -186,14 +178,11 @@
} else if(location.pathname === '/forum.php' && location.search.indexOf('mod=post&action=reply') > -1 || location.pathname === '/forum.php' && location.search.indexOf('mod=post&action=newthread') > -1) { // 回复:高级回复
replyCustom('reply'); // 回复自定义
}
curSite.pageUrl = ""; // 下一页URL
pageLoading(); // 自动翻页
backToTop(); // 回到顶部(右键点击左右两侧空白处)
if(menu_value('menu_autoSignIn')) autoSignIn(); // 自动签到(访问空间 10 次 = 20 积分)
//replyIntervalDOMNodeInserted(); // 监听插入事件(回帖间隔)
// 自动签到(访问空间 10 次 = 20 积分 + 当天首次访问论坛 2 积分)
function autoSignIn() {
if (!loginStatus) return
@@ -222,15 +211,11 @@
}, 5000);
}
}
// 重新签到
function reAutoSignIn() {
GM_setValue('menu_signInTime', '1970/1/1'); // 设置为比当前日期更早
location.reload(); // 刷新网页
}
// 自定义屏蔽用户
function customBlockUsers() {
let nowBlockUsers = '';
@@ -244,8 +229,6 @@
registerMenuCommand(); // 重新注册脚本菜单
}
};
// 屏蔽用户
function blockUsers(type) {
if (!menu_value('menu_customBlockUsers') || menu_value('menu_customBlockUsers').length < 1) return
@@ -269,7 +252,6 @@
blockUsers_('dl[id^="pmlist_"]', '.ptm.pm_c a[href^="space-uid"]');
break;
}
function blockUsers_(list1, list2, type) {
document.querySelectorAll(list1).forEach(function(item){ // 遍历所有帖子
menu_value('menu_customBlockUsers').forEach(function(item1){ // 遍历用户黑名单
@@ -286,7 +268,6 @@
})
})
}
function blockUsers_vfastpost() {
let vfastpost = e => {
if (e.target.nodeType == 1 && e.target.outerHTML && e.target.outerHTML.indexOf('class="fastpreview"') > -1) {
@@ -309,8 +290,6 @@
document.addEventListener('DOMNodeInserted', vfastpost); // 监听插入事件
}
}
// 自定义屏蔽关键词(帖子标题)
function customBlockKeywords() {
let nowBlockKeywords = '';
@@ -324,8 +303,6 @@
registerMenuCommand(); // 重新注册脚本菜单
}
};
// 屏蔽关键词(帖子标题)
function blockKeywords() {
if (!menu_value('menu_customBlockKeywords') || menu_value('menu_customBlockKeywords').length < 1) return
@@ -339,8 +316,6 @@
})
})
}
// 监听插入事件(有新的回复主题,点击查看)
function blockDOMNodeInserted() {
let block = e => {
@@ -353,8 +328,6 @@
}
document.addEventListener('DOMNodeInserted', block); // 监听插入事件
}
// 监听插入事件(预览快速回复带签名)
function vfastpostDOMNodeInserted() {
let vfastpost = e => {
@@ -364,8 +337,6 @@
}
document.addEventListener('DOMNodeInserted', vfastpost); // 监听插入事件
}
// 自定义小尾巴内容
function customLittleTail() {
let newLittleTail = prompt('编辑 [自定义小尾巴内容],刷新网页后生效(换行请使用 \\n\n提示①:记得在小尾巴前面加上几个 \\n 换行,用来分隔开回帖内容~\n提示②:建议使用 [align=right] 标签来使小尾巴居右~\n提示③:支持论坛富文本标签(建议先找个回复编辑预览好~\n示例:\\n\\n\\n\\n[align=right]第一行内容~\\n第二行内容~[/align]', GM_getValue('menu_customLittleTail'));
@@ -377,8 +348,6 @@
registerMenuCommand(); // 重新注册脚本菜单
}
};
// 回复自定义
function replyCustom(type) {
switch(type) {
@@ -394,7 +363,6 @@
replyCustom_3();
break;
}
function replyCustom_0() {
let vfastpost = e => {
if (e.target.nodeType == 1 && e.target.innerHTML && e.target.innerHTML.indexOf('id="vfastpost"') > -1) {
@@ -407,7 +375,6 @@
}
document.addEventListener('DOMNodeInserted', vfastpost); // 监听插入事件
}
function replyCustom_1() {
let floatlayout_reply = e => {
if (e.target.nodeType == 1 && e.target.innerHTML && e.target.innerHTML.indexOf('id="floatlayout_reply"') > -1) {
@@ -422,13 +389,11 @@
// 快速发帖(各版块帖子列表底部)中添加 URL 按钮
document.querySelector('#fastposteditor .fbld').insertAdjacentHTML('afterend', `<a href="javascript:;" title="点击给选中文字添加 url 标签(可正常显示为 URL" class="flnk" style="filter: hue-rotate(83deg);" onclick="seditor_insertunit('post', '[url][i]', '[/i][/url]');doane(event);">URL</a>`);
}
function replyCustom_2() { // 帖子底部的回复框
document.getElementById('fastpostsubmit').onclick = function(){
if (GM_getValue('menu_customLittleTail')) document.getElementById('fastpostmessage').value += GM_getValue('menu_customLittleTail').replaceAll('\\n', '\n');
}
}
function replyCustom_3() {
let postsubmit = document.getElementById('postsubmit');
if (postsubmit && postsubmit.textContent === '\n参与/回复主题\n' || postsubmit && postsubmit.textContent === '\n发表帖子\n') {
@@ -438,8 +403,6 @@
}
}
}
// 监听插入事件(回帖间隔)
/*function replyIntervalDOMNodeInserted() {
let replyInterval = e => {
@@ -449,8 +412,6 @@
}
document.addEventListener('DOMNodeInserted', replyInterval); // 监听插入事件
}*/
// 自动显示帖子内被隐藏的回复
function showPosts() {
if(menu_value('menu_showhide')){
@@ -460,14 +421,10 @@
}
}
}
// 隐藏帖子内的 [下一页] 按钮
function hidePgbtn() {
document.lastChild.appendChild(document.createElement('style')).textContent = '.pgbtn {display: none;}';
}
// 快捷回到顶部(右键左右两侧空白处)
function backToTop() {
document.body.oncontextmenu = function(event){
@@ -477,8 +434,6 @@
}
}
}
// 收起帖子预览(左键左右两侧空白处)
function collapsedNowPost() {
document.body.onclick = function(event){
@@ -494,8 +449,6 @@
}
}
}
// 显示在线状态
function onlineStatus() {
document.querySelectorAll('[id^="favatar"]').forEach(function(item){ // 遍历所有帖子
@@ -509,8 +462,91 @@
}
})
}
// 添加拉黑按钮
function addBlockButton() {
document.querySelectorAll('[id^="favatar"]').forEach(function(item){ // 遍历所有帖子
let userinfo = item.querySelector('[id^="userinfo"]');
if (userinfo) {
let usernameLink = userinfo.querySelector('a[href^="space-uid"]');
if (usernameLink) {
let username = usernameLink.textContent;
let avatar = item.querySelector('.avatar');
if (avatar && !avatar.parentNode.querySelector('.block-button')) {
// 创建拉黑按钮
let blockButton = document.createElement('div');
blockButton.className = 'block-button';
blockButton.title = `拉黑用户: ${username}`;
blockButton.innerHTML = '🚫';
blockButton.style.cssText = `
position: absolute;
top: -5px;
right: -5px;
width: 20px;
height: 20px;
background-color: #ff4444;
border-radius: 50%;
color: white;
font-size: 12px;
text-align: center;
line-height: 20px;
cursor: pointer;
z-index: 999;
box-shadow: 0 2px 4px rgba(0,0,0,0.2);
transition: all 0.3s ease;
`;
// 鼠标悬停效果
blockButton.addEventListener('mouseenter', function() {
this.style.transform = 'scale(1.2)';
this.style.backgroundColor = '#ff6666';
});
blockButton.addEventListener('mouseleave', function() {
this.style.transform = 'scale(1)';
this.style.backgroundColor = '#ff4444';
});
// 点击事件
blockButton.addEventListener('click', function(e) {
e.preventDefault();
e.stopPropagation();
if (confirm(`确定要将用户 "${username}" 添加到黑名单吗?\n添加后该用户的所有帖子将被屏蔽。`)) {
let blockList = GM_getValue('menu_customBlockUsers') || [];
if (!blockList.includes(username)) {
blockList.push(username);
GM_setValue('menu_customBlockUsers', blockList);
GM_notification({
text: `已将用户 "${username}" 添加到黑名单!\n刷新页面后生效。`,
timeout: 3000
});
// 立即隐藏当前用户的帖子
let postElement = item.closest('[id^="post_"]');
if (postElement) {
postElement.style.opacity = '0.5';
postElement.style.transition = 'opacity 0.5s ease';
setTimeout(() => {
postElement.hidden = true;
}, 500);
}
} else {
GM_notification({
text: `用户 "${username}" 已在黑名单中!`,
timeout: 2000
});
}
}
});
// 将按钮添加到头像旁边
avatar.parentNode.style.position = 'relative';
avatar.parentNode.appendChild(blockButton);
}
}
}
});
}
// 屏蔽阅读权限 255 的帖子
function delate255() {
if (!menu_value('menu_delate255')) return
@@ -522,8 +558,6 @@
})
}
}
// 屏蔽投票贴
function delatePolls() {
if (!menu_value('menu_delatePolls')) return
@@ -533,8 +567,6 @@
})
}
}
// 自动翻页
function pageLoading() {
if (!menu_value('menu_pageLoading')) return
@@ -565,8 +597,6 @@
});
}
}
// 滚动条事件
function windowScroll(fn1) {
var beforeScrollTop = document.documentElement.scrollTop,
@@ -581,8 +611,6 @@
}, false);
}, 1000)
}
// 修改自 https://greasyfork.org/scripts/14178 , https://github.com/machsix/Super-preloader
var ShowPager = {
getFullHref: function (e) {
@@ -634,7 +662,10 @@
// 插入新页面元素
pageElems.forEach(function (one) {toElement.insertAdjacentElement(addTo, one);});
// 屏蔽用户(黑名单)
if (patt_thread.test(location.pathname) || location.search.indexOf('mod=viewthread') > -1) {blockUsers('thread');} else if (location.pathname === '/search.php') {blockUsers('search');}
if (patt_thread.test(location.pathname) || location.search.indexOf('mod=viewthread') > -1) {
blockUsers('thread');
if (menu_value('menu_addBlockButton')) addBlockButton(); // 添加拉黑按钮
} else if (location.pathname === '/search.php') {blockUsers('search');}
delate255(); // 屏蔽 255 权限帖子
delatePolls(); // 屏蔽投票贴子
// 替换待替换元素