fedimbed: components v2 testing with bluesky
This commit is contained in:
parent
c51a3be091
commit
4f0f9afbb7
1 changed files with 96 additions and 83 deletions
|
@ -357,7 +357,7 @@ async function blueskyQuoteEmbed(quote) {
|
|||
timestamp: quote.value.createdAt,
|
||||
};
|
||||
|
||||
if (quote.author.handle.endsWith(".ap.brid.gy")) {
|
||||
/*if (quote.author.handle.endsWith(".ap.brid.gy")) {
|
||||
const handle = quote.author.handle.replace(".ap.brid.gy", "");
|
||||
const split = handle.split(".");
|
||||
|
||||
|
@ -398,7 +398,7 @@ async function blueskyQuoteEmbed(quote) {
|
|||
mainEmbed.color = color;
|
||||
mainEmbed.thumbnail.url = authorData?.icon?.url ?? quote.author.avatar;
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
if (quote.value.facets?.length > 0) {
|
||||
mainEmbed.description = processBlueskyFacets(mainEmbed.description, quote.value.facets);
|
||||
|
@ -529,26 +529,82 @@ async function bluesky(msg, url, spoiler = false) {
|
|||
}
|
||||
}
|
||||
|
||||
const videos = [];
|
||||
const embeds = [];
|
||||
let sendWait = false;
|
||||
const warnings = [];
|
||||
if (hidden) {
|
||||
warnings.push(":warning: Post marked as hidden");
|
||||
}
|
||||
if (adult) {
|
||||
if (channelNsfw || !msg.guildID) {
|
||||
warnings.push(`:warning: Post contains adult content: ${Array.from(new Set(tags)).join(", ")}`);
|
||||
} else {
|
||||
return {
|
||||
response: {
|
||||
content: "Not embedding post due to adult content in SFW channel",
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
const mainEmbed = {
|
||||
color: PLATFORM_COLORS.bluesky,
|
||||
url,
|
||||
title: `${post.author.displayName} (@${post.author.handle})`,
|
||||
description: post.record.text,
|
||||
thumbnail: {
|
||||
url: post.author.avatar,
|
||||
},
|
||||
footer: {
|
||||
text: `${getStatsBluesky(post)}\nBluesky`,
|
||||
icon_url: "https://bsky.app/static/apple-touch-icon.png",
|
||||
},
|
||||
timestamp: post.record.createdAt,
|
||||
const videos = [];
|
||||
const images = [];
|
||||
//const embeds = [];
|
||||
//let sendWait = false;
|
||||
|
||||
const warningText = {
|
||||
type: 10,
|
||||
content: `## ${warnings.join("\n## ")}`,
|
||||
};
|
||||
|
||||
if (post.author.handle.endsWith(".ap.brid.gy")) {
|
||||
const container = {
|
||||
type: 17,
|
||||
accent_color: PLATFORM_COLORS.bluesky,
|
||||
components: [],
|
||||
spoiler,
|
||||
};
|
||||
|
||||
let context = "";
|
||||
if (data.thread.parent) {
|
||||
const reply = data.thread.parent.post;
|
||||
context = `### <:i:1308640078825787412> Replying to: [${reply.author.displayName} (@${
|
||||
reply.author.handle
|
||||
})](https://bsky.app/profile/${reply.author.did}/post/${reply.uri.substring(reply.uri.lastIndexOf("/") + 1)})`;
|
||||
}
|
||||
|
||||
const header = {
|
||||
type: 9,
|
||||
components: [
|
||||
{
|
||||
type: 10,
|
||||
content:
|
||||
`${context}\n## ${post.author.displayName}\n[@${post.author.handle}](https://bsky.app/profile/${post.author.did})`.trim(),
|
||||
},
|
||||
],
|
||||
accessory: {
|
||||
type: 11,
|
||||
media: {
|
||||
url: post.author.avatar,
|
||||
},
|
||||
},
|
||||
};
|
||||
container.components.push(header);
|
||||
|
||||
const postContent = {
|
||||
type: 10,
|
||||
content:
|
||||
post.record.facets?.length ?? 0 > 0
|
||||
? processBlueskyFacets(post.record.text, post.record.facets)
|
||||
: post.record.text,
|
||||
};
|
||||
container.components.push(postContent);
|
||||
|
||||
const footer = {
|
||||
type: 10,
|
||||
content: `${getStatsBluesky(post)}\n-# Bluesky \u2022 <t:${Math.floor(
|
||||
new Date(post.record.createdAt).getTime() / 1000
|
||||
)}:F>`,
|
||||
};
|
||||
|
||||
/*if (post.author.handle.endsWith(".ap.brid.gy")) {
|
||||
const handle = post.author.handle.replace(".ap.brid.gy", "");
|
||||
const split = handle.split(".");
|
||||
|
||||
|
@ -589,29 +645,12 @@ async function bluesky(msg, url, spoiler = false) {
|
|||
mainEmbed.color = color;
|
||||
mainEmbed.thumbnail.url = authorData?.icon?.url ?? post.author.avatar;
|
||||
}
|
||||
}
|
||||
|
||||
if (post.record.facets?.length > 0) {
|
||||
mainEmbed.description = processBlueskyFacets(mainEmbed.description, post.record.facets);
|
||||
}
|
||||
|
||||
if (data.thread.parent) {
|
||||
const reply = data.thread.parent.post;
|
||||
mainEmbed.author = {
|
||||
name: `Replying to: ${reply.author.displayName} (@${reply.author.handle})`,
|
||||
icon_url: "https://cdn.discordapp.com/emojis/1308640078825787412.png",
|
||||
url: `https://bsky.app/profile/${reply.author.handle}/post/${reply.uri.substring(
|
||||
reply.uri.lastIndexOf("/") + 1
|
||||
)}`,
|
||||
};
|
||||
}
|
||||
}*/
|
||||
|
||||
if (post.embed) {
|
||||
switch (post.embed.$type) {
|
||||
case "app.bsky.embed.images#view": {
|
||||
embeds.push(
|
||||
...post.embed.images.map((image) => ({...mainEmbed, image: {url: image.fullsize, description: image.alt}}))
|
||||
);
|
||||
images.push(post.embed.images.map((image) => ({media: {url: image.fullsize}, description: image.alt})));
|
||||
break;
|
||||
}
|
||||
case "app.bsky.embed.video#view": {
|
||||
|
@ -619,13 +658,7 @@ async function bluesky(msg, url, spoiler = false) {
|
|||
const domain = lookup.service.find((service) => service.id === "#atproto_pds").serviceEndpoint;
|
||||
const videoUrl = `${domain}/xrpc/com.atproto.sync.getBlob?did=${post.author.did}&cid=${post.embed.cid}`;
|
||||
|
||||
const contentType = await fetch(videoUrl, {
|
||||
method: "HEAD",
|
||||
}).then((res) => res.headers.get("Content-Type"));
|
||||
|
||||
videos.push({url: videoUrl, desc: post.embed.alt, type: contentType});
|
||||
|
||||
embeds.push({...mainEmbed, fields: [{name: "\u200b", value: `[Video Link](${videoUrl})`}]});
|
||||
videos.push({media: {url: videoUrl}, description: post.embed.alt});
|
||||
break;
|
||||
}
|
||||
case "app.bsky.embed.record#view": {
|
||||
|
@ -635,7 +668,7 @@ async function bluesky(msg, url, spoiler = false) {
|
|||
|
||||
if (quoteData.videos.length > 0) videos.push(...quoteData.videos);
|
||||
|
||||
embeds.push(mainEmbed, ...quoteData.embeds);
|
||||
//embeds.push(mainEmbed, ...quoteData.embeds);
|
||||
|
||||
if (quoteData.adult) adult = true;
|
||||
if (quoteData.hidden) hidden = true;
|
||||
|
@ -644,16 +677,11 @@ async function bluesky(msg, url, spoiler = false) {
|
|||
|
||||
break;
|
||||
}
|
||||
case "app.bsky.embed.recordWithMedia#view": {
|
||||
/*case "app.bsky.embed.recordWithMedia#view": {
|
||||
hasQuote = true;
|
||||
|
||||
if (post.embed.media.$type === "app.bsky.embed.images#view") {
|
||||
embeds.push(
|
||||
...post.embed.media.images.map((image) => ({
|
||||
...mainEmbed,
|
||||
image: {url: image.fullsize, description: image.alt},
|
||||
}))
|
||||
);
|
||||
images.push(post.embed.media.images.map((image) => ({media:{url: image.fullsize}, description: image.alt})));
|
||||
} else if (post.embed.media.$type === "app.bsky.embed.video#view") {
|
||||
const lookup = await fetch(`https://plc.directory/${post.author.did}`).then((res) => res.json());
|
||||
const domain = lookup.service.find((service) => service.id === "#atproto_pds").serviceEndpoint;
|
||||
|
@ -689,28 +717,20 @@ async function bluesky(msg, url, spoiler = false) {
|
|||
if (quoteData.tags.length > 0) tags.push(...quoteData.tags);
|
||||
|
||||
break;
|
||||
}
|
||||
}*/
|
||||
case "app.bsky.embed.external#view": {
|
||||
if (post.embed.external.uri.includes("tenor.com")) {
|
||||
const url = new URL(post.embed.external.uri);
|
||||
url.searchParams.delete("hh");
|
||||
url.searchParams.delete("ww");
|
||||
embeds.push({...mainEmbed, image: {url: url.toString()}});
|
||||
} else {
|
||||
embeds.push(mainEmbed);
|
||||
images.push({media: {url: url.toString()}});
|
||||
}
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
embeds.push(mainEmbed);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
embeds.push(mainEmbed);
|
||||
}
|
||||
|
||||
if (videos.length > 0) {
|
||||
/*if (videos.length > 0) {
|
||||
sendWait = true;
|
||||
if (msg instanceof Message) await msg.addReaction("\uD83D\uDCE4");
|
||||
}
|
||||
|
@ -748,31 +768,25 @@ async function bluesky(msg, url, spoiler = false) {
|
|||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
const warnings = [];
|
||||
if (hidden) {
|
||||
warnings.push(":warning: Post marked as hidden");
|
||||
}
|
||||
if (adult) {
|
||||
if (channelNsfw || !msg.guildID) {
|
||||
warnings.push(`:warning: Post contains adult content: ${Array.from(new Set(tags)).join(", ")}`);
|
||||
} else {
|
||||
return {
|
||||
response: {
|
||||
content: "Not embedding post due to adult content in SFW channel",
|
||||
},
|
||||
};
|
||||
}
|
||||
container.components.push({
|
||||
type: 12,
|
||||
items: images,
|
||||
});
|
||||
for (const video of videos) {
|
||||
container.components.push({
|
||||
type: 12,
|
||||
items: [video],
|
||||
});
|
||||
}
|
||||
container.components.push(footer);
|
||||
|
||||
if (quoteOnly && !hasQuote) return {};
|
||||
|
||||
return {
|
||||
response: {
|
||||
content: `${warnings.length > 0 ? warnings.join("\n") + "\n" : ""}${spoiler ? `|| ${url} ||` : ""}`,
|
||||
embeds,
|
||||
attachments: files,
|
||||
components: [warnings.length > 0 ? warningText : false, container].filter((x) => !!x),
|
||||
allowedMentions: {
|
||||
repliedUser: false,
|
||||
},
|
||||
|
@ -780,7 +794,6 @@ async function bluesky(msg, url, spoiler = false) {
|
|||
messageID: msg.id,
|
||||
},
|
||||
},
|
||||
sendWait,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue