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