b站直播分区页面 自动检索红包/天选直播间并跳转 脚本

配合 b站直播自动抽红包脚本使用。来到直播分区页面,如:https://live.bilibili.com/p/eden/area-tags?parentAreaId=9&areaId=0 按“F1”或“F2”开始运行,按“F9”删除页面的直播封面(低调摸鱼)

  1. // ==UserScript==
  2. // @name b站直播分区页面 自动检索红包/天选直播间并跳转 脚本
  3. // @namespace http://tampermonkey.net/
  4. // @version 6.4
  5. // @description 配合 b站直播自动抽红包脚本使用。来到直播分区页面,如:https://live.bilibili.com/p/eden/area-tags?parentAreaId=9&areaId=0 按“F1”或“F2”开始运行,按“F9”删除页面的直播封面(低调摸鱼)
  6. // @author Ikaros
  7. // @match https://live.bilibili.com/p/eden/area-tags*
  8. // @match https://live.bilibili.com/*
  9. // @grant unsafeWindow
  10. // @grant GM_openInTab
  11. // @grant GM_getValue
  12. // @grant GM_setValue
  13. // @icon http://bilibili.com/favicon.ico
  14. // @namespace https://greasyfork.org/scripts/447595
  15. // @license MIT
  16. // ==/UserScript==
  17.  
  18. /*
  19. 使用说明:
  20. 配合 b站直播自动抽红包脚本使用。
  21. 来到直播分区页面,如:https://live.bilibili.com/p/eden/area-tags?parentAreaId=9&areaId=0
  22. 点击筛选按钮运行 或 按“F1”或“F2”开始运行
  23. */
  24.  
  25. window.addEventListener('load', function () {
  26. // 配置数据
  27. let red_packet_data_json = null;
  28. // 分区id
  29. let area_id = 9;
  30. // 打开页面时间间隔
  31. let open_time = 5000;
  32. // 最大打开直播间数量
  33. let max_num = 5;
  34. // 请求传入页面的参数
  35. let page = 1;
  36. let key_flag = 0;
  37. // roomid数组
  38. let roomid_list = [];
  39. // 弹窗定时器
  40. let interval_alert_div = null;
  41. // 打开页面类型 0红包+天选 1红包 2天选
  42. let page_type = 1;
  43. // 自动循环运行定时器
  44. let loop_run_interval = null;
  45. // 自动循环时间间隔 毫秒,默认15分钟
  46. let loop_run_time = 15;
  47. // 循环判断直播间有无红包时间间隔 默认3分钟
  48. let auto_close_interval = 3;
  49. // 是否启用无红包自动关闭直播间功能 false是禁用 true是启用
  50. let auto_close = false;
  51. // 是否启用自动删除无用内容 false是禁用 true是启用
  52. let auto_remove = false;
  53. // 生成弹窗div
  54. function init_alert_div() {
  55. var body = document.getElementsByTagName("body")[0];
  56. var alert_div = document.createElement("div");
  57. var alert_content_span = document.createElement("span");
  58.  
  59. alert_div.id = "alert_div";
  60. alert_div.style.zIndex = "66666";
  61. alert_div.style.top = "1%";
  62. alert_div.style.left = "30%";
  63. alert_div.style.width = "500px";
  64. alert_div.style.height = "50px";
  65. alert_div.style.padding = "5px";
  66. alert_div.style.position = "fixed"
  67. alert_div.style.background = "#4a4a4aaa";
  68. alert_div.style.display = "none";
  69. alert_content_span.id = "alert_content_span";
  70. alert_content_span.style.width = "280px";
  71. alert_content_span.style.fontSize = "16px";
  72. alert_content_span.style.color = "white";
  73. // alert_content_span.style.backgroundColor = "#4a4a4aaa";
  74. alert_content_span.innerText = "";
  75.  
  76. alert_div.appendChild(alert_content_span);
  77. body.appendChild(alert_div);
  78. }
  79.  
  80. init_alert_div();
  81.  
  82. // 显示弹出框 传入显示的内容content
  83. function show_alert(content, auto_hide = true) {
  84. // 清除旧的定时
  85. clearTimeout(interval_alert_div);
  86.  
  87. var alert_div = document.getElementById("alert_div");
  88. var alert_content_span = document.getElementById("alert_content_span");
  89. alert_content_span.innerText = content;
  90. alert_div.style.display = "block";
  91.  
  92. // console.log(auto_hide);
  93. if (auto_hide) {
  94. // console.log("自动隐藏")
  95. // 5s后自动隐藏弹窗div
  96. interval_alert_div = setTimeout(() => {
  97. alert_div.style.display = "none";
  98. }, 5000);
  99. }
  100. }
  101.  
  102. // 获取配置
  103. function get_config() {
  104. console.log("获取本地配置")
  105. show_alert("获取本地配置")
  106.  
  107. // 尝试获取
  108. try {
  109. red_packet_data_json = JSON.parse(GM_getValue("red_packet_data_json"));
  110. area_id = red_packet_data_json["area_id"] == null ? 9 : red_packet_data_json["area_id"]
  111. open_time = red_packet_data_json["open_time"] == null ? 3000 : red_packet_data_json["open_time"]
  112. max_num = red_packet_data_json["max_num"] == null ? 5 : red_packet_data_json["max_num"]
  113. loop_run_time = red_packet_data_json["loop_run_time"] == null ? 15 : red_packet_data_json["loop_run_time"]
  114. auto_close_interval = red_packet_data_json["auto_close_interval"] == null ? 3 : red_packet_data_json["auto_close_interval"]
  115. auto_close = red_packet_data_json["auto_close"] == null ? false : red_packet_data_json["auto_close"]
  116. auto_remove = red_packet_data_json["auto_remove"] == null ? false : red_packet_data_json["auto_remove"]
  117.  
  118. console.log("当前配置:分区ID=" + area_id + " 打开页面间隔=" + open_time + " 最大页面数=" + max_num +
  119. "\n红包/天选存在检测间隔=" + auto_close_interval + " 自动关闭=" + auto_close + " 自动删除无用=" + auto_remove)
  120. show_alert("当前配置:分区ID=" + area_id + " 打开页面间隔=" + open_time + " 最大页面数=" + max_num +
  121. "\n红包/天选存在检测间隔=" + auto_close_interval + " 自动关闭=" + auto_close + " 自动删除无用=" + auto_remove)
  122. } catch {
  123. red_packet_data_json = {
  124. "area_id": area_id,
  125. "open_time": open_time,
  126. "max_num": max_num,
  127. "loop_run_time": loop_run_time,
  128. "auto_close_interval": auto_close_interval,
  129. "auto_close": false,
  130. "auto_remove": false
  131. }
  132. GM_setValue("red_packet_data_json", JSON.stringify(red_packet_data_json))
  133. console.log("本地无配置,已初始化")
  134. show_alert("本地无配置,已初始化")
  135. }
  136. }
  137.  
  138. get_config();
  139.  
  140. // 位于直播分区页面
  141. if(window.location.href.startsWith("https://live.bilibili.com/p/eden/area-tags")) {
  142. // 在页面左侧插入一个配置使用框
  143. function init_config_div() {
  144. // 在页面左侧插入一个用户筛选框
  145. var body = document.getElementsByTagName("body")[0];
  146. var br1 = document.createElement("br");
  147. var br2 = document.createElement("br");
  148. var br3 = document.createElement("br");
  149. var br4 = document.createElement("br");
  150. var br5 = document.createElement("br");
  151. var br6 = document.createElement("br");
  152. var br7 = document.createElement("br");
  153. var br8 = document.createElement("br");
  154. var div = document.createElement("div");
  155. var show_hide_div = document.createElement("div");
  156. var search_div = document.createElement("div");
  157. var area_id_span = document.createElement("span");
  158. var area_id_input = document.createElement("input");
  159. var open_time_span = document.createElement("span");
  160. var open_time_input = document.createElement("input");
  161. var max_num_span = document.createElement("span");
  162. var max_num_input = document.createElement("input");
  163. var loop_run_time_span = document.createElement("span");
  164. var loop_run_time_input = document.createElement("input");
  165. var auto_close_interval_span = document.createElement("span");
  166. var auto_close_interval_input = document.createElement("input");
  167. var auto_close_checkbox = document.createElement("input");
  168. var auto_close_label = document.createElement("label");
  169. var auto_remove_checkbox = document.createElement("input");
  170. var auto_remove_label = document.createElement("label");
  171. var save_config_btn = document.createElement("button");
  172. var search = document.createElement("button");
  173. var search1 = document.createElement("button");
  174. var search2 = document.createElement("button");
  175. var loop_btn = document.createElement("button");
  176. var describe_span = document.createElement("span");
  177.  
  178. div.style.position = "fixed";
  179. div.style.top = "10%";
  180. div.style.width = "300px";
  181. div.style.left = "10px";
  182. div.style.zIndex = "6666";
  183. div.style.background = "#4a4a4abb";
  184. show_hide_div.style.width = "180px";
  185. show_hide_div.style.fontSize = "18px";
  186. show_hide_div.style.background = "#ef8400";
  187. show_hide_div.style.textAlign = "center";
  188. show_hide_div.style.padding = "5px";
  189. show_hide_div.style.cursor = "pointer";
  190. show_hide_div.innerText = "红包/天选检索☚";
  191. show_hide_div.onclick = function () { show_hide(); };
  192. search_div.setAttribute("id", "search_div");
  193. search_div.style.display = "none";
  194. search_div.style.color = "#c7ff00";
  195. search_div.style.padding = "0px 0px 10px 10px";
  196.  
  197. area_id_span.innerText = "分区ID";
  198. area_id_input.setAttribute("id", "area_id");
  199. area_id_input.value = area_id;
  200. area_id_input.style.margin = "10px";
  201. area_id_input.style.width = "185px";
  202. area_id_input.setAttribute("placeholder", "输入分区的id,比如虚拟区的就是9,一共有(1,2,3,5,6,9,10,11,13,300)");
  203. open_time_span.innerText = "打开页面间隔(毫秒)";
  204. open_time_input.setAttribute("id", "open_time");
  205. open_time_input.value = open_time;
  206. open_time_input.style.margin = "10px";
  207. open_time_input.style.width = "100px";
  208. open_time_input.setAttribute("placeholder", "输入打开页面间隔,默认5000毫秒");
  209. max_num_span.innerText = "页面最大数量";
  210. max_num_input.setAttribute("id", "max_num");
  211. max_num_input.value = max_num;
  212. max_num_input.style.margin = "10px";
  213. max_num_input.style.width = "150px";
  214. max_num_input.setAttribute("placeholder", "输入打开页面最大数量,默认5个");
  215. loop_run_time_span.innerText = "自动运行间隔(分钟)";
  216. loop_run_time_input.setAttribute("id", "loop_run_time");
  217. loop_run_time_input.value = loop_run_time;
  218. loop_run_time_input.style.margin = "10px";
  219. loop_run_time_input.style.width = "110px";
  220. loop_run_time_input.setAttribute("placeholder", "自动运行的间隔时间");
  221. auto_close_interval_span.innerText = "红包/天选存在检测间隔(分钟)";
  222. auto_close_interval_input.setAttribute("id", "auto_close_interval");
  223. auto_close_interval_input.value = auto_close_interval;
  224. auto_close_interval_input.style.margin = "10px";
  225. auto_close_interval_input.style.width = "59px";
  226. auto_close_interval_input.setAttribute("placeholder", "检测直播间是否存在红包/天选的间隔时间");
  227.  
  228. auto_close_checkbox.id = "auto_close_checkbox";
  229. auto_close_checkbox.type = "checkbox";
  230. auto_close_label.innerText = "自动关闭无奖直播间";
  231. auto_close_label.title = "主要用于自动运行模式下,对抽奖结束的直播间进行关闭,避免过多爆炸";
  232. auto_close_label.setAttribute("for", "auto_close_checkbox");
  233. auto_remove_checkbox.id = "auto_remove_checkbox";
  234. auto_remove_checkbox.type = "checkbox";
  235. auto_remove_label.innerText = "删除直播间无用内容";
  236. auto_remove_label.title = "主要用于简化抽奖页面,防止页面内容过多导致的性能不足问题";
  237. auto_remove_label.setAttribute("for", "auto_remove_checkbox");
  238.  
  239. save_config_btn.innerText = "仅保存配置";
  240. save_config_btn.style.background = "#61d0ff";
  241. save_config_btn.style.border = "1px solid";
  242. save_config_btn.style.borderRadius = "3px";
  243. save_config_btn.style.fontSize = "18px";
  244. save_config_btn.style.width = "200px";
  245. save_config_btn.style.margin = "5px 10px";
  246. save_config_btn.style.padding = "5px";
  247. save_config_btn.style.cursor = "pointer";
  248. save_config_btn.onclick = function () { save_config(); };
  249.  
  250. search.innerText = "筛选红包+天选";
  251. search.style.background = "#61d0ff";
  252. search.style.border = "1px solid";
  253. search.style.borderRadius = "3px";
  254. search.style.fontSize = "18px";
  255. search.style.width = "200px";
  256. search.style.margin = "5px 10px";
  257. search.style.padding = "5px";
  258. search.style.cursor = "pointer";
  259. search.onclick = function () { go(0); };
  260.  
  261. search1.innerText = "筛选红包";
  262. search1.style.background = "#61d0ff";
  263. search1.style.border = "1px solid";
  264. search1.style.borderRadius = "3px";
  265. search1.style.fontSize = "18px";
  266. search1.style.width = "100px";
  267. search1.style.margin = "5px 10px";
  268. search1.style.padding = "5px";
  269. search1.style.cursor = "pointer";
  270. search1.onclick = function () { go(1); };
  271.  
  272. search2.innerText = "筛选天选";
  273. search2.style.background = "#61d0ff";
  274. search2.style.border = "1px solid";
  275. search2.style.borderRadius = "3px";
  276. search2.style.fontSize = "18px";
  277. search2.style.width = "100px";
  278. search2.style.margin = "5px 10px";
  279. search2.style.padding = "5px";
  280. search2.style.cursor = "pointer";
  281. search2.onclick = function () { go(2); };
  282.  
  283. loop_btn.innerText = "每隔n分钟,自动筛选";
  284. loop_btn.setAttribute("placeholder", "默认读取上一次的筛选模式");
  285. loop_btn.style.background = "#61d0ff";
  286. loop_btn.style.border = "1px solid";
  287. loop_btn.style.borderRadius = "3px";
  288. loop_btn.style.fontSize = "16px";
  289. loop_btn.style.width = "200px";
  290. loop_btn.style.margin = "5px 10px";
  291. loop_btn.style.padding = "5px";
  292. loop_btn.style.cursor = "pointer";
  293. loop_btn.onclick = function () {
  294. console.log("清除旧定时器")
  295. clearInterval(loop_run_interval);
  296.  
  297. let temp_loop_run_time = document.getElementById("loop_run_time").value
  298. try {
  299. if (temp_loop_run_time.length != 0) {
  300. loop_run_time = parseInt(temp_loop_run_time)
  301. }
  302. } catch (error) {
  303. console.log(error);
  304. show_alert(error)
  305. }
  306.  
  307. red_packet_data_json["loop_run_time"] = loop_run_time
  308.  
  309. console.log("开启定时任务,每隔" + loop_run_time + "分钟运行一次")
  310. show_alert("开启定时任务,每隔" + loop_run_time + "分钟运行一次")
  311.  
  312. setTimeout(() => {
  313. go(page_type);
  314. }, 3000);
  315. loop_run_interval = setInterval(() => {
  316. go(page_type);
  317. }, loop_run_time * 60 * 1000);
  318. };
  319.  
  320. describe_span.innerText = "自动运行默认读取上一次的筛选模式。\n自动模式注意页面总数,避免爆炸"
  321. describe_span.style.fontSize = "13px";
  322.  
  323. div.appendChild(show_hide_div);
  324. div.appendChild(search_div);
  325. search_div.appendChild(area_id_span);
  326. search_div.appendChild(area_id_input);
  327. search_div.appendChild(br1);
  328. search_div.appendChild(open_time_span);
  329. search_div.appendChild(open_time_input);
  330. search_div.appendChild(br2);
  331. search_div.appendChild(max_num_span);
  332. search_div.appendChild(max_num_input);
  333. search_div.appendChild(br3);
  334. search_div.appendChild(loop_run_time_span);
  335. search_div.appendChild(loop_run_time_input);
  336. search_div.appendChild(br6);
  337. search_div.appendChild(auto_close_interval_span);
  338. search_div.appendChild(auto_close_interval_input);
  339. search_div.appendChild(br8);
  340. search_div.appendChild(auto_close_checkbox);
  341. search_div.appendChild(auto_close_label);
  342. search_div.appendChild(auto_remove_checkbox);
  343. search_div.appendChild(auto_remove_label);
  344. search_div.appendChild(br7);
  345. search_div.appendChild(save_config_btn);
  346. search_div.appendChild(search);
  347. search_div.appendChild(br4);
  348. search_div.appendChild(search1);
  349. search_div.appendChild(search2);
  350. search_div.appendChild(loop_btn);
  351. search_div.appendChild(br5);
  352. search_div.appendChild(describe_span);
  353. body.appendChild(div);
  354.  
  355. // 初始化复选框选中状态
  356. if(red_packet_data_json.hasOwnProperty("auto_close")) {
  357. if(auto_close_checkbox.checked == null) auto_close_checkbox.checked = false
  358. else auto_close_checkbox.checked = red_packet_data_json["auto_close"]
  359. } else {
  360. auto_close_checkbox.checked = false
  361. red_packet_data_json["auto_close"] = false
  362. }
  363.  
  364. if(red_packet_data_json.hasOwnProperty("auto_remove")) {
  365. if(auto_remove_checkbox.checked == null) auto_remove_checkbox.checked = false
  366. else auto_remove_checkbox.checked = red_packet_data_json["auto_remove"]
  367. } else {
  368. auto_remove_checkbox.checked = false
  369. red_packet_data_json["auto_remove"] = false
  370. }
  371.  
  372. const url = window.location.href;
  373. const urlParams = new URLSearchParams(url.split('?')[1]);
  374. const parentAreaId = urlParams.get('parentAreaId');
  375. console.log("parentAreaId=" + parentAreaId);
  376. area_id_input.value = parentAreaId;
  377.  
  378. console.log("自动获取分区ID=" + parentAreaId)
  379. setTimeout(() => {
  380. show_alert("自动获取分区ID=" + parentAreaId)
  381. }, 1500);
  382. }
  383.  
  384. init_config_div();
  385.  
  386. // 显示隐藏筛选框
  387. function show_hide() {
  388. var search_div = document.getElementById("search_div");
  389. if (search_div.style.display == "none") search_div.style.display = "block";
  390. else search_div.style.display = "none";
  391. }
  392.  
  393. // 传递传递参数event
  394. function keydown(event) {
  395. // “112”为按键F1,可根据需要修改为其他
  396. if (event.keyCode == 112 || event.keyCode == 113) {
  397. if (key_flag == 0) {
  398. // 按下后执行的代码
  399. go(page_type);
  400. }
  401. key_flag = 1;
  402. for (var i = 0; i < 100000; i++);
  403. } else if (event.keyCode == 120) { // 按f9删除一些无用的图片
  404. if(window.location.href.startsWith("https://live.bilibili.com/p/eden/area-tags")) {
  405. var len = document.getElementsByClassName("Item_3ysKErMC").length;
  406. for(var j = 0; j < len; j++) {
  407. document.getElementsByClassName("Item_3ysKErMC")[j].getElementsByClassName("bg-bright-filter")[0].style.display = "none"
  408. document.getElementsByClassName("Item_2onI5dXq")[j].style.display = "none";
  409. }
  410. document.getElementsByClassName("link-navbar-ctnr")[0].remove();
  411. document.getElementById("area-tags").remove();
  412. }
  413. }
  414. }
  415.  
  416. document.addEventListener("keydown", keydown);
  417.  
  418. // 请求分区列表,获取分区直播用户信息 传入分区id 和 页数page
  419. async function get_live_list(area_id, page) {
  420. return new Promise(function (resolve, reject) {
  421. var url = "https://api.live.bilibili.com/xlive/web-interface/v1/second/getList?platform=web&parent_area_id=" + area_id + "&page=" + page
  422. var xhr = new XMLHttpRequest();
  423. xhr.withCredentials = true;
  424. xhr.open('GET', url, true);
  425. xhr.onreadystatechange = function () {
  426. if (xhr.readyState === 4) {
  427. if (xhr.status === 200) {
  428. resolve(xhr.responseText);
  429. } else {
  430. reject(xhr.statusText);
  431. }
  432. }
  433. };
  434. xhr.send();
  435. });
  436. }
  437.  
  438. // 获取红包/天选 用户数据
  439. async function requestData(area_id) {
  440. try {
  441. const data = await get_live_list(area_id, page);
  442. // console.log(data);
  443. var json = JSON.parse(data);
  444. console.log(json);
  445.  
  446. // 判断是否需要继续请求数据
  447. if (json["code"] != 0) {
  448. console.log("code!=0,请求结束");
  449. open_page();
  450. return;
  451. }
  452.  
  453. // console.log('json["data"]["list"].length=' + json["data"]["list"].length)
  454.  
  455. // 遍历列表数据
  456. for(let i = 0; i < json["data"]["list"].length; i++) {
  457. // console.log(json["data"]["list"][i]["pendant_info"])
  458. // 检查JSON对象是否有内容
  459. if (Object.keys(json["data"]["list"][i]["pendant_info"]).length > 0) {
  460. // 有内容,解析pendent_id
  461. for (var key in json["data"]["list"][i]["pendant_info"]) {
  462. if (json["data"]["list"][i]["pendant_info"].hasOwnProperty(key)) {
  463. var pendent_id = json["data"]["list"][i]["pendant_info"][key].pendent_id;
  464. // console.log(pendent_id);
  465. if(page_type == 0) {
  466. // 检索id 是否是红包 或 天选
  467. if(pendent_id == 1096 || pendent_id == 504) {
  468. // 直播房间号追加入list
  469. roomid_list.push(json["data"]["list"][i]["roomid"])
  470. break
  471. }
  472. } else if(page_type == 1) {
  473. // 检索id 是否是红包
  474. if(pendent_id == 1096) {
  475. // 直播房间号追加入list
  476. roomid_list.push(json["data"]["list"][i]["roomid"])
  477. break
  478. }
  479. } else if(page_type == 2) {
  480. // 检索id 是否是天选
  481. if(pendent_id == 504) {
  482. // 直播房间号追加入list
  483. roomid_list.push(json["data"]["list"][i]["roomid"])
  484. break
  485. }
  486. }
  487. }
  488. }
  489. }
  490. }
  491.  
  492. // 去重
  493. roomid_list = roomid_list.filter((value, index) => roomid_list.indexOf(value) === index);
  494.  
  495. // 已经检索到足够数量的直播间,结束
  496. if(roomid_list.length >= max_num) {
  497. console.log("已经检索到足够数量的直播间,搜索结束");
  498. show_alert("已经检索到足够数量的直播间,搜索结束");
  499. open_page();
  500. return;
  501. }
  502.  
  503. // 单页数据不足20说明到底了
  504. if(json["data"]["list"].length < 20) {
  505. console.log("单页数据不足20,搜索到底,结束\n" + "搜索到的结果数=" + roomid_list.length);
  506. show_alert("单页数据不足20,搜索到底,结束\n" + "搜索到的结果数=" + roomid_list.length);
  507. open_page();
  508. return;
  509. }
  510.  
  511. // 继续请求数据
  512. page++;
  513. setTimeout(() => {
  514. requestData(area_id, page);
  515. }, 200);
  516. } catch (error) {
  517. console.log(error);
  518. open_page();
  519. return;
  520. }
  521. }
  522.  
  523. // 打开页面
  524. function open_page() {
  525. for(let i = 0; i < roomid_list.length; i++) {
  526. if(i >= max_num) {
  527. return;
  528. }
  529. setTimeout(function() {
  530. console.log("i:" + i + " 跳转房间号:" + roomid_list[i])
  531. show_alert("i:" + i + " 跳转房间号:" + roomid_list[i])
  532. let url = "https://live.bilibili.com/" + roomid_list[i]
  533. // window.open(roomid_list[i]).getAttribute("href"))
  534. // active:true,新标签页获取页面焦点
  535. // setParent :true:新标签页面关闭后,焦点重新回到源页面
  536. GM_openInTab(url, { active: false, setParent :true});
  537. }, open_time * i)
  538. }
  539. }
  540.  
  541. // 仅保存配置
  542. function save_config() {
  543. console.log("准备保存配置喵")
  544. show_alert("准备保存配置喵")
  545.  
  546. let temp_area_id = document.getElementById("area_id").value
  547. let temp_open_time = document.getElementById("open_time").value
  548. let temp_max_num = document.getElementById("max_num").value
  549. let temp_loop_run_time = document.getElementById("loop_run_time").value
  550. let temp_auto_close_interval = document.getElementById("auto_close_interval").value
  551. let temp_auto_close = document.getElementById("auto_close_checkbox").checked
  552. let temp_auto_remove = document.getElementById("auto_remove_checkbox").checked
  553. try {
  554. if (temp_area_id.length != 0) {
  555. area_id = parseInt(temp_area_id)
  556. }
  557. if (temp_open_time.length != 0) {
  558. open_time = parseFloat(temp_open_time)
  559. }
  560. if (temp_max_num.length != 0) {
  561. max_num = parseInt(temp_max_num)
  562. }
  563.  
  564. if (temp_loop_run_time.length != 0) {
  565. loop_run_time = parseFloat(temp_loop_run_time)
  566. }
  567.  
  568. if (temp_auto_close_interval.length != 0) {
  569. auto_close_interval = parseFloat(temp_auto_close_interval)
  570. }
  571.  
  572. auto_close = temp_auto_close
  573.  
  574. auto_remove = temp_auto_remove
  575. } catch (error) {
  576. console.log(error);
  577. show_alert(error)
  578. }
  579.  
  580. red_packet_data_json["area_id"] = area_id
  581. red_packet_data_json["open_time"] = open_time
  582. red_packet_data_json["max_num"] = max_num
  583. red_packet_data_json["auto_close_interval"] = auto_close_interval
  584. red_packet_data_json["auto_close"] = auto_close
  585. red_packet_data_json["auto_remove"] = auto_remove
  586. GM_setValue("red_packet_data_json", JSON.stringify(red_packet_data_json))
  587. console.log("保存配置到本地")
  588. show_alert("保存配置到本地")
  589.  
  590. console.log("当前配置:分区ID=" + area_id + " 打开页面间隔=" + open_time + " 最大页面数=" + max_num +
  591. "\n红包/天选存在检测间隔=" + auto_close_interval + " 自动关闭=" + auto_close + " 自动删除无用=" + auto_remove)
  592. show_alert("当前配置:分区ID=" + area_id + " 打开页面间隔=" + open_time + " 最大页面数=" + max_num +
  593. "\n红包/天选存在检测间隔=" + auto_close_interval + " 自动关闭=" + auto_close + " 自动删除无用=" + auto_remove)
  594. }
  595.  
  596. function go(type) {
  597. console.log("开始运行喵~检索此分区所有数据或检索到足够数量的直播间后,才会打开链接,请耐心等待~")
  598. show_alert("开始运行喵~检索此分区所有数据或检索到足够数量的直播间后,才会打开链接,请耐心等待~")
  599. page_type = type
  600. // 清空旧数据
  601. roomid_list = []
  602. page = 1
  603.  
  604. // 保存配置
  605. save_config()
  606.  
  607. // 开始请求数据
  608. requestData(area_id);
  609. }
  610. }
  611. // 位于直播页面
  612. else if (window.location.href.startsWith("https://live.bilibili.com/")) {
  613. // 删除无用内容
  614. function remove_useless() {
  615. document.getElementById("sections-vm").remove();
  616. document.getElementById("link-footer-vm").remove();
  617. document.getElementById("sidebar-vm").remove();
  618. document.getElementById("background-manage-vm").remove();
  619. document.getElementById("aside-area-vm").remove();
  620. document.getElementById("room-ssr-vm").remove();
  621. document.getElementsByClassName("gift-presets p-relative t-right")[0].remove();
  622. document.getElementsByClassName("m-guard-ent gift-section guard-ent")[0].remove();
  623. document.getElementsByClassName("player-section p-relative border-box none-select z-player-section")[0].innerHTML = "";
  624. document.getElementsByClassName("live-skin-coloration-area relative dp-i-block")[0].remove();
  625. document.getElementById("my-dear-haruna-vm").remove();
  626. document.getElementsByClassName("lower-row")[0].remove();
  627. }
  628.  
  629. if(red_packet_data_json["auto_remove"]) {
  630. // 5秒后自动删除无用内容
  631. setTimeout(() => {
  632. remove_useless()
  633. }, 5000);
  634. }
  635.  
  636. // 6秒后自动展开红包栏
  637. setTimeout(() => {
  638. try {
  639. document.getElementsByClassName("inner-part")[0].style.display = "block";
  640. } catch(error) {
  641. console.error("Error:", error);
  642. }
  643. }, 6000);
  644.  
  645. if(red_packet_data_json["auto_close"]) {
  646. setInterval(() => {
  647. if(0 == document.getElementsByClassName("popularity-red-envelope-entry gift-left-part").length &&
  648. 0 == document.getElementsByClassName("anchor-lottery-entry gift-left-part").length) {
  649. // 关闭页面
  650. window.close();
  651. }
  652. }, auto_close_interval * 60 * 1000);
  653. }
  654. }
  655. })