From 69f8f741821da949277ad181698fa860050ab701 Mon Sep 17 00:00:00 2001 From: wont-stream <143244075+wont-stream@users.noreply.github.com> Date: Tue, 8 Apr 2025 06:42:30 -0400 Subject: [PATCH] Refactor WebSocket integration and move JavaScript from index.ts to index.js --- src/index.html | 110 ++++++++++++++++++++++++++++++++++++- src/{index.ts => index.js} | 18 +++--- 2 files changed, 116 insertions(+), 12 deletions(-) rename src/{index.ts => index.js} (85%) diff --git a/src/index.html b/src/index.html index dd3c570..5159c7d 100644 --- a/src/index.html +++ b/src/index.html @@ -27,7 +27,8 @@ <div class="container bg-body-tertiary shadow pt-4 pb-4 rounded"> <div class="row"> <div class="col-12 text-center"> - <img src="./favicon.svg" alt="pfp" width="100rem" height="100rem" id="pfp" class="border border-4 rounded-circle border-light-subtle"> + <img src="./favicon.svg" alt="pfp" width="100rem" height="100rem" id="pfp" + class="border border-4 rounded-circle border-light-subtle"> <h1>Seth</h1> <p class="lead">A backend developer.</p> </div> @@ -57,7 +58,112 @@ </div> </div> </div> - <script src="index.ts"></script> + <script> + const pfp = document.getElementById("pfp"); + const music = document.getElementById("music"); + const heartrate = document.getElementById("heartrate"); + + const lanyard = new WebSocket("wss://lanyard.creations.works/socket"); + + lanyard.onopen = () => { + lanyard.send(JSON.stringify({ + op: 2, + d: { + subscribe_to_id: "1273447359417942128" + } + })) + } + + lanyard.onmessage = ({ data }) => { + const { op, d } = JSON.parse(data) + + switch (op) { + case 0: { + pfp.className = `border border-4 rounded-circle ${{ + "online": "border-success-subtle", + "idle": "border-warning-subtle", + "dnd": "border-danger-subtle", + "offline": "border-light-subtle" + }[d.discord_status]}` + + const tidalData = d.activities.filter((act) => { + return act?.application_id === "1130698654987067493"; + })[0]; + + if (tidalData) { + const [color, trackId] = tidalData?.assets?.small_text.split("|"); + music.style.color = color; + music.href = `https://tidal.com/browse/track/${trackId}/u` + music.innerHTML = `Listening to<br>${tidalData?.name.replace( + /\s?[\(\[].*?[\)\]]/g, + "", + )} by ${tidalData?.state}` + } + break + } + case 1: { + setInterval(async () => { + lanyard.send(JSON.stringify({ + op: 3, + })) + }, d.heartbeat_interval) + } + } + } + + const hyperate = new WebSocket("wss://app.hyperate.io/socket/websocket?token=wv39nM6iyrNJulvpmMQrimYPIXy2dVrYRjkuHpbRapKT2VSh65ngDGHdCdCtmEN9",); + + let hrTimeout; + + const setHrInterval = async () => { + hrTimeout = setTimeout(async () => { + heartrate.innerHTML = ""; + }, 6000); + }; + + hyperate.onopen = async () => { + hyperate.send( + JSON.stringify({ + topic: "hr:0BCA", + event: "phx_join", + payload: {}, + ref: 0, + }), + ); + + setInterval(async () => { + hyperate.send( + JSON.stringify({ + topic: "phoenix", + event: "heartbeat", + payload: {}, + ref: 0, + }), + ); + }, 10000); + + return await setHrInterval(); + }; + + hyperate.onmessage = async ({ data }) => { + const { event, payload } = JSON.parse(data); + switch (event) { + case "hr_update": { + clearTimeout(hrTimeout); + await setHrInterval(); + + document.documentElement.style.setProperty("--bpm", payload.hr); + + heartrate.innerHTML = `<div class="heart">♥️<br /><span>${payload.hr} BPM</span></div>`; + + break; + } + default: { + break; + } + } + }; + </script> </body> </html> \ No newline at end of file diff --git a/src/index.ts b/src/index.js similarity index 85% rename from src/index.ts rename to src/index.js index 9f065e3..e26d73d 100644 --- a/src/index.ts +++ b/src/index.js @@ -2,13 +2,6 @@ const pfp = document.getElementById("pfp"); const music = document.getElementById("music"); const heartrate = document.getElementById("heartrate"); -const presenceMap = { - "online": "border-success-subtle", - "idle": "border-warning-subtle", - "dnd": "border-danger-subtle", - "offline": "border-light-subtle" -} - const lanyard = new WebSocket("wss://lanyard.creations.works/socket"); lanyard.onopen = () => { @@ -25,9 +18,14 @@ lanyard.onmessage = ({ data }) => { switch (op) { case 0: { - pfp.className = `border border-4 rounded-circle ${presenceMap[d.discord_status]}` + pfp.className = `border border-4 rounded-circle ${{ + "online": "border-success-subtle", + "idle": "border-warning-subtle", + "dnd": "border-danger-subtle", + "offline": "border-light-subtle" + }[d.discord_status]}` - const tidalData = d.activities.filter((act: Activities) => { + const tidalData = d.activities.filter((act) => { return act?.application_id === "1130698654987067493"; })[0]; @@ -57,7 +55,7 @@ const hyperate = new WebSocket( "wss://app.hyperate.io/socket/websocket?token=wv39nM6iyrNJulvpmMQrimYPIXy2dVrYRjkuHpbRapKT2VSh65ngDGHdCdCtmEN9", ); -let hrTimeout: ReturnType<typeof setTimeout>; +let hrTimeout; const setHrInterval = async () => { hrTimeout = setTimeout(async () => {