UNPKG

koishi-plugin-emojiluna

Version:

Smart emoji management plugin with AI categorization

83 lines (82 loc) 3.8 kB
import { Context, Service } from 'koishi'; import { Config } from '../config'; import { UploadManager } from '../storage'; import { AIAnalyzeResult, AICategorizeResult, AIImageFilterResult, AITaskDetail, Category, CategorySearchOptions, EmojiAddOptions, EmojiItem, EmojiSearchOptions, FolderImportOptions, FolderImportResult, FolderScanResult, PaginatedResult, TagInfo, TagSearchOptions } from '../types'; export declare class EmojiLunaService extends Service { config: Config; private _emojiStorage; private _categories; private _isInitialized; private _readyPromise; private _readyResolve; private _isDisposed; private _uploadManager; private _aiAnalyzer; constructor(ctx: Context, config: Config); get ready(): Promise<void>; get uploadManager(): UploadManager; private initializeStorage; get isInitialized(): boolean; categorizeEmoji(imageBase64: string): Promise<AICategorizeResult | null>; analyzeEmoji(imageBase64: string): Promise<AIAnalyzeResult | null>; filterImageByType(imageBase64: string): Promise<AIImageFilterResult | null>; addEmoji(options: EmojiAddOptions, source: Buffer | { path: string; }, aiAnalysis?: boolean): Promise<EmojiItem>; addEmojis(emojis: { options: EmojiAddOptions; buffer: Buffer; }[], aiAnalysis: boolean): Promise<EmojiItem[]>; getEmojiByName(name: string): Promise<EmojiItem | null>; getEmojisByName(name: string): Promise<EmojiItem[]>; getEmojiById(id: string): Promise<EmojiItem | null>; private filterEmojis; getEmojiList(options?: EmojiSearchOptions): Promise<EmojiItem[]>; getEmojiPage(options?: EmojiSearchOptions): Promise<PaginatedResult<EmojiItem>>; searchEmoji(keyword: string): Promise<EmojiItem[]>; deleteEmoji(id: string): Promise<boolean>; deleteAllEmojis(): Promise<boolean>; updateEmojiInfo(id: string, updates: Partial<Pick<EmojiItem, 'name' | 'category' | 'tags'>>): Promise<boolean>; updateEmojiName(id: string, name: string): Promise<boolean>; updateEmojiTags(id: string, tags: string[]): Promise<boolean>; updateEmojiCategory(id: string, category: string): Promise<boolean>; addCategory(name: string, description?: string): Promise<Category>; getCategories(): Promise<Category[]>; getCategoriesPage(options?: CategorySearchOptions): Promise<PaginatedResult<Category>>; getCategoryByName(name: string): Promise<Category | null>; deleteCategory(id: string, deleteEmojis?: boolean): Promise<boolean>; cleanupEmptyCategories(): Promise<number>; private buildTagUsageMap; getAllTags(): Promise<string[]>; getTagsPage(options?: TagSearchOptions): Promise<PaginatedResult<TagInfo>>; cleanupEmptyTags(): Promise<number>; categorizeExistingEmojis(): Promise<{ success: number; failed: number; }>; private static readonly SUPPORTED_EXTENSIONS; scanFolder(folderPath: string): Promise<FolderScanResult>; private scanFolderRecursive; private emojiNameExists; importFromFolder(options: FolderImportOptions): Promise<FolderImportResult>; private updateCategoryEmojiCount; private loadEmojis; private loadCategories; getEmojiCount(): number; getCategoryCount(): number; getAiTaskStats(): Promise<{ pending: number; processing: number; succeeded: number; failed: number; paused: boolean; }>; getFailedAiEmojiIds(): Promise<string[]>; setAiPaused(paused: boolean): void; retryFailedTasks(): Promise<number>; reanalyzeBatch(ids: string[]): Promise<number>; getAiTasksAll(): Promise<AITaskDetail[]>; deleteAiTask(emojiId: string): Promise<void>; retryAiTask(emojiId: string): Promise<void>; static inject: string[]; }