discord-image-utils
Version:
A powerful library for generating and modifying images with Discord.js - includes meme generation, filters, effects and animations
214 lines (213 loc) • 5.57 kB
TypeScript
/** @format */
export type ImageInput = string | Buffer;
export type HexColor = `#${string}`;
export type RGBColor = `rgb(${number}, ${number}, ${number})`;
export type RGBAColor = `rgba(${number}, ${number}, ${number}, ${number})`;
export type Color = HexColor | RGBColor | RGBAColor | string;
export interface Position {
x: number;
y: number;
}
export interface Dimensions {
width: number;
height: number;
}
export interface Rectangle extends Position, Dimensions {
}
export type FilterLevel = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
export interface FilterOptions {
level?: FilterLevel;
quality?: number;
}
export interface ProgressBarOptions {
color?: Color;
backgroundColor?: Color;
borderColor?: Color;
borderWidth?: number;
height?: number;
}
export interface TimeOptions {
currentTime: number;
totalTime: number;
}
export interface MusicImageOptions {
title: string;
artist: string;
album?: string;
image: ImageInput;
time?: TimeOptions;
progressBar?: ProgressBarOptions;
}
export type GradientType = "linear" | "radial";
export type PatternType = "dots" | "lines" | "grid" | "waves" | "chevron";
export interface GradientOptions {
type: GradientType;
colors: Color[];
}
export interface PatternOptions {
type: PatternType;
opacity?: number;
scale?: number;
}
export interface QuoteResponse {
quote: string;
author: string;
gradient?: GradientOptions;
pattern?: PatternOptions;
}
export type WelcomeTheme = 'default' | 'dark' | 'light' | 'colorful' | 'minimal' | 'tech';
export interface WelcomeCardCustomization {
textColor?: Color;
borderColor?: Color;
backgroundColor?: Color;
avatarBorderColor?: Color;
font?: string;
fontSize?: number;
}
export interface WelcomeCardOptions {
username: string;
avatar: ImageInput;
servername?: string;
memberCount?: number;
background?: ImageInput;
theme?: WelcomeTheme;
message?: string;
customization?: WelcomeCardCustomization;
}
export interface LevelCardOptions {
username: string;
avatar: ImageInput;
level: number;
currentXP: number;
requiredXP: number;
rank?: number;
background?: ImageInput;
theme?: WelcomeTheme;
customization?: WelcomeCardCustomization;
}
export interface GifOptions {
frameDelay?: number;
quality?: number;
frameCount?: number;
}
export interface TriggeredOptions extends GifOptions {
intensity?: FilterLevel;
}
export interface BlinkOptions extends GifOptions {
blinkDuration?: number;
}
export interface WantedOptions {
currency?: string;
amount?: number;
}
export interface MemeTextOptions {
text: string;
font?: string;
fontSize?: number;
color?: Color;
strokeColor?: Color;
strokeWidth?: number;
position?: Position;
}
export interface MemeOptions {
topText?: string | MemeTextOptions;
bottomText?: string | MemeTextOptions;
font?: string;
fontSize?: number;
textColor?: Color;
strokeColor?: Color;
strokeWidth?: number;
}
export interface CanvasOptions {
width: number;
height: number;
backgroundColor?: Color;
quality?: number;
}
export interface AnimationOptions {
duration?: number;
fps?: number;
loop?: boolean;
easing?: 'linear' | 'ease-in' | 'ease-out' | 'ease-in-out';
}
export interface BlurOptions extends FilterOptions {
radius?: number;
sigma?: number;
}
export interface PixelateOptions extends FilterOptions {
size?: number;
}
export interface WaveOptions extends FilterOptions {
amplitude?: number;
frequency?: number;
direction?: 'horizontal' | 'vertical' | 'both';
}
export interface GlitchOptions extends FilterOptions {
iterations?: number;
quality?: number;
seed?: number;
}
export interface TextOptions {
text: string;
font?: string;
fontSize?: number;
color?: Color;
backgroundColor?: Color;
padding?: number;
borderRadius?: number;
maxWidth?: number;
lineHeight?: number;
align?: 'left' | 'center' | 'right';
verticalAlign?: 'top' | 'middle' | 'bottom';
}
export interface ValidationOptions {
required?: boolean;
type?: string;
min?: number;
max?: number;
minLength?: number;
maxLength?: number;
pattern?: RegExp;
custom?: (value: any) => boolean | string;
}
export interface ErrorDetails {
[key: string]: any;
}
export interface ErrorOptions {
code?: string;
statusCode?: number;
details?: ErrorDetails;
}
export interface NetworkOptions {
timeout?: number;
retries?: number;
retryDelay?: number;
headers?: Record<string, string>;
userAgent?: string;
}
export interface ProcessingOptions {
quality?: number;
format?: 'png' | 'jpg' | 'jpeg' | 'gif' | 'webp';
progressive?: boolean;
optimize?: boolean;
}
export type DeepPartial<T> = {
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
};
export type RequiredFields<T, K extends keyof T> = T & Required<Pick<T, K>>;
export type OptionalFields<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
export interface OperationResult<T = Buffer> {
success: boolean;
data?: T;
error?: string;
details?: ErrorDetails;
}
export interface AsyncOperationResult<T = Buffer> extends Promise<OperationResult<T>> {
}
export interface ModuleConfig {
logLevel?: 'debug' | 'info' | 'warn' | 'error';
defaultTimeout?: number;
maxRetries?: number;
cacheEnabled?: boolean;
cacheTTL?: number;
}