Pronouns labels on Bluesky
at main 1.0 kB view raw
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();