-
Notifications
You must be signed in to change notification settings - Fork 0
/
斗鱼全等级弹幕屏蔽.user.js
351 lines (322 loc) · 12.7 KB
/
斗鱼全等级弹幕屏蔽.user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
// ==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();
// })();