// ==UserScript== // @name 斗鱼直播自动切换画质 // @namespace https://github.com/Eished // @author Eished // @version 2022.07.30 // @description 斗鱼直播自动切换分辨率,全局设置最高画质或最低画质,单独设置每个直播间:原画、4K、2K、1080p、蓝光、720p、超清、高清清晰度。 // @license AGPL-3.0 // @match *://www.douyu.com/* // @icon https://www.google.com/s2/favicons?domain=douyu.com // @grant GM_setValue // @grant GM_getValue // @grant GM_registerMenuCommand // @downloadURL none // ==/UserScript== (function () { 'use strict' const videoSub = document.querySelector('.layout-Player-videoSub') if (videoSub == undefined) { return } console.log(rid, 'douyu rid') const Clarities = ['全局默认最高画质', '全局默认最低画质'] let selectedClarity = GM_getValue(rid) const defaultClarity = GM_getValue('defaultClarity') if (!selectedClarity) { if (defaultClarity === 0) { selectedClarity = Clarities[1] } else { selectedClarity = Clarities[0] } } const scanClarity = list => { let notFoundCount = 0 list.forEach(li => { const availableClarity = li.innerText if (availableClarity) { GM_registerMenuCommand(availableClarity, () => { GM_setValue(rid, availableClarity) li.click() }) if (selectedClarity === availableClarity) { li.click() } else { notFoundCount++ } } }) if (selectedClarity === Clarities[0]) { list[0].click() } else if (selectedClarity === Clarities[1]) { list[list.length - 1].click() } else if (notFoundCount === list.length) { if (defaultClarity === 0) { list[list.length - 1].click() } else { list[0].click() } } Clarities.forEach((clarity, index) => { GM_registerMenuCommand(clarity, () => { if (index === 0) { list[index].click() GM_setValue('defaultClarity', 1) } else { list[list.length - 1].click() GM_setValue('defaultClarity', 0) } }) }) } const observer = new MutationObserver(callback) observer.observe(videoSub, { childList: true, subtree: true, }) function callback() { const controller = videoSub.querySelector(`[value="画质 "]`) if (controller) { observer.disconnect() const ul = controller.nextElementSibling const list = ul.querySelectorAll('li') scanClarity(list) } } })()