弹幕放大器

更改虎牙弹幕和屏蔽弹幕

当前为 2021-02-21 提交的版本,查看 最新版本

// ==UserScript==
// @name         弹幕放大器
// @namespace    http://tampermonkey.net/
// @version      0.4
// @description  更改虎牙弹幕和屏蔽弹幕
// @author       You
// @include      https://www.huya.com/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_addStyle
// @require      https://code.jquery.com/jquery-3.5.1.min.js
// ==/UserScript==

(function () {
  "use strict";
  //danmu blocker
  GM_addStyle(`
   .nav_btn {
        position: absolute;
        top: 0;
        right: 8rem;
    }
    .nav-expand-list ul > li:hover {
        background-color: grey;
    }
    .nav-expand-list ul > li > a {
        display: inline-block;
        width: 100%;
        text-decoration: none;
        line-height: 3rem;
        color: black;
    }
    #mask {
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, .3);
        display: none;
        z-index: 2147483647;
        color: #010101;
    }

   #mask a:hover {
        text-decoration: underline;
    }

    #dialog {
        position: absolute;
        width: 35rem;
        min-height: 15rem;
        background-color: #ffffff;
        border-radius: 10px;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        padding: 5rem;
        box-sizing: border-box;
        user-select: none;
        display:flex;
        flex-direction: column;
        justify-content: center;
    }

    .words {
        display: inline-block;
        padding: .2rem;
        border: 2px solid #999;
        margin: 0 0 1rem 1rem;
        border-radius: 3px;
    }

    .words > svg {
        width: 1rem;
        height: 1rem;
        margin-left: 1.5rem;
    }

    .ex_input {
        outline: none;
        margin: 5% 0;
        height: 1.7rem;
        width: 70%;
        font-size: 1.3rem;

        border: none;
        border-radius: 4px;
        border-bottom: 1px solid grey;
        
    }

    .ex_button {
        margin: auto; /*will be center*/
        background: none;
        color: #b06530;
        border: 2px solid;
        border-radius:4px;
        height: 1.7rem;
        width: 25%;
        font-size: 1em;
    }
    .remove {
        cursor: pointer;
    }

    #exist {
        margin: 2rem 0;
    }

    #exist > div {
        margin: 1rem 0 0 5%;
        width: 80%;
        border: 1px solid #666;
        border-radius: 3px;
        padding: 1rem;
    }
    `);

  let keywords = GM_getValue("keywords") || [];
  let danmuSize = GM_getValue("danmuSize") || 50;

  let observer = new MutationObserver(() => {
    $("#danmudiv > .danmu-item").css("font-size", `${danmuSize}px`);
    $("#danmudiv > .danmu-item").css("line-height", `${danmuSize + 15}px`);
    let danmus = document.querySelectorAll(".danmu-item");
    for (let item of danmus) {
      for (let word of keywords) {
        if (item.querySelector("span").innerHTML.indexOf(word) !== -1) {
          item.remove();
          break;
        }
      }
    }
  });

  setTimeout(() => {
    createElement();

    let $edit = $("#edit");
    let danmudiv = document.querySelector("#danmudiv");
    let $mask = $("#mask");
    let $exist = $("#exist > div");

    for (let index = 0; index < keywords.length; index++) {
      insertToExist(keywords[index], index, $exist);
    }

    $edit.click(() => {
      $mask.css("display", "block");
    });

    // $("#close").click(() => {
    //   $("#mask").css("display", "none");
    // });

    //点击dialog以外的地方关闭窗口
    $(document).mouseup(function (e) {
      var _con = $("#dialog"); // 设置目标区域
      if (!_con.is(e.target) && _con.has(e.target).length === 0) {
        $("#mask").css("display", "none");
      }
    });

    $("#clear").click(() => {
      if (confirm("确定要移除所有的屏蔽词吗?")) {
        $exist.empty();
        keywords.length = 0;
        GM_setValue("keywords", keywords);
      }
    });

    $exist.on("click", ".words", function () {
      $(this).remove();
      keywords.splice(parseInt($(this).attr("data-index")), 1);
      GM_setValue("keywords", keywords);
    });

    $("#save > button").click(() => {
      let val = $("#save > input").val();

      if (val.trim() === "") {
        return alert("请输入有效的屏蔽词");
      } else if (keywords.some((item) => item === val)) {
        return alert("已存在,请勿重复添加");
      }

      insertToExist(val, keywords.length, $exist);
      keywords.push(val);
      $("#save > input").val("");
      GM_setValue("keywords", keywords);
    });
    $("#danmuSize > button").click(() => {
      danmuSize = parseInt($("#danmuSize > input").val());
      GM_setValue("danmuSize", danmuSize);
    });

    observer.observe(danmudiv, { childList: true });
  }, 3000);

  function createElement() {
    $(".duya-header-wrap").append(`
    <div class="hy-nav-right nav_btn">
        <a class="hy-nav-title" href="javascript:;">
            <span class="title" id="keywords">屏蔽词</span>
        </a>
        <div class="nav-expand-list">
            <i class="arrow"style="margin-left: -1.5rem;"></i>
            <div style="padding: 0.5rem 0 0 1rem;">
                <ul>
                    <li><a href="javascript:;" id="edit">编辑屏蔽词</a></li>
                </ul>
            </div>
    </div>`);

    $("body").append(`
    <div id="mask">
        <div id="dialog">
            <div id="save">
                <input class="ex_input" type="text" placeholder="请输入屏蔽关键词">
                <button class="ex_button">添加</button>
            </div>
            <div id="danmuSize">
                <input class="ex_input" type="number" value="${danmuSize}">
                <button class="ex_button">更改文字大小</button>
            </div>
            <div id="exist">
                <span style="font-size: 14px;">已添加的屏蔽词</span>
                <a href="javascript:;" style="color: deepskyblue;font-size: 14px;float: right; border: 2px solid; border-radius:4px;text-align: right" id="clear">清除所有</a>

                <div>
                </div>
            </div>
        </div>
    </div>
`);
  }

  function insertToExist(val, index, $parent) {
    let $item = `<span class="words" data-index="${index}">${val}</span>`;
    $parent.append($item);
  }
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址