UNPKG

koishi-plugin-emojiluna

Version:

Smart emoji management plugin with AI categorization

97 lines (96 loc) 4.17 kB
import { Context, Service } from 'koishi'; import { Config } from './config'; 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 static readonly AI_FRAME_SAMPLES; private _emojiStorage; private _categories; private _model; private _isInitialized; private _readyPromise; private _readyResolve; private _isDisposed; private _uploadManager; constructor(ctx: Context, config: Config); get ready(): Promise<void>; private initializeStorage; get isInitialized(): boolean; initializeAI(): Promise<void>; private parseAIResult; private buildAIImages; categorizeEmoji(imageBase64: string): Promise<AICategorizeResult | null>; analyzeEmoji(imageBase64: string): Promise<AIAnalyzeResult | null>; filterImageByType(imageBase64: string): Promise<AIImageFilterResult | null>; private calculateFileHash; addEmojiFromPath(options: EmojiAddOptions, sourcePath: string, aiAnalysis?: boolean): Promise<EmojiItem>; addEmoji(options: EmojiAddOptions, imageData: Buffer, aiAnalysis?: boolean): Promise<EmojiItem>; addEmojis(emojis: { options: EmojiAddOptions; buffer: Buffer; }[], aiAnalysis: boolean): Promise<EmojiItem[]>; private runAiAnalysisInBackground; private updateEmojiInfo; getEmojiByName(name: string): Promise<EmojiItem | null>; getEmojisByName(name: string): Promise<EmojiItem[]>; categorizeExistingEmojis(): Promise<{ success: number; failed: number; }>; private filterEmojis; getEmojiList(options?: EmojiSearchOptions): Promise<EmojiItem[]>; getEmojiPage(options?: EmojiSearchOptions): Promise<PaginatedResult<EmojiItem>>; searchEmoji(keyword: string): Promise<EmojiItem[]>; getEmojiById(id: string): Promise<EmojiItem | null>; deleteEmoji(id: string): Promise<boolean>; deleteAllEmojis(): 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>; getAllTags(): Promise<string[]>; getTagsPage(options?: TagSearchOptions): Promise<PaginatedResult<TagInfo>>; cleanupEmptyCategories(): Promise<number>; cleanupEmptyTags(): Promise<number>; updateEmojiTags(id: string, tags: string[]): Promise<boolean>; updateEmojiName(id: string, name: string): Promise<boolean>; updateEmojiCategory(id: string, category: string): Promise<boolean>; private loadEmojis; private loadCategories; getEmojiCount(): number; getCategoryCount(): number; private static readonly SUPPORTED_EXTENSIONS; /** * Scan a folder and return information about its contents */ scanFolder(folderPath: string): Promise<FolderScanResult>; /** * Recursively scan a folder and collect all image files */ private scanFolderRecursive; /** * Check if an emoji with the same name already exists */ private emojiNameExists; /** * Import emojis from a local folder */ importFromFolder(options: FolderImportOptions): Promise<FolderImportResult>; private updateCategoryEmojiCount; 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[]; }