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};