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