import { createRef } from "tsx-dom"; import colors from "../../utilities/colors.module.css"; import socket from "../../utilities/socket"; import "mdui/components/tooltip.js"; import style from "./index.module.css"; // entirely gpt generated :sob: const activityTypes: Record = { 0: "Playing", 1: "Streaming", 2: "Listening to", 3: "Watching", 4: "Custom Status", 5: "Competing in", }; const getImageUrl = (activity: LanyardActivity, size: "large" | "small") => { if (!activity.assets) return null; const image = activity.assets[`${size}_image`]; if (!image) return null; if (image.startsWith("mp:external")) { return `https://wsrv.nl/?w=${size === "large" ? 120 : 40}&url=https://${image.split("/").slice(3).join("/")}`; } if (image.startsWith("mp:")) { return `https://cdn.discordapp.com/app-assets/${activity.application_id}/${image.slice(3)}.webp`; } }; export default () => { const container = createRef(); socket.addEventListener("lanyard", (event: Event) => { const lanyard = (event as CustomEvent).detail; const streamingActivity = lanyard.activities.find((act) => act.type === 1); if (streamingActivity) { document.documentElement.className = colors.streaming || ""; } else { document.documentElement.className = colors[lanyard.discord_status] || ""; } if (lanyard.activities.length === 0) { document.body.style.setProperty("--lanyard-display", "none"); } else { document.body.style.removeProperty("--lanyard-display"); } if (container.current) { container.current.innerHTML = ""; for (const activity of lanyard.activities) { if (activity.type === 4) { continue; } const largeImage = getImageUrl(activity, "large"); const smallImage = getImageUrl(activity, "small"); container.current.innerHTML += (
{/* @ts-expect-error; variant is not in the types for some reason? */} {" "}
{activityTypes[activity.type]}
{largeImage && (
Large Activity {smallImage && (
Small Activity
)}
)}
{activity.name}
{activity.state}
{activity.details}

).outerHTML; } } }); return
; };