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 repo = await agent
11 .withProxy("atproto_labeler", DID)
12 .tools.ozone.moderation.getRepo({ did: did })
13 .catch((err) => {
14 console.log(err);
15 });
16
17 if (!repo) return;
18
19 const post = URIs[uri];
20
21 if (repo.data.labels && (post ?? "").includes("Like this post to delete")) {
22 await agent
23 .withProxy("atproto_labeler", DID)
24 .tools.ozone.moderation.emitEvent({
25 event: {
26 $type: "tools.ozone.moderation.defs#modEventLabel",
27 createLabelVals: [],
28 negateLabelVals: repo.data.labels.map((label) => label.val),
29 },
30 subject: {
31 $type: "com.atproto.admin.defs#repoRef",
32 did: did,
33 },
34 createdBy: agent.did!,
35 createdAt: new Date().toISOString(),
36 subjectBlobCids: [],
37 })
38 .catch((err) => {
39 console.log(err);
40 })
41 .then(() => console.log(`Deleted labels for ${did}`));
42 return;
43 }
44
45 if (repo.data.labels && repo.data.labels.length >= 4) return;
46
47 if (PRONOUNS[post]) {
48 await agent
49 .withProxy("atproto_labeler", DID)
50 .api.tools.ozone.moderation.emitEvent({
51 event: {
52 $type: "tools.ozone.moderation.defs#modEventLabel",
53 createLabelVals: [PRONOUNS[post]],
54 negateLabelVals: [],
55 },
56 subject: {
57 $type: "com.atproto.admin.defs#repoRef",
58 did: did,
59 },
60 createdBy: agent.did!,
61 createdAt: new Date().toISOString(),
62 subjectBlobCids: [],
63 })
64 .catch((err) => {
65 console.log(err);
66 })
67 .then(() => console.log(`Labeled ${did} with ${post}`));
68 }
69};