UNPKG

e621-sdk

Version:

从E621抓取帖子。支持搜索、引用、随机。

102 lines (101 loc) 3.84 kB
#!/usr/bin/env node "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const commander_1 = require("commander"); const package_json_1 = __importDefault(require("../../package.json")); const client_1 = require("../client"); const parser_1 = require("../parser"); const fs_1 = __importDefault(require("fs")); const chalk_template_1 = __importDefault(require("chalk-template")); const utils_1 = require("../utils"); const client = new client_1.E621(); client.configureAxios({ headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0" } }); commander_1.program.hook("preAction", () => { const opts = commander_1.program.opts(); client.log = opts.debug; if (opts.image) { client.addImage("cli", opts.image, true); } }); commander_1.program .option("-d, --debug", "是否开启调试模式") .option("-i, --image <image>", "镜像URL"); commander_1.program .name(package_json_1.default.name) .description(package_json_1.default.description) .version(package_json_1.default.version); commander_1.program.command("search <tags>") .description("搜索帖子") .option("-l, --limit <limit>", "限制") .option("-p, --page <page>", "页码") .action(async (tags, options) => { try { const posts = await client.searchPost({ tags: (0, parser_1.toSearchTag)(...tags?.split(",") ?? []), limit: options.limit, page: options.page, }); posts.forEach((post) => { console.log(post.formatted); }); } catch (err) { console.error("Failed to connect E621:", err.message); } }); commander_1.program.command("fetch <id>") .description("获取指定帖子") .action(async (id) => { try { const post = await client.fetchPost(id); console.log(post.formatted); } catch (err) { console.error("Failed to connect E621:", err.message); } }); commander_1.program.command("random") .description("随机获取帖子") .option("-t, --tags <tags>", "标签") .action(async (options) => { try { const post = await client.randomPost(...options.tags?.split(",") ?? []); console.log(post.formatted); } catch (err) { console.error("Failed to connect E621:", err.message); } }); commander_1.program.command("static <md5> <ext>") .description("获取静态资源") .requiredOption("-o, --output <output>", "输出路径") .action(async (md5, ext, options) => { try { const data = await client.static(md5, ext, e => { process.stdout.write((0, utils_1.progressBar)(e.percent) + "\r"); }); console.log(""); fs_1.default.writeFileSync(options.output, Buffer.from(data)); console.log((0, chalk_template_1.default) `${(0, parser_1.formatArrayBuffer)(data, `${(0, parser_1.truncate)(md5, 4)}${ext}`)} : {italic ${options.output}}`); } catch (err) { console.error("Failed to connect E621:", err.message); } }); commander_1.program.command("status") .description("获取服务器状态") .action(async () => { const { status, message } = await client.serverStatus(); console.log((0, chalk_template_1.default) `E621服务器状态:{bold.${status ? "green" : "red"} ${status ? "在线" : "离线"}}`); if (message) { console.log((0, chalk_template_1.default) `{bold.yellow ${message}}`); } }); commander_1.program.parse(process.argv);