this repo has no description
at main 82 lines 2.2 kB view raw
1import { Client, CredentialManager } from "@atcute/client"; 2import { AppBskyFeedDefs } from "@atcute/bluesky"; 3import fs from "fs"; 4import "dotenv/config"; 5 6async function getLikedPosts( 7 cursor: string | undefined = undefined, 8 posts: AppBskyFeedDefs.FeedViewPost[] = [], 9): Promise<AppBskyFeedDefs.FeedViewPost[]> { 10 const response = await rpc.get("app.bsky.feed.getActorLikes", { 11 params: { 12 actor: process.env.DID, 13 cursor, 14 }, 15 }); 16 17 if (!response.ok) { 18 console.log(response); 19 return []; 20 } 21 22 for (const feedItem of response.data.feed) { 23 // ewwww, whos liking their own posts 24 if (feedItem.post.author.did == process.env.DID) continue; 25 26 posts.push(feedItem); 27 } 28 29 console.log(`added ${posts.length} posts`); 30 // console.log(response.data.cursor); 31 32 // maybe its a skill issue but this IRs, adding the length check helps stop that 33 if (!response.data.cursor || response.data.feed.length === 0) { 34 return posts; 35 } 36 37 return getLikedPosts(response.data.cursor, posts); 38} 39 40async function main() { 41 const posts = await getLikedPosts(); 42 43 fs.writeFileSync("dist/whodoilike.md", "DID | handle | times likes"); 44 fs.appendFileSync("dist/whodoilike.md", "\n----|------|-----------"); 45 46 const didToLikes = new Map(); 47 for (const post of posts) { 48 const { handle, did } = post.post.author; 49 50 if (didToLikes.has(did)) { 51 let didsLikes = didToLikes.get(did).likes; 52 didToLikes.set(did, { handle, likes: didsLikes + 1 }); 53 } else { 54 didToLikes.set(did, { handle, likes: 1 }); 55 } 56 } 57 58 var descDidToLikes = new Map( 59 [...didToLikes.entries()].sort((a, b) => b[1].likes - a[1].likes), 60 ); 61 62 let output = "Rank | Handle | Times Liked\n----|------|----------"; 63 let i = 1; 64 for (const [did, likers] of descDidToLikes) { 65 output += `\n${i} | ${likers.handle} (${did}) | ${likers.likes}`; 66 i++; 67 } 68 69 fs.writeFileSync("dist/whodoilike.md", output); 70} 71 72// hoist me pls 73const manager = new CredentialManager({ service: process.env.PDS }); 74const rpc = new Client({ handler: manager }); 75await manager.login({ 76 identifier: process.env.DID, 77 password: process.env.PASSWORD, 78}); 79 80const mydid = ""; 81 82main();