diff --git a/src/renderCard.tsx b/src/renderCard.tsx index 51bf89c..913a070 100644 --- a/src/renderCard.tsx +++ b/src/renderCard.tsx @@ -13,9 +13,24 @@ type Parameters = { animated?: string; hideDiscrim?: string; hideStatus?: string; + hideTimestamp?: string; borderRadius?: string; }; +const elapsedTime = (timestamp: any) => { + let startTime = timestamp; + let endTime = Date.now(); + let totalSeconds = (endTime - startTime) / 1000; + + let hours = Math.floor(totalSeconds / 3600); + let minutes = Math.floor((totalSeconds % 3600) / 60); + let seconds = Math.floor((totalSeconds % 3600) % 60); + + return `${hours >= 1 ? ("0" + hours).slice(-2) + ":" : ""}${("0" + minutes).slice(-2)}:${("0" + seconds).slice( + -2 + )}`; +}; + const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise => { let avatarBorderColor: string = "#747F8D", userStatus: string = "", @@ -26,17 +41,14 @@ const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise< theme = "dark", discrim = "show", hideStatus = "false", + hideTimestamp = "false", borderRadius = "10px"; if (body.data.activities[0]?.emoji?.animated) statusExtension = "gif"; if (body.data.discord_user.avatar && body.data.discord_user.avatar.startsWith("a_")) avatarExtension = "gif"; - if ( - body.data.activities.length > 0 && - body.data.activities[Object.keys(body.data.activities).length - 1].type === 0 - ) - activity = body.data.activities[Object.keys(body.data.activities).length - 1]; if (params.animated === "false") avatarExtension = "webp"; if (params.hideStatus === "true") hideStatus = "true"; + if (params.hideTimestamp === "true") hideTimestamp = "true"; if (params.hideDiscrim === "true") discrim = "hide"; if (params.theme === "light") { backgroundColor = "#eee"; @@ -48,7 +60,9 @@ const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise< let avatar: String; if (body.data.discord_user.avatar) { avatar = await encodeBase64( - `https://cdn.discordapp.com/avatars/${body.data.discord_user.id}/${body.data.discord_user.avatar}.${avatarExtension}?size=${avatarExtension === "gif" ? "128" : "256"}` + `https://cdn.discordapp.com/avatars/${body.data.discord_user.id}/${ + body.data.discord_user.avatar + }.${avatarExtension}?size=${avatarExtension === "gif" ? "128" : "256"}` ); } else { let lastDigit = Number(body.data.discord_user.discriminator.substr(-1)); @@ -94,6 +108,15 @@ const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise< if (body.data.activities[0] && body.data.activities[0].state && body.data.activities[0].type === 4) userStatus = body.data.activities[0].state; + if (body.data.activities[0] && body.data.activities[0].state && body.data.activities[0].type === 4) + userStatus = body.data.activities[0].state; + + // filter only type 0 + const activities = body.data.activities.filter(activity => activity.type === 0); + + // take the highest one + activity = Array.isArray(activities) ? activities[0] : activities; + return ` @@ -169,10 +192,10 @@ const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise< .map( v => ` ` @@ -196,12 +219,12 @@ const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise< ? ` ` @@ -230,7 +253,7 @@ const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise< padding-top: 18px; ">
@@ -239,20 +262,20 @@ const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise< ? ` ` : ` @@ -263,7 +286,7 @@ const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise< ? ` -

PLAYING A GAME...

${activity.details}

` : `` } + ${ + activity.state + ? ` +

${activity.state}${ + activity.party + ? `(${activity.party.size[0]} of ${activity.party.size[1]})` + : "" + }

` + : `` + } + ${ + activity.timestamps && hideTimestamp !== "true" + ? ` +

${elapsedTime(new Date(activity.timestamps.start).getTime())} elapsed

` + : `` + }
` @@ -326,10 +378,10 @@ const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise< padding-top: 18px; "> @@ -341,11 +393,11 @@ const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise< ">

LISTENING TO SPOTIFY...

+ }; margin-bottom: 15px;">LISTENING TO SPOTIFY...

${escape(body.data.spotify.song)}

By ${escape(body.data.spotify.artist)}

@@ -376,7 +428,7 @@ const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise< align-items: center; ">