你好,我是秦始皇
// ==UserScript==
// @name linuxdo-fakeKing
// @namespace https://bbs.tampermonkey.net.cn/
// @version 0.1.0
// @description 你好,我是秦始皇
// @author uniqueww
// @match https://linux.do/*
// @grant GM_xmlhttpRequest
// @run-at document-end
// @license MIT
// ==/UserScript==
(function() {
'use strict';
let userName;
let userAccount;
let userAccount_low;
GM_xmlhttpRequest({
method: 'GET',
url: 'https://connect.linux.do',
onload: (response) => {
const bodyRegex = /你好,([^()]+) \(([^)]+)\)/;
const matches = bodyRegex.exec(response.responseText);
if (matches) {
userName = matches[1].trim();
userAccount = matches[2].trim();
userAccount_low = userAccount.toLowerCase();
console.log(`User Name: ${userName}`);
console.log(`User Account: ${userAccount}`);
processElements();
} else {
console.error('No matches found.');
}
},
onerror: (error) => {
console.error('Request failed:', error);
}
});
// 插入 icon 的函数
const insertIcon = (userCardElement) => {
let parentElement = userCardElement.parentNode;
const existingFlair = parentElement.querySelector('.avatar-flair');
if (existingFlair) {
existingFlair.remove();
}
let icon = `
<svg class="fa d-icon d-icon-battery-quarter svg-icon svg-node" aria-hidden="true">
<use xlink:href="#battery-quarter"></use>
</svg>`;
let iconElement = document.createElement('div');
iconElement.className = 'avatar-flair rounded';
iconElement.style.backgroundColor = '#00aeff';
iconElement.style.color = '#fff';
iconElement.title = 'admins';
iconElement.innerHTML = icon;
userCardElement.appendChild(iconElement)
};
// 样式 avatar 的函数
const styleAvatar = (element) => {
element.style.borderRadius = '10%';
element.style.setProperty('border-radius', '10%', 'important');
};
// 替换 span 的函数
const replaceSpan = (spanElement) => {
let parentSpan = spanElement.parentElement;
let newContent = `
<span class="first full-name staff admin moderator">
<a href="/u/${userAccount}" data-user-card="${userAccount}" class="">${userName}</a>
<span title="此用户是版主" class="svg-icon-title">
<svg class="fa d-icon d-icon-shield-alt svg-icon svg-node" aria-hidden="true">
<use xlink:href="#shield-alt"></use>
</svg>
</span>
</span>`;
parentSpan.outerHTML = newContent;
};
// 处理所有匹配的元素
const processElements = () => {
if (!userAccount) return; // 确保 userAccount 已定义
document.querySelectorAll(`a.trigger-user-card[data-user-card="${userAccount}"]`).forEach(userCardElement => {
if (!userCardElement.closest('div.topic-map-post.created-at')) {
insertIcon(userCardElement);
}
});
document.querySelectorAll(`img.avatar[src^="https://cdn.linux.do/user_avatar/linux.do/${userAccount_low}/"]`).forEach(styleAvatar);
document.querySelectorAll(`span.first.full-name a[data-user-card="${userAccount}"]`).forEach(replaceSpan);
};
// 监听 URL 变化
const observeURLChange = () => {
let oldHref = document.location.href;
const body = document.querySelector('body');
const observer = new MutationObserver((mutations) => {
if (oldHref !== document.location.href) {
oldHref = document.location.href;
processElements();
}
});
observer.observe(body, { childList: true, subtree: true });
};
// 页面加载完成后执行
window.addEventListener('load', () => {
observeURLChange();
});
})();