Pronouns labels on Bluesky
1import { ComAtprotoLabelDefs } from "@atcute/client/lexicons"; 2import { 3 DID, 4 PORT, 5 LABEL_LIMIT, 6 POSTS, 7 SIGNING_KEY, 8 DELETE, 9} from "./constants.js"; 10import { LabelerServer } from "@skyware/labeler"; 11 12const server = new LabelerServer({ did: DID, signingKey: SIGNING_KEY }); 13 14server.start(PORT, (error, address) => { 15 if (error) console.error(error); 16 else console.log(`Labeler server listening on ${address}`); 17}); 18 19export const label = (did: string, rkey: string) => { 20 const query = server.db 21 .prepare<string[]>(`SELECT * FROM labels WHERE uri = ?`) 22 .all(did) as ComAtprotoLabelDefs.Label[]; 23 24 const labels = query.reduce((set, label) => { 25 if (!label.neg) set.add(label.val); 26 else set.delete(label.val); 27 return set; 28 }, new Set<string>()); 29 30 try { 31 if (rkey.includes(DELETE)) { 32 server.createLabels({ uri: did }, { negate: [...labels] }); 33 console.log(`${new Date().toISOString()} Deleted labels: ${did}`); 34 } else if (labels.size < LABEL_LIMIT && POSTS[rkey]) { 35 server.createLabel({ uri: did, val: POSTS[rkey] }); 36 console.log(`${new Date().toISOString()} Labeled ${did}: ${POSTS[rkey]}`); 37 } 38 } catch (err) { 39 console.error(err); 40 } 41};