import * as e621 from "./api/e621"; import * as mastodon from "./api/mastodon"; import config from "./config"; import * as cliArgs from 'ts-command-line-args'; const args = cliArgs.parse<{ id?: number; help?: boolean; }>( { id: { type: Number, optional: true }, help: { type: Boolean, optional: true, alias: 'h' }, }, { helpArg: 'help', }, ); async function postRandomPicture() { console.log("Fetching random post..."); const { queryIndex, post } = await e621.getRandomPost(); console.log(`Got ${post.id} via query ${queryIndex}`); await handlePost(post); } async function postSpecificPicture(id: number) { console.log("Fetching post ${id}..."); const post = await e621.getPost(id); console.log(`Got ${post.id}`); await handlePost(post); } async function handlePost(post: e621.Post) { const source = post.sources.length ? post.sources[0] : undefined; const cws = config.cw.filter((w) => post.tags.general.includes(w)); console.log(`Downloading image...`); const file = await e621.client.get(post.file.url).buffer(); console.log(`Uploading...`); const attachment = await mastodon.upload(file, post.id.toString(10)); console.log(`Posting status...`); const status = await mastodon.createStatus(`https://e926.net/posts/${post.id}`, source, cws, attachment.id); console.log(`Done! ${status.url}`); } (async () => { if (!config.mastodon.token) { console.error("MASTODON_TOKEN not set"); return; } if (args.id) { await postSpecificPicture(args.id); } else { await postRandomPicture(); } })();