e621-sdk
Version:
从E621抓取帖子。支持搜索、引用、随机。
102 lines (101 loc) • 3.84 kB
JavaScript
;
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);