Pronouns labels on Bluesky
1import { label } from "./label.js";
2import { DID, URL } from "./constants.js";
3import fs from "node:fs";
4import { Jetstream } from "@skyware/jetstream";
5
6let intervalID: NodeJS.Timeout;
7const cursorFile = fs.readFileSync("cursor.txt", "utf8");
8if (cursorFile) console.log(`Initiate jetstream at cursor ${cursorFile}`);
9
10const jetstream = new Jetstream({
11 endpoint: URL,
12 wantedCollections: ["app.bsky.feed.like"],
13 cursor: Number(cursorFile),
14});
15
16jetstream.on("open", () => {
17 intervalID = setInterval(() => {
18 if (!jetstream.cursor) return;
19 fs.writeFile("cursor.txt", jetstream.cursor.toString(), (err) => {
20 if (err) console.log(err);
21 });
22 }, 60000);
23});
24
25jetstream.on("error", (err) => console.error(err));
26jetstream.on("close", () => clearInterval(intervalID));
27
28jetstream.onCreate("app.bsky.feed.like", (event) => {
29 if (event.commit.record.subject.uri.includes(`${DID}/app.bsky.feed.post`))
30 label(event.did, event.commit.record.subject.uri.split("/").pop()!);
31});
32
33jetstream.start();