|
// retoor <retoor@molodetz.nl>
|
|
|
|
import { fromEnv } from "./client.mjs";
|
|
|
|
const pollSeconds = Number(process.env.DEVRANT_POLL_SECONDS || "30");
|
|
const keywords = (process.env.DEVRANT_UPVOTE_KEYWORDS || "")
|
|
.split(",")
|
|
.map((word) => word.trim().toLowerCase())
|
|
.filter(Boolean);
|
|
|
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
|
|
const api = fromEnv();
|
|
if (api.username && api.password) await api.login();
|
|
|
|
const seen = new Set();
|
|
console.log(`watching feed every ${pollSeconds}s (ctrl-c to stop)`);
|
|
|
|
while (true) {
|
|
const rants = await api.rants("recent", 20);
|
|
for (const rant of rants.reverse()) {
|
|
if (seen.has(rant.id)) continue;
|
|
seen.add(rant.id);
|
|
const text = rant.text.replace(/\n/g, " ").slice(0, 80);
|
|
console.log(`[${rant.id}] ${rant.user_username}: ${text}`);
|
|
if (keywords.length && api.auth.token_key) {
|
|
const lowered = rant.text.toLowerCase();
|
|
if (keywords.some((word) => lowered.includes(word))) {
|
|
await api.voteRant(rant.id, 1);
|
|
console.log(` upvoted ${rant.id}`);
|
|
}
|
|
}
|
|
}
|
|
await sleep(pollSeconds * 1000);
|
|
}
|