UNPKG

koishi-plugin-emojiluna

Version:

Smart emoji management plugin with AI categorization

183 lines (182 loc) 5.76 kB
export interface EmojiItem { id: string; name: string; category: string; path: string; size: number; mimeType: string; createdAt: Date; tags: string[]; } export interface Category { id: string; name: string; description?: string; emojiCount: number; createdAt: Date; } export interface EmojiSearchOptions { keyword?: string; category?: string; tags?: string[]; limit?: number; offset?: number; } export interface CategorySearchOptions { keyword?: string; limit?: number; offset?: number; } export interface TagInfo { name: string; usage: number; } export interface TagSearchOptions { keyword?: string; limit?: number; offset?: number; } export interface PaginatedResult<T> { items: T[]; total: number; limit: number; offset: number; } export interface EmojiAddOptions { name: string; category?: string; tags?: string[]; description?: string; imageData?: string; } export interface AICategorizeResult { category: string; confidence: number; reason: string; newCategory?: string; } export interface AIAnalyzeResult { name: string; category: string; tags: string[]; description: string; newCategory?: string; } export interface AITaskDetail { id: string; emojiId: string; name?: string; status: 'pending' | 'processing' | 'succeeded' | 'failed'; error?: string; createdAt: number; } /** * Options for importing emojis from a local folder */ export interface FolderImportOptions { folderPath: string; useSubfoldersAsCategories: boolean; defaultCategory?: string; recursive: boolean; aiAnalysis: boolean; skipExisting: boolean; } /** * Result of a folder import operation */ export interface FolderImportResult { success: boolean; imported: number; skipped: number; failed: number; errors: string[]; importedEmojis: EmojiItem[]; } /** * Information about a scanned folder */ export interface FolderScanResult { folderPath: string; files: ScannedFile[]; subfolders: string[]; totalFiles: number; } /** * Information about a scanned file */ export interface ScannedFile { path: string; name: string; category: string; size: number; } /** * 图片内容类型(用于过滤无用图片) */ export type ImageContentType = 'emoji' | 'sticker' | 'meme' | 'comic' | 'anime' | 'pet' | 'food' | 'scenery' | 'selfie' | 'screenshot_system' | 'screenshot_game' | 'screenshot_chat' | 'screenshot_video' | 'screenshot_web' | 'photo_people' | 'photo_product' | 'artwork' | 'text_only' | 'qrcode' | 'advertisement' | 'document' | 'diagram' | 'news' | 'logo' | 'nsfw' | 'low_quality' | 'other'; /** * 所有可用的图片类型列表 */ export declare const IMAGE_CONTENT_TYPES: { type: ImageContentType; label: string; description: string; }[]; /** * 默认接受的图片类型(适合作为表情包的类型) */ export declare const DEFAULT_ACCEPTED_IMAGE_TYPES: ImageContentType[]; /** * AI 图片类型过滤结果 */ export interface AIImageFilterResult { imageType: ImageContentType; isAcceptable: boolean; confidence: number; reason: string; } declare module '@koishijs/console' { interface Events { 'emojiluna/getEmojiList': (options?: EmojiSearchOptions) => Promise<EmojiItem[]>; 'emojiluna/getEmojiPage': (options?: EmojiSearchOptions) => Promise<PaginatedResult<EmojiItem>>; 'emojiluna/searchEmoji': (keyword: string) => Promise<EmojiItem[]>; 'emojiluna/getCategories': () => Promise<Category[]>; 'emojiluna/getCategoriesPage': (options?: CategorySearchOptions) => Promise<PaginatedResult<Category>>; 'emojiluna/getAllTags': () => Promise<string[]>; 'emojiluna/getTagsPage': (options?: TagSearchOptions) => Promise<PaginatedResult<TagInfo>>; 'emojiluna/updateEmojiName': (id: string, name: string) => Promise<boolean>; 'emojiluna/updateEmojiTags': (id: string, tags: string[]) => Promise<boolean>; 'emojiluna/updateEmojiCategory': (id: string, category: string) => Promise<boolean>; 'emojiluna/deleteEmoji': (id: string) => Promise<boolean>; 'emojiluna/addCategory': (name: string, description: string) => Promise<Category>; 'emojiluna/deleteCategory': (id: string) => Promise<boolean>; 'emojiluna/cleanupEmptyCategories': () => Promise<number>; 'emojiluna/cleanupEmptyTags': () => Promise<number>; 'emojiluna/addEmoji': (emojiData: EmojiAddOptions) => Promise<EmojiItem>; 'emojiluna/getBaseUrl': () => Promise<string>; 'emojiluna/getUploadToken': () => Promise<string>; 'emojiluna/analyzeEmoji': (emojiId: string) => Promise<{ success: boolean; updates?: string[]; result?: AIAnalyzeResult; oldData?: { name: string; category: string; tags: string[]; }; newData?: { name: string; category: string; tags: string[]; description: string; }; message?: string; }>; 'emojiluna/addEmojis': (emojis: EmojiAddOptions[], aiAnalysis: boolean) => Promise<EmojiItem[]>; 'emojiluna/getAiTasksAll': () => Promise<AITaskDetail[]>; 'emojiluna/deleteAiTask': (emojiId: string) => Promise<void>; 'emojiluna/retryAiTask': (emojiId: string) => Promise<void>; 'emojiluna/scanFolder': (folderPath: string) => Promise<FolderScanResult>; 'emojiluna/importFromFolder': (options: FolderImportOptions) => Promise<FolderImportResult>; } }