Pronouns labels on Bluesky
at main 1.2 kB view raw
1import { DID, PORT, MAXLABELS, POSTS, SIGN_KEY, DELETE } from "./constants.js"; 2import { LabelerServer } from "@skyware/labeler"; 3 4const server = new LabelerServer({ did: DID, signingKey: SIGN_KEY }); 5server.start(PORT, (error, address) => { 6 if (error) console.error(error); 7 else console.log(`Labeler server listening on ${address}`); 8}); 9 10export const label = async (did: string, rkey: string) => { 11 const query = await server.db.execute({ 12 sql: "SELECT val, neg FROM labels WHERE uri = ?", 13 args: [did], 14 }); 15 16 const labels = query.rows.reduce((set, label) => { 17 if (!label.neg) set.add(label.val!.toString()); 18 else set.delete(label.val!.toString()); 19 return set; 20 }, new Set<string>()); 21 22 try { 23 if (rkey.includes(DELETE)) { 24 await server.createLabels({ uri: did }, { negate: [...labels] }); 25 console.log(`${new Date().toISOString()} Deleted labels: ${did}`); 26 } else if (labels.size < MAXLABELS && POSTS[rkey]) { 27 await server.createLabel({ uri: did, val: POSTS[rkey] }); 28 console.log(`${new Date().toISOString()} Labeled ${did}: ${POSTS[rkey]}`); 29 } 30 } catch (err) { 31 console.error(err); 32 } 33};