免费使用装饰店的头像边框、用户名颜色特效、用户卡背景图片
// ==UserScript==
// @name 白嫖NodeLoc装饰
// @namespace QQ:94575594
// @version 1.4
// @description 免费使用装饰店的头像边框、用户名颜色特效、用户卡背景图片
// @author chendaye
// @grant GM_addStyle
// @match https://www.nodeloc.com/*
// @run-at document-end
// @icon https://favicon.im/www.nodeloc.com
// @license MIT
// ==/UserScript==
(function () {
const config = {
userName: "meihang",
delay: 500
};
const debounce = (func, delay) => {
let timeout;
return (...args) => {
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(this, args), delay);
};
};
const replaceUserName = node => {
if (node == null) document.querySelectorAll(`[username="${config.userName}"]`).forEach(item => replaceUserName(item));
else {
let lable = node.parentNode.querySelector(".username");
if (!lable) {
replaceUserName(node.parentNode);
} else {
if (lable.querySelector(localStorage.userNameStyle)) {
return;
}
lable.className = "username " + localStorage.userNameStyle;
}
}
};
const insertBtn = () => {
document.querySelectorAll(".DecorationStoreLabel").forEach(label => {
if (label.querySelector(".btnPiao")) return;
if (label.previousElementSibling.querySelector(".DecorationItemAvatarImage")) {
const btn = Object.assign(document.createElement("button"), {
className: "btnPiao DecorationItemLabel",
innerHTML: "白嫖头像边框",
onclick: e => handleImageStorage(label, e)
});
label.appendChild(btn);
} else if (label.previousElementSibling.querySelector(".decorationItemUsernameColorStyle")) {
const btn = Object.assign(document.createElement("button"), {
className: "btnPiao DecorationItemLabel",
innerHTML: "白嫖用户名颜色",
onclick: e => handleUserNameStyle(label, e)
});
label.appendChild(btn);
} else if (label.previousElementSibling.querySelector(".DecorationItemProfileBackgroundImage")) {
const btn = Object.assign(document.createElement("button"), {
className: "btnPiao DecorationItemLabel",
innerHTML: "白嫖用户卡背景",
onclick: e => handleUserBackGroundImg(label, e)
});
label.appendChild(btn);
} else if (label.previousElementSibling.querySelector(".DecorationItemProfileBackgroundVideo")) {
const btn = Object.assign(document.createElement("button"), {
className: "btnPiao DecorationItemLabel",
innerHTML: "白嫖用户卡背景",
onclick: e => handleUserBackGroundVideo(label, e)
});
label.appendChild(btn);
}
});
};
const handleUserNameStyle = (label, event) => {
try {
// 阻止事件冒泡
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
const container = label.closest(".DecorationStoreContainer");
const style = container?.querySelector(".decorationItemUsernameColorStyle div");
localStorage.userNameStyle = style.className;
alert("白嫖成功");
} catch (e) {
console.error("白嫖失败:", e);
}
replaceUserName();
};
const handleImageStorage = (label, event) => {
try {
// 阻止事件冒泡
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
const container = label.closest(".DecorationStoreContainer");
const img = container?.querySelector(".DecorationItemAvatarImage");
if (img?.src) {
localStorage.avatarUrl = img.src;
}
alert("白嫖成功");
} catch (e) {
console.error("白嫖失败:", e);
}
replaceAvatar();
};
const handleUserBackGroundImg = (label, event) => {
try {
// 阻止事件冒泡
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
let container;
let imgSrc = "";
if (
label.previousElementSibling.childNodes.length &&
label.previousElementSibling.childNodes[0].className === "DecorationItemProfileBackgroundImage"
) {
container = label.previousElementSibling.childNodes[0];
if (container) {
imgSrc = container?.style.backgroundImage;
}
}
localStorage.backgroundImgUrl = imgSrc;
alert("白嫖成功");
} catch (e) {
console.error("白嫖失败:", e);
}
replaceBgImg();
};
const handleUserBackGroundVideo = (label, event) => {
try {
// 阻止事件冒泡
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
let container;
let imgSrc = "";
if (
label.previousElementSibling.childNodes.length &&
label.previousElementSibling.childNodes[0].className === "DecorationItemProfileBackgroundVideo"
) {
container = label.previousElementSibling.childNodes[0].childNodes[0];
if (container) {
imgSrc = container.src;
}
}
localStorage.backgroundImgUrl = imgSrc;
alert("白嫖成功");
} catch (e) {
console.error("白嫖失败:", e);
}
replaceBgImg();
};
const replaceAvatar = () => {
const storedSrc = localStorage.avatarUrl;
if (!storedSrc) return;
document.querySelectorAll(`[username="${config.userName}"]`).forEach(userContainer => {
const images = userContainer.querySelectorAll("img");
images.forEach(img => {
if (img.src !== storedSrc) {
img.src = storedSrc;
}
});
});
};
const replaceBgImg = () => {
const storedSrc = localStorage.backgroundImgUrl;
if (!storedSrc) return;
document.getElementsByClassName("username").textContent = "";
document.querySelectorAll(`[username="${config.userName}"]`).forEach(userContainer => {
let cardElement = userContainer.closest(".UserCard");
if (cardElement && !cardElement.querySelector("video")) {
if (cardElement) {
if (storedSrc.includes("mp4")) {
cardElement.style.background = "transparent";
cardElement.style.overflow = "hidden";
console.log(cardElement.offsetWidth);
const video = document.createElement("video");
video.src = storedSrc;
video.addEventListener("loadedmetadata", () => {
if (video.videoWidth / video.videoHeight < cardElement.offsetWidth / cardElement.offsetHeight) {
video.style.width = "100%";
video.style.height = "auto";
} else {
video.style.width = "auto";
video.style.height = "100%";
}
});
video.autoplay = true;
video.loop = true;
video.muted = true;
video.playsinline = true;
video.controls = false;
video.style.position = "absolute";
video.style.top = "0";
video.style.left = "50%";
video.style.right = "50%";
video.style.zIndex = "-1";
video.style.transform = "translateX(-50%)";
if (cardElement.className.includes("UserHero")) {
cardElement.style.position = "relative";
video.style.left = "0";
video.style.right = "0%";
video.style.width = "100%";
video.style.height = "unset";
video.style.transform = "translateY(-50%)";
}
cardElement.appendChild(video);
} else {
cardElement.style.backgroundImage = storedSrc;
cardElement.style = `background-image: ${storedSrc}; background-size: cover; background-position: center;`;
}
}
}
});
};
const begin = () => {
replaceAvatar();
replaceUserName();
replaceBgImg();
insertBtn();
};
const observer = new MutationObserver(
debounce(mutationsList => {
mutationsList.forEach(mutation => {
if (mutation.type === "childList") {
mutation.addedNodes.forEach(node => {
begin();
});
}
});
}, config.delay)
);
observer.observe(document.body, {
childList: true,
subtree: true
});
begin();
GM_addStyle(`
@keyframes slideIn {
from { transform: translateX(100%); }
to { transform: translateX(0); }
}
.btnPiao {
background: blue;
border: none;
color: white !important;
cursor: pointer;
transition: all 0.3s;
margin-left: 5px;
}
.btnPiao:hover {
transform: translateY(-1px);
box-shadow: 0 4px 12px #4834d4;
}
`);
})();