上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖
楼主: 小磊飞飞 - 

这个虎牙脚本有没有专业大佬更新一下

[复制链接]
  • TA的每日心情
    开心
    2024-1-11 23:55
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    2

    回帖

    7

    积分

    助理工程师

    积分
    7
    发表于 2022-9-20 15:54:51 | 显示全部楼层 | 阅读模式

    代码如下,我个人觉得会不会是虎牙更改了禁言规则导致了失效

    // ==UserScript==
    // @name H2P: 虎牙自动禁言
    // @namespace http://tampermonkey.net/
    // @version 0.0.6
    // @icon https://a.msstatic.com/huya/h5player/room/2006231627/src/img/output/replay-fornotice-icon.png
    // @description 虎牙自动禁言
    // @author H2P
    // @compatible chrome
    // @require https://greasyfork.org/scripts/411278-h2p-utils/code/H2P:%20utils.js?version=847435
    // @require https://greasyfork.org/scripts/411280-h2p-notify-util/code/H2P:%20notify%20util.js?version=847422
    // @match ://.huya.com/*
    // @note 2020.09.24-V0.0.06 修复虎牙禁言(禁言更新)
    // ==/UserScript==

    (($util, $H2P, $notifyMgr) => {
    'use strict';

    const HuyaMute = 'h2p-huya-config-mute';
    let config_mute_pre = {
    // 恶意刷屏
    EYiShuaPing: {
    time : '1800',
    keyWords: [],
    },
    // 谩骂
    ManMa: {
    time : '1800',
    keyWords: [],
    },
    // 刷广告
    ShuaGuangGao: {
    time : '1800',
    keyWords: [],
    },
    // 色情
    SeQing: {
    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));

    const muteTimes = ['300', '1800', '86400', '604800', '2592000', '31104000'];
    const muteTimes2 = ['5分钟', '30分钟', '1天', '7天', '1个月', '1年'];
    const muteTypes = ['恶意刷屏', '谩骂', '刷广告', '色情'];

    new Promise((resolve, reject) => {
    let style = document.createElement('style');
    style.innerHTML = `

    h2p-huya-script {

        position        : fixed;
        top             : 60px;
        left            : 0;
        width           : 600px;
        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;
        margin          : 5px 0 0;
        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 = `
      <div class="h2p-huya-div">
        <div class="h2p-huya-layer">
          <label>恶意刷屏:</label>
          <select id="h2p-huya-select-EYiShuaPing">
            <option value="300">5 分钟</option>
            <option value="1800">30 分钟</option>
            <option value="86400">1 天</option>
            <option value="604800">7 天</option>
            <option value="2592000">1 个月</option>
            <option value="31104000">1 年</option>
          </select>
          <textarea id="h2p-huya-textarea-EYiShuaPing" class="h2p-huya-textarea"></textarea>
        </div>
        <div class="h2p-huya-layer">
          <label>谩骂:</label>
          <select id="h2p-huya-select-ManMa">
            <option value="300">5 分钟</option>
            <option value="1800">30 分钟</option>
            <option value="86400">1 天</option>
            <option value="604800">7 天</option>
            <option value="2592000">1 个月</option>
            <option value="31104000">1 年</option>
          </select>
          <textarea id="h2p-huya-textarea-ManMa" class="h2p-huya-textarea"></textarea>
        </div>
        <div class="h2p-huya-layer">
          <label>刷广告:</label>
          <select id="h2p-huya-select-ShuaGuangGao">
            <option value="300">5 分钟</option>
            <option value="1800">30 分钟</option>
            <option value="86400">1 天</option>
            <option value="604800">7 天</option>
            <option value="2592000">1 个月</option>
            <option value="31104000">1 年</option>
          </select>
          <textarea id="h2p-huya-textarea-ShuaGuangGao" class="h2p-huya-textarea"></textarea>
        </div>
        <div class="h2p-huya-layer">
          <label>色情:</label>
          <select id="h2p-huya-select-SeQing">
            <option value="300">5 分钟</option>
            <option value="1800">30 分钟</option>
            <option value="86400">1 天</option>
            <option value="604800">7 天</option>
            <option value="2592000">1 个月</option>
            <option value="31104000">1 年</option>
          </select>
          <textarea id="h2p-huya-textarea-SeQing" class="h2p-huya-textarea"></textarea>
        </div>
      </div>
      <div class="h2p-huya-div">
        <button id="h2p-huya-button" class="h2p-huya-button">启动</button>
      </div>
    `;
    
    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;
      } else if (target.id === 'h2p-huya-select-SeQing') {
        config_mute.SeQing.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');
      } else if (target.id === 'h2p-huya-textarea-SeQing') {
        config_mute.SeQing.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(() => {
    // 显示设置的禁言时长
    for (let i = 0; i < muteTimes.length; i++) {
    if (config_mute.EYiShuaPing.time === muteTimes[i]) {
    $H2P('select#h2p-huya-select-EYiShuaPing').selectedIndex = i;
    }
    if (config_mute.ManMa.time === muteTimes[i]) {
    $H2P('select#h2p-huya-select-ManMa').selectedIndex = i;
    }
    if (config_mute.ShuaGuangGao.time === muteTimes[i]) {
    $H2P('select#h2p-huya-select-ShuaGuangGao').selectedIndex = i;
    }
    if (config_mute.SeQing.time === muteTimes[i]) {
    $H2P('select#h2p-huya-select-SeQing').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') : '';
    $H2P('textarea#h2p-huya-textarea-SeQing').value = Array.isArray(config_mute.SeQing.keyWords) ? config_mute.SeQing.keyWords.join('\n') : '';
    })
    .then(() => {
    document.addEventListener('keydown', (e) => {
    if (e.shiftKey && e.which == $util.keyCode.j) {
    $H2P('div#h2p-huya-script').style.display = $H2P('div#h2p-huya-script').style.display === 'none' ? '' : 'none';
    }
    });
    })

    let checkMsg = null;
    let muteUser = null;
    let minDataID = -1; // 检测弹幕开始编号
    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 timeIndex = -1;
    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.replace(/\s*/g, '');
    console.log(检测[${user}]发的弹幕:${msg})
    // 判断是否存在满足禁言的弹幕
    for (let j = 0; j < config_mute.EYiShuaPing.keyWords.length && timeIndex < 0; j++) {
    let keyWord = config_mute.EYiShuaPing.keyWords[j];
    if (keyWord.length > 0 && msg.includes(keyWord)) {
    index = 0;
    timeIndex = muteTimes.indexOf(config_mute.EYiShuaPing.time);
    break;
    }
    }
    for (let j = 0; j < config_mute.ManMa.keyWords.length && timeIndex < 0; j++) {
    let keyWord = config_mute.ManMa.keyWords[j];
    if (keyWord.length > 0 && msg.includes(keyWord)) {
    index = 1;
    timeIndex = muteTimes.indexOf(config_mute.ManMa.time);
    break;
    }
    }
    for (let j = 0; j < config_mute.ShuaGuangGao.keyWords.length && timeIndex < 0; j++) {
    let keyWord = config_mute.ShuaGuangGao.keyWords[j];
    if (keyWord.length > 0 && msg.includes(keyWord)) {
    index = 2;
    timeIndex = muteTimes.indexOf(config_mute.ShuaGuangGao.time);
    break;
    }
    }
    for (let j = 0; j < config_mute.SeQing.keyWords.length && timeIndex < 0; j++) {
    let keyWord = config_mute.SeQing.keyWords[j];
    if (keyWord.length > 0 && msg.includes(keyWord)) {
    index = 3;
    timeIndex = muteTimes.indexOf(config_mute.SeQing.time);
    break;
    }
    }
    }
    if (timeIndex > -1) {
    ele.querySelector('span.name.J_userMenu').click();
    // 开始禁言
    muteUser = setInterval(() => {
    // 禁言后没有该按钮
    const ele_openMute = $H2P('div[class^=user-viewer-content] i[class^=mute-icon]');
    if (ele_openMute) {
    window.clearInterval(muteUser);
    muteUser = null;

              // 该用户已被禁言
              if (ele_openMute.nextSibling.textContent === '解除禁言') {
    
              } else if (ele_openMute.nextSibling.textContent === '禁止发言') {
                // 隐藏禁言选项框
                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;
                  }
                `;
                !$H2P('style#h2p-huya-style-mute') && document.body.appendChild(style);
    
                ele_openMute.click();
                muteUser = setInterval(() => {
                  const muteTime = $H2P(`div[class^=mute-add] div[class^=form-item--]:nth-child(3) p[class^=radio--]`, false);
                  const muteType = $H2P(`div[class^=mute-add] div[class^=form-item--]:nth-child(4) p[class^=radio--]`, false);
                  if (muteTime) {
                    window.clearInterval(muteUser);
                    muteUser = null;
    
                    // 选择禁言时间和类型
                    muteTime[timeIndex].click();
                    muteType[index].click();
                    muteUser = setInterval(() => {
                      if ($H2P(`a[class^=modal-btn--]`)) {
                        window.clearInterval(muteUser);
                        muteUser = null;
    
                        console.log(`${new Date().$formatTime()}  --  【${ele.querySelector('span.name.J_userMenu').textContent}】【${muteTypes[index]}】:${ele.querySelector('span.msg').textContent.replace(/\s*/g, '')}  --  禁言【${muteTimes2[timeIndex]}】`);
                        $H2P(`a[class^=modal-btn--]`).click();
                        $H2P('style#h2p-huya-style-mute') && $H2P('style#h2p-huya-style-mute').remove();
                        $H2P('i[class^=ucard-x]').click(); // 关闭个人资料
                      }
                    }, 50);
                  }
                }, 50);
              }
            } else if ($H2P('i[class^=ucard-x]')) {
              window.clearInterval(muteUser);
              muteUser = null;
    
              console.log(`无法禁言 ${ele.querySelector('span.name.J_userMenu').textContent}`);
              $H2P('i[class^=ucard-x]').click();
            }
          }, 50);
          break;
        };
      }
    }, 500);

    }
    })($util, $H2P, $notifyMgr);

  • TA的每日心情
    无聊
    2022-8-21 01:21
  • 签到天数: 1 天

    [LV.1]初来乍到

    7

    主题

    58

    回帖

    63

    积分

    初级工程师

    积分
    63
    发表于 2022-9-20 16:56:01 | 显示全部楼层
    不会,我只会写不会更新
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-11 23:55
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    2

    回帖

    7

    积分

    助理工程师

    积分
    7
    发表于 2022-9-20 19:53:02 | 显示全部楼层
    笑尘天雨 发表于 2022-9-20 16:56
    不会,我只会写不会更新

    那也很厉害了
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-11 23:55
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    2

    回帖

    7

    积分

    助理工程师

    积分
    7
    发表于 2022-9-23 11:49:59 | 显示全部楼层
    笑尘天雨 发表于 2022-9-20 16:56
    不会,我只会写不会更新

    你要能写的话我也可以赞助一下
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2022-8-21 01:21
  • 签到天数: 1 天

    [LV.1]初来乍到

    7

    主题

    58

    回帖

    63

    积分

    初级工程师

    积分
    63
    发表于 2022-9-23 16:47:41 | 显示全部楼层
    小磊飞飞 发表于 2022-9-23 11:49
    你要能写的话我也可以赞助一下

    没时间,我需要把我写的rollup 自动提取关键字插件优化一下,还有异步获取dom元素完善一下至少得能用。事情好多。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表