51 lines
1.8 KiB
TypeScript
51 lines
1.8 KiB
TypeScript
/*
|
|
* Live check: Discord search total_results for a channel or a date range.
|
|
*
|
|
* Usage (from poc/):
|
|
* VESKSLOP_SLOPBOT_ENABLED=1 VESKSLOP_SLOPBOT_STATE=/path/to/slopbot.json \
|
|
* tsx ../media-scrape/test/live-count.ts <channelId> <guildId> [afterIso] [beforeIso]
|
|
*/
|
|
|
|
import { loadSlopbotConfig, startSlopbot, stopSlopbot } from "../slopbot/index.js";
|
|
|
|
function snowflakeFromIso(iso: string): string {
|
|
return String((BigInt(Date.parse(iso) - 1420070400000) << 22n));
|
|
}
|
|
|
|
async function main() {
|
|
const [channelId, guildId, after, before] = process.argv.slice(2);
|
|
if (!channelId || !guildId) {
|
|
console.error("usage: live-count.ts <channelId> <guildId> [afterIso] [beforeIso]");
|
|
process.exit(1);
|
|
}
|
|
|
|
const config = loadSlopbotConfig();
|
|
if (!config.enabled) {
|
|
console.error("slopbot disabled: set VESKSLOP_SLOPBOT_ENABLED=1 and a token");
|
|
process.exit(1);
|
|
}
|
|
|
|
const client = await startSlopbot(config);
|
|
try {
|
|
const query = new URLSearchParams({ channel_id: channelId, limit: "1" });
|
|
if (after) query.set("min_id", snowflakeFromIso(after));
|
|
if (before) query.set("max_id", snowflakeFromIso(before));
|
|
|
|
for (const [label, path] of [
|
|
["guild", `/guilds/${guildId}/messages/search`],
|
|
["channel", `/channels/${channelId}/messages/search`]
|
|
] as const) {
|
|
try {
|
|
const data = (await client.rest.get(path, { query })) as Record<string, unknown>;
|
|
console.log(`${label}: total_results=${String(data?.total_results)} keys=${Object.keys(data ?? {}).join(",")}`);
|
|
} catch (error) {
|
|
console.log(`${label}: error ${(error as Error).message}`);
|
|
}
|
|
}
|
|
} finally {
|
|
await stopSlopbot(client);
|
|
}
|
|
}
|
|
|
|
void main();
|