diff --git a/websites/A/AccSaber/metadata.json b/websites/A/AccSaber/metadata.json new file mode 100644 index 000000000000..f6ac8e47ec4b --- /dev/null +++ b/websites/A/AccSaber/metadata.json @@ -0,0 +1,36 @@ +{ + "$schema": "https://schemas.premid.app/metadata/1.10", + "author": { + "id": "205984221859151873", + "name": "joerkig" + }, + "service": "AccSaber", + "description": { + "en": "Beat Saber players, ranked by all of their scores on AccSaber maps" + }, + "url": [ + "accsaber.com", + "wiki.accsaber.com" + ], + "version": "1.0.0", + "logo": "https://i.imgur.com/VkOt2JM.png", + "thumbnail": "https://i.imgur.com/h1YJIwm.png", + "color": "#2563eb", + "category": "games", + "tags": [ + "beatsaber", + "leaderboard", + "accuracy", + "vr", + "virtualreality", + "ranking" + ], + "settings": [ + { + "id": "buttons", + "title": "Show Buttons", + "icon": "fas fa-compress-arrows-alt", + "value": true + } + ] +} \ No newline at end of file diff --git a/websites/A/AccSaber/presence.ts b/websites/A/AccSaber/presence.ts new file mode 100644 index 000000000000..52a761dabc44 --- /dev/null +++ b/websites/A/AccSaber/presence.ts @@ -0,0 +1,84 @@ +const presence = new Presence({ + clientId: "1274632115102941204", + }), + browsingTimestamp = Math.floor(Date.now() / 1000), + difficultyImages: Record = { + Easy: "https://i.imgur.com/Bt0cKYs.png", + Normal: "https://i.imgur.com/fmxpgSU.png", + Hard: "https://i.imgur.com/IN1GT84.png", + Expert: "https://i.imgur.com/aibm4vl.png", + "Expert+": "https://i.imgur.com/LEHgcPp.png", + }; + +const enum Assets { + Logo = "https://i.imgur.com/VkOt2JM.png", +} + +presence.on("UpdateData", async () => { + const presenceData: PresenceData = { + largeImageKey: Assets.Logo, + startTimestamp: browsingTimestamp, + }, + { href, pathname, hostname } = document.location, + buttons = await presence.getSetting("buttons"); + + if (hostname.split(".")[0] === "accsaber") { + switch (pathname.split("/")[1]) { + case "leaderboards": { + presenceData.details = "Viewing leaderboard"; + presenceData.state = document.querySelector(".pageNav.active"); + break; + } + case "profile": { + const profilePicture = document.querySelector( + `img[src^='https://media.accsaber.com/avatars/${ + pathname.split("/")[2] + }']` + ); + presenceData.details = `Viewing ${document.title.split(" | ")[0]}`; + if (pathname.split("/")[3] !== "ap-graph") { + presenceData.state = `${document + .querySelector(".pageNav.active") + .textContent.trim() + .slice(0, 1) + .toUpperCase()}${document + .querySelector(".pageNav.active") + .textContent.trim() + .slice(1)}`; + } + presenceData.largeImageKey = profilePicture; + presenceData.buttons = [{ url: href, label: "View Profile" }]; + break; + } + case "maps": { + if (!pathname.split("/")[2]) + presenceData.details = "Browsing ranked maps"; + else { + presenceData.details = document.querySelector("h1"); + presenceData.state = document.querySelector("h2"); + presenceData.largeImageKey = document.querySelector( + "img[src^='https://media.accsaber.com/covers/']" + ).src; + presenceData.smallImageKey = + difficultyImages[ + document.querySelector("h1 > div").title + ]; + presenceData.smallImageText = + document.querySelector("h1 > div").title; + presenceData.buttons = [{ url: href, label: "View Leaderboard" }]; + } + break; + } + } + } else if (hostname.split(".")[0] === "wiki") { + presenceData.details = "Viewing ACC wiki"; + presenceData.state = document.querySelectorAll(".md-nav__link--active")[ + document.querySelectorAll(".md-nav__link--active").length - 1 + ]; + } + + if (!buttons && presenceData.buttons) delete presenceData.buttons; + + if (presenceData.details && presenceData.largeImageKey) + presence.setActivity(presenceData); +});