diff options
author | Puyodead1 <puyodead@proton.me> | 2023-09-04 13:49:45 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-04 13:49:45 -0400 |
commit | 372bd749fc4524f9cb427659c7793dddc0f26e77 (patch) | |
tree | 0406b0615e10ba9b1416466aef0231d5fdd1393b /src | |
parent | Rewrite thumbnail/image generation for embeds (diff) | |
parent | [fb] remove provider obj, add color (diff) | |
download | server-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.ts | 55 |
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 }; }, |