From f11b781461a531e0623cb0ed4bb5c01cd10d4c38 Mon Sep 17 00:00:00 2001
From: LeonardSSH
Date: Thu, 12 Aug 2021 00:11:07 +0200
Subject: [PATCH 1/6] feat: implement state, timestamp and party
---
src/renderCard.tsx | 126 ++++++++++++++++++++++++++++++++-------------
1 file changed, 89 insertions(+), 37 deletions(-)
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 `
${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;
">
Date: Thu, 12 Aug 2021 01:37:57 +0200
Subject: [PATCH 2/6] Fix Elapsed Time
---
src/renderCard.tsx | 23 ++++++++++++++++-------
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/src/renderCard.tsx b/src/renderCard.tsx
index 913a070..12db3a7 100644
--- a/src/renderCard.tsx
+++ b/src/renderCard.tsx
@@ -19,16 +19,25 @@ type Parameters = {
const elapsedTime = (timestamp: any) => {
let startTime = timestamp;
- let endTime = Date.now();
- let totalSeconds = (endTime - startTime) / 1000;
+ let endTime = Number(new Date());
+ let difference = (endTime - startTime) / 1000;
- let hours = Math.floor(totalSeconds / 3600);
- let minutes = Math.floor((totalSeconds % 3600) / 60);
- let seconds = Math.floor((totalSeconds % 3600) % 60);
+ // we only calculate them, but we don't display them.
+ // this fixes a bug in the Discord API that does not send the correct timestamp to presence.
+ let daysDifference = Math.floor(difference / 60 / 60 / 24);
+ difference -= daysDifference * 60 * 60 * 24;
- return `${hours >= 1 ? ("0" + hours).slice(-2) + ":" : ""}${("0" + minutes).slice(-2)}:${("0" + seconds).slice(
+ let hoursDifference = Math.floor(difference / 60 / 60);
+ difference -= hoursDifference * 60 * 60;
+
+ let minutesDifference = Math.floor(difference / 60);
+ difference -= minutesDifference * 60;
+
+ let secondsDifference = Math.floor(difference);
+
+ return `${hoursDifference >= 1 ? ("0" + hoursDifference).slice(-2) + ":" : ""}${("0" + minutesDifference).slice(
-2
- )}`;
+ )}:${("0" + secondsDifference).slice(-2)}`;
};
const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise => {
From 87860e003e3640009d0aa86bd04f19c72f8b28cf Mon Sep 17 00:00:00 2001
From: LeonardSSH
Date: Thu, 12 Aug 2021 01:38:31 +0200
Subject: [PATCH 3/6] Fix Party & Timestamp Activities
---
src/renderCard.tsx | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/renderCard.tsx b/src/renderCard.tsx
index 12db3a7..d716ad9 100644
--- a/src/renderCard.tsx
+++ b/src/renderCard.tsx
@@ -348,14 +348,14 @@ const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise<
height: 15px;
margin: 7px 0;
">${activity.state}${
- activity.party
- ? `(${activity.party.size[0]} of ${activity.party.size[1]})`
+ activity.party && activity.party.size
+ ? ` (${activity.party.size[0]} of ${activity.party.size[1]})`
: ""
}
`
: ``
}
${
- activity.timestamps && hideTimestamp !== "true"
+ activity.timestamps && activity.timestamps.start && hideTimestamp !== "true"
? `
Date: Thu, 12 Aug 2021 01:39:26 +0200
Subject: [PATCH 4/6] Center the content if no timestamp
---
src/renderCard.tsx | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/renderCard.tsx b/src/renderCard.tsx
index d716ad9..86676a7 100644
--- a/src/renderCard.tsx
+++ b/src/renderCard.tsx
@@ -308,7 +308,11 @@ const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise<
From d84990f2f10e24278d59a9d63311500ec92175b3 Mon Sep 17 00:00:00 2001
From: LeonardSSH
Date: Thu, 12 Aug 2021 09:24:17 +0200
Subject: [PATCH 5/6] Set margin-top to -6px
---
src/renderCard.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/renderCard.tsx b/src/renderCard.tsx
index 86676a7..04d03ef 100644
--- a/src/renderCard.tsx
+++ b/src/renderCard.tsx
@@ -310,7 +310,7 @@ const renderCard = async (body: LanyardTypes.Root, params: Parameters): Promise<
color: #999;
margin-top: ${
activity.timestamps && activity.timestamps.start && hideTimestamp !== "true"
- ? "-3px"
+ ? "-6px"
: "5px"
};
line-height: 1;
From fe3d6d2b5c0a3172b598d19fb6ca4cdb094d9a07 Mon Sep 17 00:00:00 2001
From: LeonardSSH
Date: Thu, 12 Aug 2021 11:55:24 +0200
Subject: [PATCH 6/6] Add hideTimestamp to Parameters
---
pages/api/[...id].ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/pages/api/[...id].ts b/pages/api/[...id].ts
index 72d015d..46700f2 100644
--- a/pages/api/[...id].ts
+++ b/pages/api/[...id].ts
@@ -12,6 +12,7 @@ type Parameters = {
theme?: string;
bg?: string;
hideStatus?: string;
+ hideTimestamp?: string;
hideDiscrim?: string;
borderRadius?: string;
animated?: string;