// ==UserScript== // @name H2P: 虎牙自动禁言 // @namespace http://tampermonkey.net/ // @version 0.0.2 // @icon https://a.msstatic.com/huya/h5player/room/2006231627/src/img/output/replay-fornotice-icon.png // @description 虎牙自动禁言 // @author H2P // @compatible chrome // @match *://*.huya.com/* // @note 2020.06.24-V0.0.01 虎牙自动禁言 // @note 2020.06.24-V0.0.02 修复手动禁言不显示的 BUG // @downloadURL none // ==/UserScript== (function() { 'use strict'; const $H2P = function (xpath, one = true) { if (one) { return document.querySelector(xpath); } else { return Array.from(document.querySelectorAll(xpath)); } } const myKeyCode = { 'a': 65, 'b': 66, 'c': 67, 'd': 68, 'e': 69, 'f': 70, 'g': 71, 'h': 72, 'i': 73, 'j': 74, 'k': 75, 'l': 76, 'm': 77, 'n': 78, 'o': 79, 'p': 80, 'q': 81, 'r': 82, 's': 83, 't': 84, 'u': 85, 'v': 86, 'w': 87, 'x': 88, 'y': 89, 'z': 90, } const isHuyaLive = /.*huya\.com\/[\d]+/g.test(window.location.href); if (!isHuyaLive) { return; } const HuyaMute = 'h2p-huya-config-mute'; let config_mute_pre = { EYiShuaPing: { time : '1800', keyWords: [], }, ManMa: { time : '1800', keyWords: [], }, ShuaGuangGao: { time : '1800', keyWords: [], } }; let config_mute = {}; Object.assign(config_mute, config_mute_pre); let config_mute_tmp = JSON.parse(localStorage.getItem(HuyaMute)) || {}; Object.assign(config_mute, config_mute_tmp); for (let key in config_mute) { if (!(key in config_mute_pre)) { delete config_mute[key]; } } localStorage.removeItem(HuyaMute); localStorage.setItem(HuyaMute, JSON.stringify(config_mute)); new Promise((resolve, reject) => { let style = document.createElement('style'); style.innerHTML = ` #h2p-huya-script { position : fixed; top : 60px; left : 0; width : 450px; height : 325px; border-radius : 0 0 10px 0; padding : 10px; background : #eeeeee; z-index : 100000; } .h2p-huya-div { display : flex; flex-flow : row wrap; justify-content : space-between; } .h2p-huya-layer { justify-content : flex-start; width : 140px; } .h2p-huya-textarea { width : 130px; height : 265px; padding : 5px; resize : none; font-size : 10px; line-height : 15px; } .h2p-huya-button { width : 100%; height : 25px; border : none; border-radius : 5px; background-color: #00deba; cursor : pointer; outline : none; transition : all 0.5s; } .h2p-huya-button:hover { background-color: #00ccaa; } .h2p-huya-button-active { background-color: #99aaff; transition : all 0.5s; } .h2p-huya-button-active:hover { background-color: #8899cc; } `; document.body.appendChild(style); let div = document.createElement('div'); div.id = 'h2p-huya-script'; div.style = 'display: none'; div.innerHTML = `
`; document.body.appendChild(div); resolve(); }) .then(() => { let div = $H2P('div#h2p-huya-script'); div.addEventListener('change', (e) => { const target = e.target; if (target.tagName.toLowerCase() !== 'select') return; const value = target.selectedOptions[0].value; if (target.id === 'h2p-huya-select-EYiShuaPing') { config_mute.EYiShuaPing.time = value; } else if (target.id === 'h2p-huya-select-ManMa') { config_mute.ManMa.time = value; } else if (target.id === 'h2p-huya-select-ShuaGuangGao') { config_mute.ShuaGuangGao.time = value; } localStorage.setItem(HuyaMute, JSON.stringify(config_mute)); }); div.addEventListener('input', (e) => { const target = e.target; if (target.tagName.toLowerCase() !== 'textarea') return; const value = target.value; if (target.id === 'h2p-huya-textarea-EYiShuaPing') { config_mute.EYiShuaPing.keyWords = value.split('\n'); } else if (target.id === 'h2p-huya-textarea-ManMa') { config_mute.ManMa.keyWords = value.split('\n'); } else if (target.id === 'h2p-huya-textarea-ShuaGuangGao') { config_mute.ShuaGuangGao.keyWords = value.split('\n'); } localStorage.setItem(HuyaMute, JSON.stringify(config_mute)); }); let button = $H2P('button#h2p-huya-button'); button.addEventListener('click', () => { button.classList.toggle('h2p-huya-button-active'); button.textContent = button.classList.contains('h2p-huya-button-active') ? '启动中' : '启动'; setINVL_checkMsg(); }); }) .then(() => { const times = ['1800', '86400', '259200', '604800']; for (let i = 0; i < times.length; i++) { if (config_mute.EYiShuaPing.time === times[i]) { $H2P('select#h2p-huya-select-EYiShuaPing').selectedIndex = i; } if (config_mute.ManMa.time === times[i]) { $H2P('select#h2p-huya-select-ManMa').selectedIndex = i; } if (config_mute.ShuaGuangGao.time === times[i]) { $H2P('select#h2p-huya-select-ShuaGuangGao').selectedIndex = i; } } $H2P('textarea#h2p-huya-textarea-EYiShuaPing').value = Array.isArray(config_mute.EYiShuaPing.keyWords) ? config_mute.EYiShuaPing.keyWords.join('\n') : ''; $H2P('textarea#h2p-huya-textarea-ManMa').value = Array.isArray(config_mute.ManMa.keyWords) ? config_mute.ManMa.keyWords.join('\n') : ''; $H2P('textarea#h2p-huya-textarea-ShuaGuangGao').value = Array.isArray(config_mute.ShuaGuangGao.keyWords) ? config_mute.ShuaGuangGao.keyWords.join('\n') : ''; }) .then(() => { document.addEventListener('keydown', (e) => { if (e.shiftKey && e.which == myKeyCode.j) { $H2P('div#h2p-huya-script').style.display = $H2P('div#h2p-huya-script').style.display === 'none' ? '' : 'none'; } }); }) let checkMsg = null; let minDataID = -1; let muteUser = null; function setINVL_checkMsg() { if (checkMsg) { window.clearInterval(checkMsg); window.clearInterval(muteUser); checkMsg = null; muteUser = null; return; } checkMsg = setInterval(() => { if (muteUser) { return; } let msgs = $H2P('ul#chat-room__list > li', false).filter(ele => Number(ele.getAttribute('data-id')) > minDataID); let index = -1; let time = undefined; for (let i = 0; i < msgs.length; i++) { let ele = msgs[i]; minDataID = Number(ele.getAttribute('data-id')); if (ele.querySelector('span.msg') && ele.querySelector('span.name.J_userMenu')) { let user = ele.querySelector('span.name.J_userMenu').textContent; let msg = ele.querySelector('span.msg').textContent; // 判断是否存在满足禁言的弹幕 for (let j = 0; j < config_mute.EYiShuaPing.keyWords.length && !time; j++) { let keyWord = config_mute.EYiShuaPing.keyWords[j]; if (keyWord.length > 0 && msg.includes(keyWord)) { index = 1; time = config_mute.EYiShuaPing.time; break; } } for (let j = 0; j < config_mute.ManMa.keyWords.length && !time; j++) { let keyWord = config_mute.ManMa.keyWords[j]; if (keyWord.length > 0 && msg.includes(keyWord)) { index = 2; time = config_mute.ManMa.time; break; } } for (let j = 0; j < config_mute.ShuaGuangGao.keyWords.length && !time; j++) { let keyWord = config_mute.ShuaGuangGao.keyWords[j]; if (keyWord.length > 0 && msg.includes(keyWord)) { index = 3; time = config_mute.ShuaGuangGao.time; break; } } } if (time) { ele.querySelector('span.name.J_userMenu').click(); // 开始禁言 muteUser = setInterval(() => { let style = document.createElement('style'); style.id = 'h2p-huya-style-mute'; style.innerHTML = ` #duya-header, #J_mainWrap, #J_roomBd, .mod-sidebar, .duya-header-wrap { z-index : 99999; } #J_mainWrap, #main_col { background-color: #f4f5f8; } .dlg { display: none!important; } `; if (!$H2P('style#h2p-huya-style-mute')) { document.body.appendChild(style); } if ($H2P('div.ucard-box li[data-code="MUTE"]')) { window.clearInterval(muteUser); $H2P('div.ucard-box li[data-code="MUTE"]').click(); muteUser = setInterval(() => { if ($H2P(`div.dlg-bd div.cause select#J_dlgMuteCause`)) { window.clearInterval(muteUser); // 选择禁言类型 $H2P(`div.dlg-bd div.time input[value="${time}"]`).checked = true; $H2P(`div.dlg-bd div.cause select#J_dlgMuteCause`).selectedIndex = index; $H2P(`div.dlg-ft a.dlg-btn-orange`).click(); console.log(`禁言 ${ele.querySelector('span.name.J_userMenu').textContent}`); muteUser = setInterval(() => { if ($H2P(`div.dlg-ft a.dlg-btn-orange`)) { $H2P(`div.dlg-ft a.dlg-btn-orange`).click(); $H2P('style#h2p-huya-style-mute').remove(); window.clearInterval(muteUser); muteUser = null; } }, 50); } }, 50); } }, 50); break; }; } }, 500); } })();