summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorPuyodead1 <puyodead@proton.me>2023-09-04 13:49:45 -0400
committerGitHub <noreply@github.com>2023-09-04 13:49:45 -0400
commit372bd749fc4524f9cb427659c7793dddc0f26e77 (patch)
tree0406b0615e10ba9b1416466aef0231d5fdd1393b /src
parentRewrite thumbnail/image generation for embeds (diff)
parent[fb] remove provider obj, add color (diff)
downloadserver-372bd749fc4524f9cb427659c7793dddc0f26e77.tar.xz
Merge pull request #1097 from spacebarchat/steam-facebook-embed-handlers
Steam/Facebook Embeds
Diffstat (limited to 'src')
-rw-r--r--src/api/util/utility/EmbedHandlers.ts55
1 files changed, 52 insertions, 3 deletions
diff --git a/src/api/util/utility/EmbedHandlers.ts b/src/api/util/utility/EmbedHandlers.ts
index b1e6b866..ab953613 100644
--- a/src/api/util/utility/EmbedHandlers.ts
+++ b/src/api/util/utility/EmbedHandlers.ts
@@ -226,8 +226,21 @@ export const EmbedHandlers: {
 	"c.tenor.com": genericImageHandler,
 	"media.tenor.com": genericImageHandler,
 
-	// TODO: facebook
-	// have to use their APIs or something because they don't send the metas in initial html
+	"facebook.com": (url) => EmbedHandlers["www.facebook.com"](url),
+	"www.facebook.com": async (url: URL) => {
+		const response = await doFetch(url);
+		if (!response) return null;
+		const metas = getMetaDescriptions(await response.text());
+
+		return {
+			url: url.href,
+			type: EmbedType.link,
+			title: metas.title,
+			description: metas.description,
+			thumbnail: makeEmbedImage(metas.image, 640, 640),
+			color: 16777215,
+		};
+	},
 
 	"twitter.com": (url) => EmbedHandlers["www.twitter.com"](url),
 	"www.twitter.com": async (url: URL) => {
@@ -385,6 +398,42 @@ export const EmbedHandlers: {
 		const response = await doFetch(url);
 		if (!response) return null;
 		const metas = getMetaDescriptions(await response.text());
+		const numReviews = metas.$("#review_summary_num_reviews").val() as
+			| string
+			| undefined;
+		const price = metas
+			.$(".game_purchase_price.price")
+			.data("price-final") as number | undefined;
+		const releaseDate = metas
+			.$(".release_date")
+			.find("div.date")
+			.text()
+			.trim();
+		const isReleased = new Date(releaseDate) < new Date();
+
+		const fields: Embed["fields"] = [];
+
+		if (numReviews)
+			fields.push({
+				name: "Reviews",
+				value: numReviews,
+				inline: true,
+			});
+
+		if (price)
+			fields.push({
+				name: "Price",
+				value: `$${price / 100}`,
+				inline: true,
+			});
+
+		// if the release date is in the past, it's already out
+		if (releaseDate && !isReleased)
+			fields.push({
+				name: "Release Date",
+				value: releaseDate,
+				inline: true,
+			});
 
 		return {
 			url: url.href,
@@ -405,7 +454,7 @@ export const EmbedHandlers: {
 				url: "https://store.steampowered.com",
 				name: "Steam",
 			},
-			// TODO: fields for release date
+			fields,
 			// TODO: Video
 		};
 	},