Pronouns labels on Bluesky
1import { AppBskyActorDefs, Agent } from "@atproto/api";
2import { DID, PRONOUNS, URIs } from "./constants.js";
3
4export const label = async (
5 agent: Agent,
6 subject: string | AppBskyActorDefs.ProfileView,
7 uri: string,
8) => {
9 const did = AppBskyActorDefs.isProfileView(subject) ? subject.did : subject;
10 const labels = await agent
11 .withProxy("atproto_labeler", DID)
12 .com.atproto.label.queryLabels({ sources: [DID], uriPatterns: [did] })
13 .catch((err) => {
14 console.log(err);
15 });
16
17 const post = URIs[uri];
18
19 if (labels && post?.includes("Like this post to delete")) {
20 await agent
21 .withProxy("atproto_labeler", DID)
22 .tools.ozone.moderation.emitEvent({
23 event: {
24 $type: "tools.ozone.moderation.defs#modEventLabel",
25 createLabelVals: [],
26 negateLabelVals: labels.data.labels.map((label) => label.val),
27 },
28 subject: {
29 $type: "com.atproto.admin.defs#repoRef",
30 did: did,
31 },
32 createdBy: agent.did!,
33 createdAt: new Date().toISOString(),
34 subjectBlobCids: [],
35 })
36 .catch((err) => {
37 console.log(err);
38 })
39 .then(() => console.log(`Deleted labels for ${did}`));
40 return;
41 }
42
43 if (labels && labels.data.labels.length >= 4) return;
44
45 if (PRONOUNS[post]) {
46 await agent
47 .withProxy("atproto_labeler", DID)
48 .tools.ozone.moderation.emitEvent({
49 event: {
50 $type: "tools.ozone.moderation.defs#modEventLabel",
51 createLabelVals: [PRONOUNS[post]],
52 negateLabelVals: [],
53 },
54 subject: {
55 $type: "com.atproto.admin.defs#repoRef",
56 did: did,
57 },
58 createdBy: agent.did!,
59 createdAt: new Date().toISOString(),
60 subjectBlobCids: [],
61 })
62 .catch((err) => {
63 console.log(err);
64 })
65 .then(() => console.log(`Labeled ${did} with ${post}`));
66 }
67};