@re621/zestyapi
Version:
Comprehensive JS wrapper for e621.net API
175 lines (156 loc) • 4.61 kB
text/typescript
import APIResponse from "./APIResponse";
export default interface APIPost extends APIResponse {
id: number;
created_at: string;
updated_at: string;
file: {
width: number;
height: number;
ext: string;
size: number;
md5: string;
url: string;
};
preview: {
width: number;
height: number;
url: string;
};
sample: {
has: boolean;
height: number;
width: number;
url: string;
};
score: {
up: number;
down: number;
total: number;
};
tags: {
general: string[];
species: string[];
character: string[];
copyright: string[];
artist: string[];
invalid: string[];
lore: string[];
meta: string[];
};
locked_tags: string[];
change_seq: number;
flags: {
pending: boolean;
flagged: boolean;
note_locked: boolean;
status_locked: boolean;
rating_locked: boolean;
deleted: boolean;
};
rating: "s" | "q" | "e";
fav_count: number;
sources: string[];
pools: number[];
relationships: {
parent_id: number;
has_children: boolean;
has_active_children: boolean;
children: number[];
};
approver_id: number;
uploader_id: number;
description: string;
comment_count: number;
is_favorited: boolean;
has_notes: boolean;
duration: number;
}
export namespace APIPost {
export function getTags(post: APIPost): string[] {
return [
...post.tags.artist,
...post.tags.character,
...post.tags.copyright,
...post.tags.general,
...post.tags.invalid,
...post.tags.lore,
...post.tags.meta,
...post.tags.species
];
}
export function getTagString(post: APIPost): string {
return APIPost.getTags(post).join(" ");
}
export function getTagSet(post: APIPost): Set<string> {
return new Set(APIPost.getTags(post));
}
}
/*
// Post Rating
export enum PostRating {
Safe = "s",
Questionable = "q",
Explicit = "e"
}
export namespace PostRating {
const ratingRef = {
"s": PostRating.Safe,
"safe": PostRating.Safe,
"q": PostRating.Questionable,
"questionable": PostRating.Questionable,
"e": PostRating.Explicit,
"explicit": PostRating.Explicit,
};
export function fromValue(value: string): PostRating {
return ratingRef[value.toLowerCase()];
}
export function toString(postRating: PostRating): string {
for (const key of Object.keys(PostRating)) {
if (PostRating[key] === postRating) {
return key;
}
}
return undefined;
}
export function toFullString(postRating: PostRating): string {
switch (postRating.toLowerCase()) {
case "s": return "safe";
case "q": return "questionable";
case "e": return "explicit";
}
return null;
}
}
*/
// Post Flag
/*
export enum PostFlag {
Pending = "pending", // Post in the mod queue that has not been approved / disapproved yet
Flagged = "flagged", // Post that has been flagged for moderation - duplicate, DNP, etc
Deleted = "deleted", // Post that has been deleted. Indicates that the image file will return `null`
// Locked
NoteLocked = "note_locked",
StatusLocked = "status_locked",
RatingLocked = "rating_locked",
}
export namespace PostFlag {
export function get(post: APIPost): PostFlag[] {
const flags: PostFlag[] = [];
if (post.flags.deleted) flags.push(PostFlag.Deleted);
if (post.flags.flagged) flags.push(PostFlag.Flagged);
if (post.flags.pending) flags.push(PostFlag.Pending);
return flags;
}
export function getString(post: APIPost): string {
return PostFlag.get(post).join(" ");
}
export function fromString(input: string): Set<PostFlag> {
const parts = new Set(input.split(" "));
const flags: Set<PostFlag> = new Set();
if (parts.has("deleted")) flags.add(PostFlag.Deleted);
if (parts.has("flagged")) flags.add(PostFlag.Flagged);
if (parts.has("pending")) flags.add(PostFlag.Pending);
return flags;
}
}
*/