koishi-plugin-emojiluna
Version:
Smart emoji management plugin with AI categorization
72 lines (71 loc) • 2.02 kB
TypeScript
import { Context } from 'koishi';
import { Config } from '../config';
import { ImageMetadata } from '../image';
export interface ImageInfo {
buffer: Buffer;
size: number;
hash: string;
metadata: ImageMetadata;
}
export interface FrameFeatures {
hash: string;
histogram: number[];
}
export interface ImageFeatures {
frames: FrameFeatures[];
aspectRatio: number;
dimensions: {
width: number;
height: number;
};
frameCount: number;
}
export interface FrequencyRecord {
hash: string;
timestamps: number[];
groupId: string;
}
export declare class AutoCollector {
private ctx;
private config;
private imageFeatures;
private frequencyTracker;
private featuresReady;
private static readonly MAX_HASHES;
private static readonly FREQUENCY_WINDOW;
private static readonly SIMILARITY_FRAME_SAMPLES;
private static readonly HASH_WIDTH;
private static readonly HASH_HEIGHT;
private static readonly HISTOGRAM_WIDTH;
private static readonly HISTOGRAM_HEIGHT;
private static readonly HISTOGRAM_BINS;
private groupAutoCollectLimit;
constructor(ctx: Context, config: Config);
private loadExistingFeatures;
private checkHitLimit;
private registerCommands;
start(): void;
private shouldProcessMessage;
private trackImageFrequency;
private cleanupFrequencyTracker;
private processImage;
private getImageInfo;
private checkFileSize;
private extractImageFeatures;
private calculateDifferenceHash;
private calculateHistogramFromPixels;
private hammingDistance;
private histogramSimilarity;
private calculateSimilarityScore;
private calculateFrameSetSimilarity;
private calculateFrameSimilarity;
private calculateDimensionSimilarity;
private isSimilarToExisting;
private saveEmoji;
private getDuplicateReason;
getStats(): {
featureCount: number;
frequencyRecords: number;
isEnabled: boolean;
};
}