Greasy Fork is available in English.

Bilibili - 自动切换直播画质至最高画质

自动切换Bilibili直播画质至最高画质 | V0.8 移除多余的async

// ==UserScript==
// @name         Bilibili - 自动切换直播画质至最高画质
// @namespace    https://bilibili.com/
// @version      0.8
// @description  自动切换Bilibili直播画质至最高画质 | V0.8 移除多余的async
// @license      GPL-3.0
// @author       DD1969
// @match        https://live.bilibili.com/*
// @icon         https://www.bilibili.com/favicon.ico
// @grant        unsafeWindow
// @noframes
// ==/UserScript==

(async function() {
  'use strict';

  // jump to actual room if live streaming is nested
  setInterval(() => {
    const nestedPage = document.querySelector('iframe[src*=blanc]');
    if (nestedPage) unsafeWindow.location.href = nestedPage.src;
  }, 1000);

  // hide the loading gif
  const styleElement = document.createElement('style');
  styleElement.textContent = `.web-player-loading { opacity: 0; }`;
  document.head.appendChild(styleElement);

  // make sure the player is ready
  await new Promise(resolve => {
    const timer = setInterval(() => {
      if (
        unsafeWindow.livePlayer
        && unsafeWindow.livePlayer.getPlayerInfo
        && unsafeWindow.livePlayer.getPlayerInfo().playurl
        && unsafeWindow.livePlayer.switchQuality
      ) {
        clearInterval(timer);
        resolve();
      }
    }, 1000);
  });

  // get initial pathname of video source and number of highest quality
  const initialPathname = new URL(unsafeWindow.livePlayer.getPlayerInfo().playurl).pathname;
  const highestQualityNumber = unsafeWindow.livePlayer.getPlayerInfo().qualityCandidates[0].qn;

  // switch quality
  setInterval(() => {
    const currentPathname = new URL(unsafeWindow.livePlayer.getPlayerInfo().playurl).pathname;
    const currentQualityNumber = unsafeWindow.livePlayer.getPlayerInfo().quality;
    if (currentPathname === initialPathname || currentQualityNumber !== highestQualityNumber) {
      unsafeWindow.livePlayer.switchQuality(highestQualityNumber);
    }
  }, 1000);

})();