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.com.atproto.label
11 .queryLabels({ sources: [DID], uriPatterns: [did] })
12 .catch((err) => {
13 console.log(err);
14 });
15 if (!labels) return;
16
17 const post = URIs[uri];
18
19 if (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 } else if (labels.data.labels.length < 4 && PRONOUNS[post]) {
41 await agent
42 .withProxy("atproto_labeler", DID)
43 .tools.ozone.moderation.emitEvent({
44 event: {
45 $type: "tools.ozone.moderation.defs#modEventLabel",
46 createLabelVals: [PRONOUNS[post]],
47 negateLabelVals: [],
48 },
49 subject: {
50 $type: "com.atproto.admin.defs#repoRef",
51 did: did,
52 },
53 createdBy: agent.did!,
54 createdAt: new Date().toISOString(),
55 subjectBlobCids: [],
56 })
57 .catch((err) => {
58 console.log(err);
59 })
60 .then(() => console.log(`Labeled ${did} with ${post}`));
61 }
62};