hi im alinez not even tryingto hide it
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 92 lines 2.7 kB view raw
1import { LabelerServer } from "@skyware/labeler"; 2import { BskyAgent, AppBskyGraphDefs } from '@atproto/api' 3 4const LABELER_HANDLE = process.env.LABELER_HANDLE!; 5const LABELER_PASSWORD = process.env.LABELER_PASSWORD!; 6const LABELER_PDS = process.env.LABELER_PDS!; 7const LABELER_DID = process.env.LABELER_DID!; 8const SIGNING_KEY = process.env.SIGNING_KEY!; 9const LABELS_LISTS = [ 10 ['is-alien', `at://${LABELER_DID}/app.bsky.graph.list/3m72hhjgqww2u`], 11 ['is-alienphobe', `at://${LABELER_DID}/app.bsky.graph.list/3m72h3vsecg2u`], 12 ['ebil-club-member', 'at://did:plc:b26ewgkrnx3yvsp2cdao3ntu/app.bsky.graph.list/3madar3xkeb2p'] 13]; 14 15const server = new LabelerServer({ 16 did: LABELER_DID, 17 signingKey: SIGNING_KEY 18}); 19 20const agent = new BskyAgent({ 21 service: LABELER_PDS 22}) 23await agent.login({ 24 identifier: LABELER_DID, 25 password: LABELER_PASSWORD 26}) 27 28const agentPublic = new BskyAgent({ 29 service: "https://public.api.bsky.app" 30}) 31 32server.app.get("/", (_, res) => res.redirect(`https://witchsky.app/profile/${LABELER_DID}`)); 33server.start(14831, (error) => { 34 if (error) { 35 console.error("failed to start server:", error); 36 } else { 37 console.log("labeler server running on port 14831"); 38 } 39}); 40 41let isFetching = false; 42 43async function fetchAndLabel() { 44 if (isFetching) return; 45 isFetching = true; 46 47 try { 48 console.log("labeling..."); 49 50 const query = await server.db.execute({ 51 sql: "SELECT uri, val, neg FROM labels", 52 args: [] 53 }); 54 console.log(`fetched ${query.rows.length} existing labels`); 55 56 for (const [label, list] of LABELS_LISTS) { 57 let cursor: string | undefined 58 let members: AppBskyGraphDefs.ListItemView[] = [] 59 do { 60 let res = await agentPublic.app.bsky.graph.getList({ 61 list: list, 62 limit: 100, 63 cursor 64 }) 65 cursor = res.data.cursor 66 members = members.concat(res.data.items) 67 } while (cursor) 68 69 for (const member of members) { 70 try { 71 if (query.rows.find((row: any) => row.uri === member.subject.did && row.val === label && row.neg === 0)) continue; 72 73 await server.createLabel({ 74 uri: member.subject.did, 75 val: label 76 }); 77 } catch (err) { 78 console.error(`failed to create label ${label} for ${member.subject.did}:`, err); 79 } 80 } 81 console.log(`labeled ${members.length} members with ${label}`); 82 } 83 console.log("labeling completed"); 84 } catch (err) { 85 console.error("labeling failed:", err); 86 } finally { 87 isFetching = false; 88 } 89} 90 91await fetchAndLabel(); 92setInterval(fetchAndLabel, 30 * 60 * 1000); // 30 minutes