koishi-plugin-hhs-huatu
Version:
Generate images by diffusion models
63 lines (62 loc) • 2.17 kB
TypeScript
import { Context, Dict, Session } from 'koishi';
import { Config } from './config';
import { MembershipSystem } from './membershipSystem';
export interface TaskQueueItem {
session: Session<'authority', never, Context>;
options: any;
input: string;
resolve: (value: any) => void;
reject: (reason: any) => void;
isRedraw?: boolean;
}
export declare class QueueSystem {
private ctx;
private config;
private generateImageFn;
taskQueue: TaskQueueItem[];
processingTasks: number;
userTasks: Dict<number>;
userCooldowns: Dict<number>;
userLastTask: Dict<{
session: Session<'authority'>;
options: any;
input: string;
pointsCost?: number;
}>;
private lastRedrawTime;
private usedTokenIndices;
private redrawLock;
private redrawWaitQueue;
maxConcurrentTasks: number;
private membershipSystem;
private tokenPool;
constructor(ctx: Context, config: Config, generateImageFn: (session: Session<'authority'>, options: any, input: string) => Promise<any>, membershipSystem?: MembershipSystem, initialTokenUsage?: Dict<boolean>);
acquireRedrawLock(): Promise<void>;
releaseRedrawLock(): void;
getUniqueTokenIndex(currentIndex: number, tokenCount: number): number;
private acquireTokenIndex;
private releaseTokenIndex;
borrowTokenIndex(): number | null;
returnTokenIndex(index: number): void;
processQueue(): Promise<void>;
addTask(task: TaskQueueItem): Promise<any>;
getQueueStatus(userId: string): {
totalWaiting: number;
userQueue: number;
};
canAddTask(userId: string): {
canAdd: boolean;
message?: string;
};
incrementUserTask(userId: string, count?: number): void;
resetUserQueue(userId: string): void;
saveLastTask(userId: string, session: Session<'authority'>, options: any, input: string, pointsCost?: number): void;
getLastTask(userId: string): {
session: Session<'authority'>;
options: any;
input: string;
pointsCost?: number;
} | undefined;
getLastRedrawTime(): number;
setLastRedrawTime(time: number): void;
}