From 405dacf1c45e4b9a98ac43abd360bf8bf56418e6 Mon Sep 17 00:00:00 2001 From: dusk Date: Tue, 19 Nov 2024 01:12:33 +0300 Subject: [PATCH] feat: add now happening that shows lastfm and steam status --- bun.lockb | Bin 164840 -> 169112 bytes package.json | 4 +- src/lib/index.ts | 66 +++++++++++++++++++++++++++- src/routes/+page.server.ts | 7 +++ src/routes/+page.svelte | 86 ++++++++++++++++++++++++++++++++----- static/icons/cd_audio.png | Bin 0 -> 631 bytes 6 files changed, 149 insertions(+), 14 deletions(-) create mode 100644 src/routes/+page.server.ts create mode 100644 static/icons/cd_audio.png diff --git a/bun.lockb b/bun.lockb index a0d3d2487b036e0bec82c37803703a869ab37591..e91d688801696a103bbdaba4f031c846aaecd6c2 100755 GIT binary patch delta 32322 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 delta 29850 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 T9!^Pv=jsw=*3%c2x$6G{yUnen diff --git a/package.json b/package.json index 8bf74b5..bfb3a32 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,9 @@ "nanoid": "^5.0.8", "rehype-autolink-headings": "^7.1.0", "rehype-slug": "^6.0.0", - "typescript-svelte-plugin": "^0.3.42" + "steamgriddb": "^2.2.0", + "typescript-svelte-plugin": "^0.3.42", + "xml-js": "^1.6.11" }, "trustedDependencies": [ "@sveltejs/kit", diff --git a/src/lib/index.ts b/src/lib/index.ts index 5f3c0d1..97f23c6 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1,8 +1,10 @@ import type { Cookies } from '@sveltejs/kit' import { env } from '$env/dynamic/private' -import { writable } from 'svelte/store' +import { get, writable } from 'svelte/store' import { existsSync, readFileSync } from 'fs' import { Agent, CredentialSession } from '@atproto/api' +import { xml2json } from 'xml-js' +import SGDB from 'steamgriddb' export const scopeCookies = (cookies: Cookies, path: string) => { return { @@ -26,4 +28,64 @@ export const loginToBsky = async () => { await creds.login({ identifier: 'gaze.systems', password: env.BSKY_PASSWORD ?? "" }) return new Agent(creds) } -export const bskyClient = writable(null) \ No newline at end of file +export const bskyClient = writable(null) + +const cachedLastTrack = writable<{track: LastTrack | null, since: number}>({track: null, since: 0}) +export type LastTrack = {name: string, artist: string, image: string | null, link: string} +export const lastFmGetNowPlaying: () => Promise = async () => { + var cached = get(cachedLastTrack) + if (Date.now() - cached.since < 10 * 1000) { + return cached.track + } + try { + const API_URL = "https://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=yusdacra&api_key=da1911d405b5b37383e200b8f36ee9ec&format=json&limit=1" + var resp = await (await fetch(API_URL)).json() + var track = resp.recenttracks.track[0] ?? null + if (!(track['@attr'].nowplaying ?? null)) { + throw "no nowplaying track found" + } + var data = { + name: track.name, + artist: track.artist['#text'], + image: track.image[2]['#text'] ?? null, + link: track.url, + } + cachedLastTrack.set({track: data, since: Date.now()}) + return data + } catch(why) { + console.log("could not fetch last fm: ", why) + cachedLastTrack.set({track: null, since: Date.now()}) + return null + } +} + +const steamgriddbClient = new SGDB(env.STEAMGRIDDB_API_KEY); +const cachedLastGame = writable<{game: LastGame | null, since: number}>({game: null, since: 0}) +export type LastGame = {name: string, link: string, icon: string, pfp: string} +export const steamGetNowPlaying: () => Promise = async () => { + var cached = get(cachedLastGame) + if (Date.now() - cached.since < 10 * 1000) { + return cached.game + } + try { + const API_URL = `http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=${env.STEAM_API_KEY}&steamids=76561198106829949&format=json` + var profile = (await (await fetch(API_URL)).json()).response.players[0] + if (!profile.gameid) { + throw "no game is being played" + } + var icons = await steamgriddbClient.getIconsBySteamAppId(profile.gameid, ['official']) + console.log(icons) + var game = { + name: profile.gameextrainfo, + link: `https://store.steampowered.com/app/${profile.gameid}`, + icon: icons[0].thumb.toString(), + pfp: profile.avatarmedium, + } + cachedLastGame.set({game, since: Date.now()}) + return game + } catch(why) { + console.log("could not fetch steam: ", why) + cachedLastGame.set({game: null, since: Date.now()}) + return null + } +} \ No newline at end of file diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts new file mode 100644 index 0000000..8b7af32 --- /dev/null +++ b/src/routes/+page.server.ts @@ -0,0 +1,7 @@ +import { lastFmGetNowPlaying, steamGetNowPlaying } from "$lib" + +export const load = async ({}) => { + const lastTrack = await lastFmGetNowPlaying() + const lastGame = await steamGetNowPlaying() + return {lastTrack, lastGame} +} \ No newline at end of file diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 7b40393..e64062a 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,6 +1,8 @@
@@ -61,10 +63,8 @@

- new game prototype thingy at itch.io page! - spent a lot of time learning and designing the environment and scene stuff :3 + new game prototype thingy at itch.io page! spent a lot of time learning and designing the environment and scene stuff :3 trenchbroom and func_godot were used mainly!

- -
-
    -
  • playing wynncraft, helldivers 2, warframe
  • -
  • idk bother me to do stuff
  • -
-
+ + {#if data.lastTrack} +
+ + {#if data.lastTrack.image} + + {:else} + + {/if} +
+

+ listening to + {data.lastTrack.name} +

+

+ by + {data.lastTrack.artist} +

+
+
+ {/if} + {#if data.lastGame} +
+ + +
+

+ playing + {data.lastGame.name} +

+ + + steam profile +
+
+ {/if} + {#if !data.lastGame && !data.lastTrack} +

nothing, apparently.

+ {/if}
diff --git a/static/icons/cd_audio.png b/static/icons/cd_audio.png new file mode 100644 index 0000000000000000000000000000000000000000..f7cce7b93600ab58db39a55eb0285e0b76143d48 GIT binary patch literal 631 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10!al$!#1%*z8ynxfdw0{O zO$QDfICJLA|1&dzu&u2vK0f~X_3Qu7oSFIm%z_0=%FD~^>+6BM19uJ>pP4yr+O+@w z|5v4kEC(9FSQ6wH%;50sMjD8dWj_z7+n<#3>6Xn6uX1;Kxqm{jf zazl==RetX?sjY(N>o^kbW%6*{@(@#SGQ3kYpDjcA*oH#=TdN*wo@fd5+nJYj>DeB2 zMJIk{?I7gq`8u;+lBwr@(=x#JB`aP3N{0rgNtQ&NwAHzT>&1snD{v zk3ryIudPB$DvN`Zn_ZFVEysk%XKw!Z%BOZ`N6kGs1-47QvmYIDe`DWy?cX#0Q#^cu zQx5UV0E1Dr#5JNMC9x#cD!C{XNHG{07+UBWnCKc>h8P%H8Jk!cnE<&~1_qZLe`cX* c$jwj5OsmALVX=(kHJ}CtPgg&ebxsLQ05MhfDgXcg literal 0 HcmV?d00001