fedimbed: split bluesky into its own option and add quote only option
This commit is contained in:
parent
6a5259b2b6
commit
2a2acdf6ad
2 changed files with 18 additions and 4 deletions
|
@ -4,6 +4,8 @@ const flags = Object.freeze({
|
||||||
codePreviews: 1 << 0,
|
codePreviews: 1 << 0,
|
||||||
replyToBots: 1 << 1,
|
replyToBots: 1 << 1,
|
||||||
fedimbed: 1 << 2,
|
fedimbed: 1 << 2,
|
||||||
|
bskyEmbeds: 1 << 3,
|
||||||
|
bskyQuoteOnly: 1 << 4,
|
||||||
});
|
});
|
||||||
|
|
||||||
async function getFlags(guildId) {
|
async function getFlags(guildId) {
|
||||||
|
|
|
@ -284,6 +284,8 @@ async function blueskyQuoteEmbed(quote) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function bluesky(msg, url, spoiler = false) {
|
async function bluesky(msg, url, spoiler = false) {
|
||||||
|
const quoteOnly = hasFlag(msg.guildID, "bskyQuoteOnly");
|
||||||
|
|
||||||
const urlObj = new URL(url);
|
const urlObj = new URL(url);
|
||||||
urlObj.hostname = "bsky.app";
|
urlObj.hostname = "bsky.app";
|
||||||
url = urlObj.toString();
|
url = urlObj.toString();
|
||||||
|
@ -312,6 +314,7 @@ async function bluesky(msg, url, spoiler = false) {
|
||||||
throw new Error(`Did not get a valid Bluesky thread`);
|
throw new Error(`Did not get a valid Bluesky thread`);
|
||||||
|
|
||||||
const {post} = data.thread;
|
const {post} = data.thread;
|
||||||
|
let hasQuote;
|
||||||
|
|
||||||
const guild = msg.guildID && hf.bot.guilds.has(msg.guildID) ? hf.bot.guilds.get(msg.guildID) : null;
|
const guild = msg.guildID && hf.bot.guilds.has(msg.guildID) ? hf.bot.guilds.get(msg.guildID) : null;
|
||||||
const channel = guild ? guild.channels.get(msg.channel.id) : msg.channel;
|
const channel = guild ? guild.channels.get(msg.channel.id) : msg.channel;
|
||||||
|
@ -392,6 +395,7 @@ async function bluesky(msg, url, spoiler = false) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "app.bsky.embed.record#view": {
|
case "app.bsky.embed.record#view": {
|
||||||
|
hasQuote = true;
|
||||||
const quote = post.embed.record;
|
const quote = post.embed.record;
|
||||||
const quoteData = await blueskyQuoteEmbed(quote);
|
const quoteData = await blueskyQuoteEmbed(quote);
|
||||||
|
|
||||||
|
@ -407,6 +411,8 @@ async function bluesky(msg, url, spoiler = false) {
|
||||||
break;
|
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") {
|
if (post.embed.media.$type === "app.bsky.embed.images#view") {
|
||||||
embeds.push(...post.embed.media.images.map((image) => ({...mainEmbed, image: {url: image.fullsize}})));
|
embeds.push(...post.embed.media.images.map((image) => ({...mainEmbed, image: {url: image.fullsize}})));
|
||||||
} else if (post.embed.media.$type === "app.bsky.embed.video#view") {
|
} else if (post.embed.media.$type === "app.bsky.embed.video#view") {
|
||||||
|
@ -495,6 +501,8 @@ async function bluesky(msg, url, spoiler = false) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (quoteOnly && !hasQuote) return {};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
response: {
|
response: {
|
||||||
content: `${warnings.length > 0 ? warnings.join("\n") + "\n" : ""}${spoiler ? `|| ${url} ||` : ""}`,
|
content: `${warnings.length > 0 ? warnings.join("\n") + "\n" : ""}${spoiler ? `|| ${url} ||` : ""}`,
|
||||||
|
@ -511,7 +519,10 @@ async function bluesky(msg, url, spoiler = false) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
async function processUrl(msg, url, spoiler = false) {
|
async function processUrl(msg, url, spoiler = false, command = false) {
|
||||||
|
const canFedi = command || hasFlag(msg.guildID, "fedimbed");
|
||||||
|
const canBsky = command || hasFlag(msg.guildID, "bskyEmbeds");
|
||||||
|
|
||||||
let invalidUrl = false;
|
let invalidUrl = false;
|
||||||
let urlObj;
|
let urlObj;
|
||||||
try {
|
try {
|
||||||
|
@ -522,7 +533,8 @@ async function processUrl(msg, url, spoiler = false) {
|
||||||
|
|
||||||
if (invalidUrl) return {};
|
if (invalidUrl) return {};
|
||||||
|
|
||||||
if (BSKY_DOMAINS.includes(urlObj.hostname.toLowerCase())) return await bluesky(msg, url, spoiler);
|
if (canBsky && BSKY_DOMAINS.includes(urlObj.hostname.toLowerCase())) return await bluesky(msg, url, spoiler);
|
||||||
|
if (!canFedi) return {};
|
||||||
|
|
||||||
// some lemmy instances have old reddit frontend subdomains
|
// some lemmy instances have old reddit frontend subdomains
|
||||||
// but these frontends are just frontends and dont actually expose the API
|
// but these frontends are just frontends and dont actually expose the API
|
||||||
|
@ -1290,7 +1302,7 @@ async function processUrl(msg, url, spoiler = false) {
|
||||||
events.add("messageCreate", "fedimbed", async function (msg) {
|
events.add("messageCreate", "fedimbed", async function (msg) {
|
||||||
if (msg.author.id == hf.bot.user.id) return;
|
if (msg.author.id == hf.bot.user.id) return;
|
||||||
if (!msg.guildID) return;
|
if (!msg.guildID) return;
|
||||||
if (!(await hasFlag(msg.guildID, "fedimbed"))) return;
|
if (!((await hasFlag(msg.guildID, "fedimbed")) || (await hasFlag(msg.guildID, "bskyEmbeds")))) return;
|
||||||
if (!msg.content || msg.content == "") return;
|
if (!msg.content || msg.content == "") return;
|
||||||
|
|
||||||
if (URLS_REGEX.test(msg.content)) {
|
if (URLS_REGEX.test(msg.content)) {
|
||||||
|
@ -1384,7 +1396,7 @@ fedimbedCommand.callback = async function (interaction) {
|
||||||
|
|
||||||
if (hasService) {
|
if (hasService) {
|
||||||
try {
|
try {
|
||||||
const {response} = await processUrl(interaction, url, spoiler);
|
const {response} = await processUrl(interaction, url, spoiler, true);
|
||||||
|
|
||||||
if (!response)
|
if (!response)
|
||||||
return {
|
return {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue