自動ミュート
// ==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;
})();
`);