fedimbed: fedimbed stats
This commit is contained in:
		
							parent
							
								
									995cd47e34
								
							
						
					
					
						commit
						55553ada6a
					
				
					 1 changed files with 46 additions and 4 deletions
				
			
		| 
						 | 
					@ -942,6 +942,46 @@ async function fetchPost(url, platform, forceMastoAPI = false) {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function getStatsAS(post) {
 | 
				
			||||||
 | 
					  // agony
 | 
				
			||||||
 | 
					  let replyCount = 0;
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    const selfReplies = await signedFetch(post.replies.id + "?page=true", {
 | 
				
			||||||
 | 
					      headers: {
 | 
				
			||||||
 | 
					        "User-Agent": FRIENDLY_USERAGENT,
 | 
				
			||||||
 | 
					        Accept: "application/activity+json",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    }).then((res) => res.json());
 | 
				
			||||||
 | 
					    replyCount += selfReplies?.items?.length ?? 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const otherReplies = await signedFetch(post.replies.id + "?page=true&only_other_accounts=true", {
 | 
				
			||||||
 | 
					      headers: {
 | 
				
			||||||
 | 
					        "User-Agent": FRIENDLY_USERAGENT,
 | 
				
			||||||
 | 
					        Accept: "application/activity+json",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    }).then((res) => res.json());
 | 
				
			||||||
 | 
					    replyCount += otherReplies?.items?.length ?? 0;
 | 
				
			||||||
 | 
					  } catch {
 | 
				
			||||||
 | 
					    // noop
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const stats = [];
 | 
				
			||||||
 | 
					  if (replyCount > 0) stats.push(`\u21a9 ${statsFormatter.format(replyCount)}`);
 | 
				
			||||||
 | 
					  if (post.shares?.totalItems ?? 0 > 0) stats.push(`\ud83d\udd01 ${statsFormatter.format(post.shares.totalItems)}`);
 | 
				
			||||||
 | 
					  if (post.likes?.totalItems ?? 0 > 0) stats.push(`\u2665 ${statsFormatter.format(post.likes.totalItems)}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return stats.join("\u3000");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function getStatsMasto(post) {
 | 
				
			||||||
 | 
					  const stats = [];
 | 
				
			||||||
 | 
					  if (post.replies_count > 0) stats.push(`\u21a9 ${statsFormatter.format(post.replies_count)}`);
 | 
				
			||||||
 | 
					  if (post.reblogs_count > 0) stats.push(`\ud83d\udd01 ${statsFormatter.format(post.reblogs_count)}`);
 | 
				
			||||||
 | 
					  if (post.favourites_count > 0) stats.push(`\u2665 ${statsFormatter.format(post.favourites_count)}`);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return stats.join("\u3000");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function processUrl(msg, url, spoiler = false, command = false) {
 | 
					async function processUrl(msg, url, spoiler = false, command = false) {
 | 
				
			||||||
  let canFedi = await hasFlag(msg.guildID, "fedimbed");
 | 
					  let canFedi = await hasFlag(msg.guildID, "fedimbed");
 | 
				
			||||||
  let canBsky = await hasFlag(msg.guildID, "bskyEmbeds");
 | 
					  let canBsky = await hasFlag(msg.guildID, "bskyEmbeds");
 | 
				
			||||||
| 
						 | 
					@ -993,7 +1033,8 @@ async function processUrl(msg, url, spoiler = false, command = false) {
 | 
				
			||||||
    context,
 | 
					    context,
 | 
				
			||||||
    contextUrl,
 | 
					    contextUrl,
 | 
				
			||||||
    emotes = [],
 | 
					    emotes = [],
 | 
				
			||||||
    sensitive = false;
 | 
					    sensitive = false,
 | 
				
			||||||
 | 
					    stats;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Fetch post
 | 
					  // Fetch post
 | 
				
			||||||
  const postData = await fetchPost(url, platform);
 | 
					  const postData = await fetchPost(url, platform);
 | 
				
			||||||
| 
						 | 
					@ -1030,6 +1071,7 @@ async function processUrl(msg, url, spoiler = false, command = false) {
 | 
				
			||||||
      .filter((x) => !(x.name ?? x.shortcode)?.endsWith("#."))
 | 
					      .filter((x) => !(x.name ?? x.shortcode)?.endsWith("#."))
 | 
				
			||||||
      .map((x) => ({name: `:${x.name ?? x.shortcode}:`, url: x.url}));
 | 
					      .map((x) => ({name: `:${x.name ?? x.shortcode}:`, url: x.url}));
 | 
				
			||||||
    sensitive = postData.sensitive;
 | 
					    sensitive = postData.sensitive;
 | 
				
			||||||
 | 
					    stats = getStatsMasto(postData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (postData.in_reply_to_id) {
 | 
					    if (postData.in_reply_to_id) {
 | 
				
			||||||
      // this url is a dummy and will fail if gone to normally
 | 
					      // this url is a dummy and will fail if gone to normally
 | 
				
			||||||
| 
						 | 
					@ -1139,10 +1181,10 @@ async function processUrl(msg, url, spoiler = false, command = false) {
 | 
				
			||||||
    cw = postData.summary;
 | 
					    cw = postData.summary;
 | 
				
			||||||
    timestamp = postData.published;
 | 
					    timestamp = postData.published;
 | 
				
			||||||
    sensitive = postData.sensitive;
 | 
					    sensitive = postData.sensitive;
 | 
				
			||||||
 | 
					    stats = await getStatsAS(postData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (postData.tag) {
 | 
					    if (postData.tag) {
 | 
				
			||||||
      let tag = postData.tag;
 | 
					      let tag = postData.tag;
 | 
				
			||||||
      // gts moment
 | 
					 | 
				
			||||||
      if (!Array.isArray(tag)) tag = [tag];
 | 
					      if (!Array.isArray(tag)) tag = [tag];
 | 
				
			||||||
      emotes = tag.filter((x) => !!x.icon).map((x) => ({name: x.name, url: x.icon.url}));
 | 
					      emotes = tag.filter((x) => !!x.icon).map((x) => ({name: x.name, url: x.icon.url}));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -1191,7 +1233,7 @@ async function processUrl(msg, url, spoiler = false, command = false) {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (postData.attachment != null) {
 | 
					    if (postData.attachment != null) {
 | 
				
			||||||
      // NB: gts doesnt send singular attachments as array
 | 
					      // NB: everyone else except gts doesnt follow the spec (they should be using attachments)
 | 
				
			||||||
      const attachments = Array.isArray(postData.attachment) ? postData.attachment : [postData.attachment];
 | 
					      const attachments = Array.isArray(postData.attachment) ? postData.attachment : [postData.attachment];
 | 
				
			||||||
      for (const attachment of attachments) {
 | 
					      for (const attachment of attachments) {
 | 
				
			||||||
        if (attachment.mediaType) {
 | 
					        if (attachment.mediaType) {
 | 
				
			||||||
| 
						 | 
					@ -1409,7 +1451,7 @@ async function processUrl(msg, url, spoiler = false, command = false) {
 | 
				
			||||||
      : null,
 | 
					      : null,
 | 
				
			||||||
    footer: {
 | 
					    footer: {
 | 
				
			||||||
      icon_url: crawled?.icon,
 | 
					      icon_url: crawled?.icon,
 | 
				
			||||||
      text: platformName,
 | 
					      text: (stats != null && stats != "" ? stats + "\n" : "") + platformName,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    thumbnail: {
 | 
					    thumbnail: {
 | 
				
			||||||
      url: author.avatar,
 | 
					      url: author.avatar,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue