123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333 |
- const presence = new Presence({
- clientId: "1023277091392868372",
- }),
- browsingTimestamp = Math.floor(Date.now() / 1000);
- presence.on("UpdateData", async () => {
- const presenceData: PresenceData = {
- largeImageKey:
- "https://cdn.rcd.gg/PreMiD/websites/M/mod.io/assets/logo.png",
- startTimestamp: browsingTimestamp,
- },
- { pathname, href, hostname, search } = window.location,
- pathSplit = pathname.split("/").filter(x => x);
- switch (hostname) {
- case "mod.io": {
- switch (pathSplit[0] ?? "") {
- case "": {
- presenceData.details = "Browsing homepage";
- break;
- }
- case "g": {
- if (pathSplit[1] === "add") {
- presenceData.details = "Adding a game";
- presenceData.state =
- document.querySelector<HTMLHeadingElement>("h1").textContent;
- } else if ((pathSplit[1] ?? "") === "") {
- presenceData.details = "Browsing games";
- break;
- } else {
- const gameImageURL = getComputedStyle(
- document.querySelector<HTMLDivElement>("#container [role=img]")
- ).backgroundImage.match(/url\("(.+)"\)/)?.[1],
- gameName = document.querySelector<HTMLAnchorElement>(
- "#container li > a[href*='/g/']"
- ).textContent;
- switch (pathSplit[2] ?? "") {
- case "": {
- presenceData.details = `Browsing mods for ${gameName}`;
- presenceData.largeImageKey = gameImageURL;
- presenceData.buttons = [
- {
- label: "View game mods",
- url: href,
- },
- ];
- break;
- }
- case "m": {
- if (pathSplit[4] === "admin") {
- presenceData.details = "Managing a mod";
- presenceData.state =
- document.querySelector<HTMLHeadingElement>(
- "h1"
- ).textContent;
- } else {
- presenceData.details = `Viewing a mod for ${gameName}`;
- presenceData.state =
- document.querySelector<HTMLHeadingElement>(
- "h1"
- ).textContent;
- presenceData.smallImageKey = gameImageURL;
- presenceData.smallImageText = gameName;
- presenceData.largeImageKey = getComputedStyle(
- document.querySelector<HTMLDivElement>(
- "a[href*='/m/'] > div[role=img]"
- )
- ).backgroundImage.match(/url\("(.+)"\)/)[1];
- presenceData.buttons = [
- {
- label: "View mod",
- url: href,
- },
- ];
- }
- break;
- }
- case "r": {
- if (pathSplit[3]) {
- presenceData.details = `Reading a guide for ${gameName}`;
- presenceData.state =
- document.querySelector<HTMLHeadingElement>(
- "h1"
- ).textContent;
- presenceData.smallImageKey = gameImageURL;
- presenceData.smallImageText = gameName;
- presenceData.largeImageKey = getComputedStyle(
- document.querySelector<HTMLDivElement>(
- "a[href*='/r/'] > div[role=img]"
- )
- ).backgroundImage.match(/url\("(.+)"\)/)[1];
- presenceData.buttons = [
- {
- label: "View guide",
- url: href,
- },
- ];
- } else {
- presenceData.details = `Browsing guides for ${gameName}`;
- presenceData.largeImageKey = gameImageURL;
- }
- break;
- }
- case "u": {
- presenceData.details = "Viewing a user's profile";
- presenceData.state =
- document.querySelector<HTMLHeadingElement>("h1").textContent;
- presenceData.smallImageKey =
- document.querySelector<HTMLImageElement>(
- "#container img[src*='/members/']"
- )?.src;
- break;
- }
- }
- }
- break;
- }
- case "me": {
- switch (pathSplit[1]) {
- case "account": {
- presenceData.details = "Managing account settings";
- break;
- }
- case "library": {
- presenceData.details = "Browsing their library";
- break;
- }
- case "comments": {
- presenceData.details = "Browsing their comments";
- break;
- }
- case "followers": {
- presenceData.details = "Browsing their followers";
- break;
- }
- case "access": {
- presenceData.details = "Managing their API keys";
- break;
- }
- case "privacy": {
- presenceData.details = "Managing their privacy settings";
- break;
- }
- }
- break;
- }
- case "u": {
- presenceData.details = "Viewing a user's profile";
- presenceData.state =
- document.querySelector<HTMLHeadingElement>("h1").textContent;
- presenceData.smallImageKey = document.querySelector<HTMLImageElement>(
- "#container img[src*='/members/']"
- )?.src;
- break;
- }
- default: {
- presenceData.details = "Browsing";
- presenceData.state =
- document.querySelector<HTMLHeadingElement>("h1").textContent ??
- document.title.match(/(.*) - mod\.io/)[1];
- }
- }
- break;
- }
- case "blog.mod.io": {
- switch (pathSplit[0] ?? "") {
- case "": {
- presenceData.details = "Browsing the blog";
- presenceData.state = "Home page";
- break;
- }
- case "search": {
- presenceData.details = "Searching the blog";
- presenceData.state = new URLSearchParams(search).get("q");
- break;
- }
- case "tagged": {
- presenceData.details = "Browsing articles by tag";
- presenceData.state = pathSplit[1];
- break;
- }
- default: {
- presenceData.details = "Reading an article";
- presenceData.state =
- document.querySelector<HTMLHeadingElement>("h1").textContent;
- presenceData.buttons = [
- {
- label: "Read article",
- url: href,
- },
- ];
- }
- }
- break;
- }
- case "docs.mod.io": {
- presenceData.details = "Browsing documentation";
- presenceData.state =
- document.querySelector<HTMLAnchorElement>(
- ".active.toc-link"
- ).textContent;
- break;
- }
- case "old.mod.io": {
- switch (pathSplit[0] ?? "") {
- case "": {
- presenceData.details = "Browsing";
- presenceData.state = "Home page";
- break;
- }
- case "games": {
- if (pathSplit[1] === "add") {
- presenceData.details = "Adding a game";
- presenceData.state =
- document.querySelector<HTMLInputElement>("#gamesname").value;
- } else presenceData.details = "Browsing games";
- break;
- }
- case "guides": {
- presenceData.details = "Browsing guides";
- break;
- }
- case "members": {
- presenceData.details = "Viewing a user's profile";
- presenceData.state =
- document.querySelector<HTMLHeadingElement>("h2.title").textContent;
- const profileImage = document.querySelector<HTMLImageElement>(
- ".container img[src*='/members/']"
- );
- if (profileImage) presenceData.smallImageKey = profileImage.src;
- break;
- }
- case "messages": {
- presenceData.details = "Viewing their direct messages";
- break;
- }
- default: {
- presenceData.details = "Browsing";
- presenceData.state = document.title.match(/(.*) - mod\.io/)[1];
- }
- }
- break;
- }
- // Old subdomains
- default: {
- const gameName = document.querySelector<HTMLAnchorElement>(
- ".navbar-start .navbar-item[href*='.old.mod.io']"
- ).textContent,
- gameImage =
- document.querySelector<HTMLImageElement>("[src*='/games/']").src;
- switch (pathSplit[0] ?? "") {
- case "":
- case "page": {
- presenceData.details = `Browsing mods for ${gameName}`;
- presenceData.largeImageKey = gameImage;
- break;
- }
- case "guides": {
- presenceData.largeImageKey = gameImage;
- switch (pathSplit[1] ?? "") {
- case "": {
- presenceData.details = `Browsing guides for ${gameName}`;
- break;
- }
- case "add": {
- presenceData.details = `Creating a guide for ${gameName}`;
- presenceData.state =
- document.querySelector<HTMLInputElement>("#articlesname").value;
- break;
- }
- default: {
- presenceData.details = `Viewing a guide for ${gameName}`;
- presenceData.state =
- document.querySelector<HTMLHeadingElement>("h1").textContent;
- presenceData.buttons = [
- {
- label: "Read guide",
- url: href,
- },
- ];
- break;
- }
- }
- break;
- }
- default: {
- presenceData.state = document.querySelector<HTMLAnchorElement>(
- ".navbar-start > .navbar-item:nth-of-type(4)"
- ).textContent;
- presenceData.largeImageKey = gameImage;
- switch (pathSplit[1] ?? "") {
- case "": {
- presenceData.details = `Viewing a mod for ${gameName}`;
- presenceData.smallImageKey = gameImage;
- presenceData.smallImageText = gameName;
- presenceData.largeImageKey =
- document.querySelector<HTMLImageElement>("[src*='/mods/']").src;
- presenceData.buttons = [
- {
- label: "View mod",
- url: href,
- },
- ];
- break;
- }
- case "edit": {
- presenceData.details = `Editing a mod for ${gameName}`;
- presenceData.state =
- document.querySelector<HTMLInputElement>("#modsname").value;
- break;
- }
- case "history": {
- presenceData.details = `Viewing the history of a mod for ${gameName}`;
- break;
- }
- case "contact": {
- presenceData.details = "Contacting a mod developer";
- break;
- }
- case "stats": {
- presenceData.details = `Viewing the stats of a mod for ${gameName}`;
- break;
- }
- }
- }
- }
- }
- }
- if (presenceData.details) presence.setActivity(presenceData);
- else presence.setActivity();
- });
|