Pronouns labels on Bluesky

switch from emitEvent to createLabel

Changed files
+30 -52
src
+27 -35
src/label.ts
···
-
import { AppBskyActorDefs, Agent } from "@atproto/api";
-
import { DID, PRONOUNS, URIs } from "./constants.js";
export const label = async (
-
agent: Agent,
subject: string | AppBskyActorDefs.ProfileView,
uri: string,
) => {
const did = AppBskyActorDefs.isProfileView(subject) ? subject.did : subject;
const labels = await agent.com.atproto.label
-
.queryLabels({ sources: [DID], uriPatterns: [did] })
.catch((err) => {
console.log(err);
});
···
const post = URIs[uri];
if (post?.includes("Like this post to delete")) {
-
await agent
-
.withProxy("atproto_labeler", DID)
-
.tools.ozone.moderation.emitEvent({
-
event: {
-
$type: "tools.ozone.moderation.defs#modEventLabel",
-
createLabelVals: [],
-
negateLabelVals: labels.data.labels.map((label) => label.val),
-
},
-
subject: {
-
$type: "com.atproto.admin.defs#repoRef",
-
did: did,
-
},
-
createdBy: agent.did!,
-
createdAt: new Date().toISOString(),
-
subjectBlobCids: [],
-
})
.catch((err) => {
console.log(err);
})
.then(() => console.log(`Deleted labels for ${did}`));
} else if (labels.data.labels.length < 4 && PRONOUNS[post]) {
-
await agent
-
.withProxy("atproto_labeler", DID)
-
.tools.ozone.moderation.emitEvent({
-
event: {
-
$type: "tools.ozone.moderation.defs#modEventLabel",
-
createLabelVals: [PRONOUNS[post]],
-
negateLabelVals: [],
-
},
-
subject: {
-
$type: "com.atproto.admin.defs#repoRef",
-
did: did,
-
},
-
createdBy: agent.did!,
-
createdAt: new Date().toISOString(),
-
subjectBlobCids: [],
})
.catch((err) => {
console.log(err);
···
+
import { AppBskyActorDefs } from "@atproto/api";
+
import { DID, PRONOUNS, SIGNING_KEY, URIs } from "./constants.js";
+
import { LabelerServer } from "@skyware/labeler";
+
import { getAgent } from "./agent.js";
+
+
const server = new LabelerServer({ did: DID, signingKey: SIGNING_KEY });
+
const agent = await getAgent();
+
+
server.start(4001, (error, address) => {
+
if (error) {
+
console.error(error);
+
} else {
+
console.log(`Labeler server listening on ${address}`);
+
}
+
});
export const label = async (
subject: string | AppBskyActorDefs.ProfileView,
uri: string,
) => {
const did = AppBskyActorDefs.isProfileView(subject) ? subject.did : subject;
const labels = await agent.com.atproto.label
+
.queryLabels({ sources: [server.did], uriPatterns: [did] })
.catch((err) => {
console.log(err);
});
···
const post = URIs[uri];
if (post?.includes("Like this post to delete")) {
+
await server
+
.createLabels(
+
{ uri: did },
+
{ negate: labels.data.labels.map((label) => label.val) },
+
)
.catch((err) => {
console.log(err);
})
.then(() => console.log(`Deleted labels for ${did}`));
} else if (labels.data.labels.length < 4 && PRONOUNS[post]) {
+
await server
+
.createLabel({
+
src: server.did,
+
uri: did,
+
val: PRONOUNS[post],
+
cts: new Date().toISOString(),
})
.catch((err) => {
console.log(err);
+3 -17
src/main.ts
···
import { AppBskyFeedLike } from "@atproto/api";
import { Firehose } from "@skyware/firehose";
-
import { getAgent } from "./agent.js";
import { label } from "./label.js";
-
import { DID, SIGNING_KEY } from "./constants.js";
import fs from "node:fs";
-
import { LabelerServer } from "@skyware/labeler";
-
-
const server = new LabelerServer({ did: DID, signingKey: SIGNING_KEY });
-
-
server.start(4001, (error, address) => {
-
if (error) {
-
console.error(error);
-
} else {
-
console.log(`Labeler server listening on ${address}`);
-
}
-
});
const subscribe = async () => {
-
const agent = await getAgent();
-
let cursorFirehose = 0;
const cursorFile = fs.readFileSync("cursor.txt", "utf8");
···
if (op.action !== "delete" && AppBskyFeedLike.isRecord(op.record)) {
if ((op.record.subject.uri ?? "").includes(DID)) {
if ((op.record.subject.uri ?? "").includes("app.bsky.feed.post")) {
-
await label(agent, commit.repo, op.record.subject.uri).catch(
-
(err) => console.error(err),
);
}
}
···
import { AppBskyFeedLike } from "@atproto/api";
import { Firehose } from "@skyware/firehose";
import { label } from "./label.js";
+
import { DID } from "./constants.js";
import fs from "node:fs";
const subscribe = async () => {
let cursorFirehose = 0;
const cursorFile = fs.readFileSync("cursor.txt", "utf8");
···
if (op.action !== "delete" && AppBskyFeedLike.isRecord(op.record)) {
if ((op.record.subject.uri ?? "").includes(DID)) {
if ((op.record.subject.uri ?? "").includes("app.bsky.feed.post")) {
+
await label(commit.repo, op.record.subject.uri).catch((err) =>
+
console.error(err),
);
}
}