cytube_auto_mute

自動ミュート

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         cytube_auto_mute
// @namespace    https://cytube.xyz/
// @version      0.1
// @description  自動ミュート
// @author       utubo
// @match        *://cytube.xyz/*
// @grant        none
// ==/UserScript==

(window.unsafeWindow || window).eval(`
(function() {
  // 設定 ------------------------------------
  // ミュートにするユーザー名
  var MUTE_USER = ['xxxxx', 'yyyyy'];
  // ※もしかしたらスクリプトの自動更新をONにしてると更新したときに設定が消えちゃうかも
  // -----------------------------------------

  // 本体 ------------------------------------
  // jsが再読込されると多分2重で動いちゃうので既にobseverが存在してたら破棄する
  var win = window.unsafeWindow || window;
  var obsever = win.GM_AUTO_MUTE_OBSERVER;
  if (obsever) {
    obsever.disconnect();
  }
  // currentTitleが変更されたらユーザー名を判定する
  var isAutoMuted = false;
  var lastVolume = 0.0;
  var getVolume = () => new Promise((resolve, reject) => { PLAYER.getVolume(resolve); });
  var setVolume = v => setTimeout(() => { PLAYER.setVolume(v);}, 500);
  var autoMute = async () => {
    var current = document.getElementsByClassName('queue_active')[0];
    if (!current) return;
    var user = current.getAttribute('title').replace('Added by: ', '');
    if (MUTE_USER.includes(user)) {
      isAutoMuted = true;
      lastVolume = await getVolume() || lastVolume;
      setVolume(0);
    } else if (isAutoMuted) {
      isAutoMuted = false;
      if (lastVolume) setVolume(lastVolume);
    }
  };
  obsever = new MutationObserver(autoMute);
  obsever.observe(document.getElementById('currenttitle'), { childList: true });
  win.GM_AUTO_MUTE_OBSERVER = obsever;
})();
`);