Greasy Fork is available in English.

ScoreSaber BeatSaver Link

Adds a link to BeatSaver map on ScoreSaber and Hitbloq leaderboard pages

// ==UserScript==
// @name        ScoreSaber BeatSaver Link
// @namespace   forked_bytes
// @match       https://scoresaber.com/*
// @match       https://hitbloq.com/leaderboard/*
// @grant       none
// @version     1.1.1
// @author      forked_bytes
// @license     0BSD
// @description Adds a link to BeatSaver map on ScoreSaber and Hitbloq leaderboard pages
// ==/UserScript==

const beatsaverLink = document.createElement("a");
const beatmaps = {};

setInterval(async function() {
  if (beatsaverLink.isConnected || !location.pathname.startsWith("/leaderboard/")) return;
  const prefix = "web+bsmap://";
  const download = document.querySelector(`a[href^="${prefix}"]`);
  const hash = download?.href.substring(prefix.length);
  if (!hash) return;

  if (!beatmaps[hash]) {
    beatmaps[hash] = fetch("https://api.beatsaver.com/maps/hash/" + hash).then(r => r.json());
  }

  const beatmap = await beatmaps[hash];
  if (beatmap?.id) {
    beatsaverLink.href = "https://beatsaver.com/maps/" + beatmap.id;
    beatsaverLink.innerHTML = `<img alt="!bsr" src="https://beatsaver.com/static/favicon/favicon-16x16.png"> ${beatmap.id}`;
    download.parentNode?.parentNode?.appendChild(beatsaverLink);
  }
}, 500);