// ==UserScript==
// @name 斗鱼全等级弹幕屏蔽
// @namespace https://www.liebev.site
// @version 1.2
// @description **项目已弃用**douyu斗鱼,高级弹幕屏蔽,突破30级等级屏蔽限制
// @author LiebeV
// @license MIT: Copyright (c) 2023 LiebeV
// @match https://www.douyu.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=douyu.com
// @grant GM_registerMenuCommand
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
"use strict";
// **********-------------------**********
// 由于网页弹幕逻辑,会至多产生200个新弹幕dom节点,致使此脚本算法效率低下。故停止更新,推荐用户停止使用此脚本,请关注后续更新新项目发布
// **********-------------------**********
// v1.2,添加了在飘屏区右键弹幕时快速添加id的功能
// 更新计划,添加在右侧弹幕区快速添加id的功能
// let userBannedIds = GM_getValue("bannedIds", []);
// let bannedIds = userBannedIds;
// let dmCache = [];
// //尝试获取弹幕区
// async function getRightList() {
// // console.log('高级弹幕屏蔽初始化成功');
// let ulList;
// let count = 0;
// while (!ulList && count < 20) {
// ulList = document.getElementById("js-barrage-list");
// console.log("尝试获取Right弹幕区...");
// if (!ulList) {
// console.log(`失败,等待1秒钟再尝试获取,剩余重试:${20 - count}`);
// await new Promise((resolve) => setTimeout(resolve, 1000));
// count++;
// }
// }
// if (!ulList) {
// console.log("无法获取Right弹幕区,请刷新网页");
// } else {
// console.log("已获Right取弹幕区,准备开启rightMO感知");
// console.log(ulList);
// }
// return ulList;
// }
// // 右侧 mutation observer
// async function rightMO() {
// const ulList = await getRightList();
// // console.log('Right感知准备完成');
// const rightObserver = new MutationObserver(function (mutations) {
// mutations.forEach(function (mutation) {
// mutation.addedNodes.forEach(function (righNode) {
// if (righNode.nodeName === "LI") {
// // console.log('\x1b[32m%s\x1b[0m', 'Right弹幕区感知到新弹幕:');
// // console.log(righNode);
// rightCheck(righNode);
// }
// });
// });
// });
// const config = { childList: true };
// rightObserver.observe(ulList, config);
// console.log("Right感知挂载完成,等待新弹幕...");
// }
// // 检查id,获取发言内容,right2mid
// async function rightCheck(righNode) {
// const userId = righNode.querySelector("span.Barrage-nickName[title]").getAttribute("title");
// if (userBannedIds.includes(userId)) {
// righNode.style.display = "none";
// const danmu = righNode.querySelector("span.Barrage-content").textContent.trim();
// // console.log("rightcheck:" + danmu);
// if (dmCache.includes(danmu)) {
// const xpath = `//div[contains(text(), "${danmu}")]`;
// // const midDivElement = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
// const snapshotResult = document.evaluate(
// xpath,
// document,
// null,
// XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
// null
// );
// for (let i = 0; i < snapshotResult.snapshotLength; i++) {
// const midDivElement = snapshotResult.snapshotItem(i);
// midDivElement.parentElement.style.display = "none";
// }
// }
// console.log(`"${userId}" 的发言已被屏蔽!`);
// }
// }
// // 获取飘屏弹幕区
// async function getMainList() {
// let divList;
// let count = 0;
// // 尝试等待页面加载 20s
// while (!divList && count < 20) {
// divList = document.querySelector(".danmu-e7f029");
// if (!divList) {
// await new Promise((resolve) => setTimeout(resolve, 1000));
// count++;
// }
// }
// if (!divList) {
// console.log("无法获取飘屏弹幕区,请刷新网页");
// } else {
// console.log("已获取飘屏弹幕区,准备开启midMO感知");
// console.log(divList);
// }
// return divList;
// }
// // 飘屏mutation observer
// async function midMO() {
// const middivList = await getMainList();
// // console.log('mid感知准备完成');
// const midObserver = new MutationObserver(function (mutations) {
// mutations.forEach(function (mutation) {
// mutation.addedNodes.forEach(function (midNode) {
// if (midNode.nodeName === "DIV") {
// // console.log('\x1b[32m%s\x1b[0m', '飘屏区感知到新弹幕:');
// // console.log(midNode);
// getMidText(midNode);
// }
// });
// });
// });
// const midConfig = { childList: true };
// midObserver.observe(middivList, midConfig);
// console.log("mid感知挂载完成,等待新弹幕...");
// }
// // 获取飘屏区弹幕内容,存入临时数组,等待比对
// async function getMidText(midNode) {
// const midText = midNode.querySelector("div.text-edf4e7").textContent;
// // console.log(midText);
// dmCache.push(midText);
// // console.log(dmCache);
// if (dmCache.length > 10) {
// dmCache.splice(0, dmCache.length);
// }
// }
// //通过setValue像存储器添加id
// async function addId(userIdInput) {
// // console.log('addId接收到传入');
// if (!bannedIds.includes(userIdInput)) {
// bannedIds.push(userIdInput);
// console.log(`已添加屏蔽用户: ${userIdInput}`);
// GM_setValue("bannedIds", bannedIds);
// } else {
// const index = bannedIds.indexOf(userIdInput);
// if (index !== -1) {
// bannedIds.splice(index, 1);
// console.log(`已移除屏蔽用户: ${userIdInput}`);
// GM_setValue("bannedIds", bannedIds);
// }
// }
// }
// async function showSettings() {
// let message = "当前被您屏蔽的用户ID列表:\n";
// const idList = GM_getValue("bannedIds", []);
// for (let i = 0; i < idList.length; i++) {
// message += `${i + 1}. ${idList[i]}\n`;
// }
// const userIdInput = prompt(`${message}\n请输入要屏蔽发言的用户id`);
// if (userIdInput) {
// console.log("接收到用户id");
// addId(userIdInput);
// }
// }
// GM_registerMenuCommand("添加屏蔽用户", showSettings);
// async function menu() {
// await rightMO();
// await midMO();
// await subadd();
// const container = document.querySelector(".ChatToolBar");
// const mnq = document.createElement("div");
// mnq.classList.add("liebevmnq");
// Object.assign(mnq.style, {
// display: "inline-block",
// verticalAlign: "middle",
// width: "18px",
// height: "18px",
// marginRight: "8px",
// });
// const inner = document.createElement("div");
// inner.classList.add("liebevmnqInner");
// Object.assign(inner.style, {
// width: "100%",
// height: "100%",
// });
// const btn = document.createElement("div");
// btn.classList.add("liebevmnqBtn");
// Object.assign(btn.style, {
// position: "relative",
// color: "rgb(255, 255, 255)",
// background: "rgb(187, 187, 187)",
// borderRadius: "4px",
// cursor: "pointer",
// textAlign: "center",
// userSelect: "none",
// });
// const moniqi = document.createElement("span");
// moniqi.innerText = "模";
// container.appendChild(mnq);
// mnq.appendChild(inner);
// inner.appendChild(btn);
// btn.appendChild(moniqi);
// btn.addEventListener("click", showmenu);
// }
// async function showmenu() {
// const btn = document.querySelector("div.liebevmnq");
// const checker = document.querySelector("div.mnqHeader");
// if (checker) {
// checker.remove();
// } else {
// const commandmenu = document.createElement("div");
// commandmenu.classList.add("mnqHeader");
// Object.assign(commandmenu.style, {
// position: "absolute",
// left: "-8px",
// right: "-8px",
// bottom: "32px",
// boxShadow: "0 -3px 6px rgba(0,0,0,.1)",
// border: "1px solid #e5e5e5",
// borderTopRightRadius: "8px",
// borderTopLeftRadius: "8px",
// animation: "slideUp .3s cubic-bezier(.22,.58,.12,.98) forwards",
// backgroundColor: "#fff",
// });
// const head = document.createElement("div");
// head.classList.add("Header-head");
// Object.assign(head.style, {
// height: "45px",
// lineHeight: "45px",
// color: "#333",
// fontSize: "16px",
// padding: "0 38px 0 16px",
// backgroundColor: "#f4f4f4",
// position: "relative",
// borderTopLeftRadius: "8px",
// borderTopRightRadius: "8px",
// userSelect: "none",
// });
// head.innerText = "LiebeV房管模拟器";
// const panel = document.createElement("div");
// panel.classList.add("mnqPanel");
// Object.assign(panel.style, {
// padding: "0 0 0 16px",
// height: "206px",
// boxSizing: "border-box",
// overflowY: 'scroll'
// });
// const idList = GM_getValue("bannedIds", []);
// panel.innerText = `当前被您屏蔽的用户ID列表:\n${idList
// .map((id, i) => `${i + 1}. ${id}`)
// .join("\n")}`;
// const input = document.createElement("div");
// input.classList.add("mnqinput");
// Object.assign(input.style, {
// position: "relative",
// margin: "0 16px",
// borderTop: "1px solid #e8e8e8",
// height: "46px",
// background: "#fff",
// lineHeight: "46px",
// });
// const textInput = document.createElement("input");
// textInput.type = "text";
// textInput.placeholder = "请输入您要屏蔽/移除的用户ID";
// Object.assign(textInput.style, {
// width: "80%",
// height: "100%",
// border: "none",
// outline: "none",
// paddingLeft: "10px",
// fontSize: "16px",
// });
// textInput.addEventListener("keydown", function (event) {
// if (event.key === "Enter") {
// addId(event.target.value);
// event.target.value = "";
// }
// });
// btn.appendChild(commandmenu);
// commandmenu.appendChild(head);
// commandmenu.appendChild(panel);
// commandmenu.appendChild(input);
// input.appendChild(textInput);
// }
// }
// async function subadd() {
// document.addEventListener("mouseup", function (event) {
// if (event.button === 2) {
// setTimeout(() => {
// const sub = document.querySelector(".danmudiv-32f498");
// // console.log(sub);
// const subbtn = document.createElement("div");
// subbtn.classList.add("subaddbtn");
// subbtn.innerText = "模--添加id";
// Object.assign(subbtn.style, {
// margin: "2px 40px",
// cursor: "crosshair",
// position: "relative",
// color: "rgb(255, 255, 255)",
// background: "rgb(187, 187, 187)",
// borderRadius: "20px",
// textAlign: "center",
// });
// sub.appendChild(subbtn);
// let Id = document.querySelector(".danmuAuthor-3d7b4a").innerText;
// subbtn.addEventListener("click", function() {
// addId(Id);
// subbtn.style.backgroundColor = "green";
// subbtn.style.border = "2px solid green";
// setTimeout(() => {
// subbtn.style.backgroundColor = "rgb(187, 187, 187)";
// subbtn.style.border = "none";
// }, 500);
// });
// }, 100);
// }
// });
// }
// (function () {
// menu();
// })();