forked from
isabelroses.com/atproto-scripts
this repo has no description
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();