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,
|
||||
replyToBots: 1 << 1,
|
||||
fedimbed: 1 << 2,
|
||||
bskyEmbeds: 1 << 3,
|
||||
bskyQuoteOnly: 1 << 4,
|
||||
});
|
||||
|
||||
async function getFlags(guildId) {
|
||||
|
|
|
@ -284,6 +284,8 @@ async function blueskyQuoteEmbed(quote) {
|
|||
}
|
||||
|
||||
async function bluesky(msg, url, spoiler = false) {
|
||||
const quoteOnly = hasFlag(msg.guildID, "bskyQuoteOnly");
|
||||
|
||||
const urlObj = new URL(url);
|
||||
urlObj.hostname = "bsky.app";
|
||||
url = urlObj.toString();
|
||||
|
@ -312,6 +314,7 @@ async function bluesky(msg, url, spoiler = false) {
|
|||
throw new Error(`Did not get a valid Bluesky 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 channel = guild ? guild.channels.get(msg.channel.id) : msg.channel;
|
||||
|
@ -392,6 +395,7 @@ async function bluesky(msg, url, spoiler = false) {
|
|||
break;
|
||||
}
|
||||
case "app.bsky.embed.record#view": {
|
||||
hasQuote = true;
|
||||
const quote = post.embed.record;
|
||||
const quoteData = await blueskyQuoteEmbed(quote);
|
||||
|
||||
|
@ -407,6 +411,8 @@ async function bluesky(msg, url, spoiler = false) {
|
|||
break;
|
||||
}
|
||||
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}})));
|
||||
} 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 {
|
||||
response: {
|
||||
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 urlObj;
|
||||
try {
|
||||
|
@ -522,7 +533,8 @@ async function processUrl(msg, url, spoiler = false) {
|
|||
|
||||
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
|
||||
// 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) {
|
||||
if (msg.author.id == hf.bot.user.id) 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 (URLS_REGEX.test(msg.content)) {
|
||||
|
@ -1384,7 +1396,7 @@ fedimbedCommand.callback = async function (interaction) {
|
|||
|
||||
if (hasService) {
|
||||
try {
|
||||
const {response} = await processUrl(interaction, url, spoiler);
|
||||
const {response} = await processUrl(interaction, url, spoiler, true);
|
||||
|
||||
if (!response)
|
||||
return {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue