Live Danmaku Controller

Auto turn off live danmaku

As of 2020-07-30. See the latest version.

// ==UserScript==
// @name                Live Danmaku Controller
// @name:en-US          Live Danmaku Controller
// @name:zh-CN          直播弹幕控制
// @description         Auto turn off live danmaku
// @description:en-US   Auto turn off live danmaku
// @description:zh-CN   自动关闭直播弹幕
// @namespace           live-danmaku-controller
// @version             2020.07.28.1
// @author              Akatsuki
// @license             MIT License
// @grant               GM_info
// @run-at              document-idle
// @match               *://live.bilibili.com/*
// @match               *://www.douyu.com/*
// @match               *://www.huya.com/*
// @match               *://www.yy.com/*
// ==/UserScript==

"use strict";

const selector = {
  "live.bilibili.com": {
    on: "i[class='live-icon-danmaku-on']",
    off: "i[class='live-icon-danmaku-off']",
  },
  "www.douyu.com": {
    on: "div[class^='showdanmu-']:not([class*='removed-'])",
    off: "div[class^='hidedanmu-']:not([class*='removed-'])",
  },
  "www.huya.com": {
    on: "div[class='danmu-show-btn'][title='关闭弹幕']",
    off: "div[class='danmu-show-btn danmu-hide-btn'][title='开启弹幕']",
  },
  "www.yy.com": {
    on: "div[class~='yc__bullet-comments-btn'][title='关闭弹幕']",
    off: "div[class~='yc__bullet-comments-btn'][title='打开弹幕']",
  },
};

const delaySite = ["www.yy.com"];

let liveSite = document.location.hostname;

// Danmaku disabler
function disableDanmaku() {
  let buttonOn = document.querySelector(selector[liveSite].on);
  if (buttonOn !== null) {
    buttonOn.click();
  }
  setTimeout(() => {
    if (document.querySelector(selector[liveSite].off) === null) {
      disableDanmaku();
    }
  }, 500);
}

// Delay danmaku disabler for some sites (Delay 10s)
// Fix the button is showing as OFF, but danmaku still appear
if (delaySite.includes(liveSite)) {
  setTimeout(disableDanmaku, 10000);
} else {
  disableDanmaku();
}