koishi-plugin-lo-terr
Version:
泰拉瑞亚主题答题插件,支持视频转GIF、网页渲染等多功能
601 lines (600 loc) • 25.7 kB
TypeScript
import { Context, Schema } from 'koishi';
export declare const name = "lo-terr";
export declare function apply(ctx: Context, config?: Config): void;
export interface Config {
cardWidth?: number;
padding?: number;
optionHeight?: number;
titleHeight?: number;
lineHeight?: number;
theme?: 'light' | 'dark';
primaryColor?: string;
accentColor?: string;
fontFamily?: string;
titleEmoji?: string;
titleText?: string;
hintText?: string;
backgroundImage?: string;
backgroundOpacity?: number;
customCSS?: string;
questions?: {
source?: 'file' | 'builtin' | 'api';
filePath?: string;
apiUrl?: string;
categories?: string[];
difficulty?: 'easy' | 'medium' | 'hard' | 'all';
count?: number;
shuffle?: boolean;
};
checkIn?: {
enabled?: boolean;
points?: {
base?: number;
streakBonus?: number;
maxStreakBonus?: number;
};
messages?: {
success?: string;
alreadyDone?: string;
firstTime?: string;
};
};
webRender?: {
defaultWidth?: number;
defaultHeight?: number;
timeout?: number;
userAgent?: string;
allowedDomains?: string[];
blockedDomains?: string[];
maxFileSize?: number;
};
messages?: {
noPermission?: string;
noQuestions?: string;
invalidAnswer?: string;
correctAnswer?: string;
wrongAnswer?: string;
noCurrentQuestion?: string;
statsHeader?: string;
profileHeader?: string;
};
profileCard?: {
width?: number;
height?: number;
padding?: number;
theme?: 'blue' | 'green' | 'purple' | 'dark' | 'custom';
primaryColor?: string;
secondaryColor?: string;
accentColor?: string;
borderRadius?: number;
borderColor?: string;
cardBg?: string;
cardBgEnd?: string;
fontFamily?: string;
nameFontSize?: number;
levelFontSize?: number;
statsFontSize?: number;
showAvatar?: boolean;
showStats?: boolean;
};
profile?: {
defaultAvatar?: string;
defaultName?: string;
levelNames?: string[];
backgrounds?: string[];
showStats?: boolean;
showHistory?: boolean;
};
permissions?: {
enabled?: boolean;
mode?: 'whitelist' | 'blacklist';
groups?: string[];
users?: string[];
commands?: {
[key: string]: {
enabled?: boolean;
mode?: 'whitelist' | 'blacklist';
groups?: string[];
users?: string[];
};
};
};
videoToGif?: {
enabled?: boolean;
maxDuration?: number;
fps?: number;
width?: number;
quality?: number;
maxFileSize?: number;
tempDir?: string;
allowedFormats?: string[];
watermark?: {
enabled?: boolean;
text?: string;
position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'center';
opacity?: number;
fontSize?: number;
};
};
}
export declare const Config: Schema<Schemastery.ObjectS<{
cardWidth: Schema<number, number>;
padding: Schema<number, number>;
optionHeight: Schema<number, number>;
titleHeight: Schema<number, number>;
lineHeight: Schema<number, number>;
theme: Schema<"light" | "dark", "light" | "dark">;
primaryColor: Schema<string, string>;
accentColor: Schema<string, string>;
fontFamily: Schema<string, string>;
titleEmoji: Schema<string, string>;
titleText: Schema<string, string>;
hintText: Schema<string, string>;
backgroundImage: Schema<string, string>;
backgroundOpacity: Schema<number, number>;
customCSS: Schema<string, string>;
questions: Schema<Schemastery.ObjectS<{
source: Schema<"file" | "builtin" | "api", "file" | "builtin" | "api">;
filePath: Schema<string, string>;
apiUrl: Schema<string, string>;
categories: Schema<string[], string[]>;
difficulty: Schema<"easy" | "medium" | "hard" | "all", "easy" | "medium" | "hard" | "all">;
count: Schema<number, number>;
shuffle: Schema<boolean, boolean>;
}>, Schemastery.ObjectT<{
source: Schema<"file" | "builtin" | "api", "file" | "builtin" | "api">;
filePath: Schema<string, string>;
apiUrl: Schema<string, string>;
categories: Schema<string[], string[]>;
difficulty: Schema<"easy" | "medium" | "hard" | "all", "easy" | "medium" | "hard" | "all">;
count: Schema<number, number>;
shuffle: Schema<boolean, boolean>;
}>>;
checkIn: Schema<Schemastery.ObjectS<{
enabled: Schema<boolean, boolean>;
points: Schema<Schemastery.ObjectS<{
base: Schema<number, number>;
streakBonus: Schema<number, number>;
maxStreakBonus: Schema<number, number>;
}>, Schemastery.ObjectT<{
base: Schema<number, number>;
streakBonus: Schema<number, number>;
maxStreakBonus: Schema<number, number>;
}>>;
messages: Schema<Schemastery.ObjectS<{
success: Schema<string, string>;
alreadyDone: Schema<string, string>;
firstTime: Schema<string, string>;
}>, Schemastery.ObjectT<{
success: Schema<string, string>;
alreadyDone: Schema<string, string>;
firstTime: Schema<string, string>;
}>>;
}>, Schemastery.ObjectT<{
enabled: Schema<boolean, boolean>;
points: Schema<Schemastery.ObjectS<{
base: Schema<number, number>;
streakBonus: Schema<number, number>;
maxStreakBonus: Schema<number, number>;
}>, Schemastery.ObjectT<{
base: Schema<number, number>;
streakBonus: Schema<number, number>;
maxStreakBonus: Schema<number, number>;
}>>;
messages: Schema<Schemastery.ObjectS<{
success: Schema<string, string>;
alreadyDone: Schema<string, string>;
firstTime: Schema<string, string>;
}>, Schemastery.ObjectT<{
success: Schema<string, string>;
alreadyDone: Schema<string, string>;
firstTime: Schema<string, string>;
}>>;
}>>;
webRender: Schema<Schemastery.ObjectS<{
defaultWidth: Schema<number, number>;
defaultHeight: Schema<number, number>;
timeout: Schema<number, number>;
userAgent: Schema<string, string>;
allowedDomains: Schema<string[], string[]>;
blockedDomains: Schema<string[], string[]>;
maxFileSize: Schema<number, number>;
}>, Schemastery.ObjectT<{
defaultWidth: Schema<number, number>;
defaultHeight: Schema<number, number>;
timeout: Schema<number, number>;
userAgent: Schema<string, string>;
allowedDomains: Schema<string[], string[]>;
blockedDomains: Schema<string[], string[]>;
maxFileSize: Schema<number, number>;
}>>;
videoToGif: Schema<Schemastery.ObjectS<{
enabled: Schema<boolean, boolean>;
maxDuration: Schema<number, number>;
fps: Schema<number, number>;
width: Schema<number, number>;
quality: Schema<number, number>;
maxFileSize: Schema<number, number>;
tempDir: Schema<string, string>;
allowedFormats: Schema<string[], string[]>;
watermark: Schema<Schemastery.ObjectS<{
enabled: Schema<boolean, boolean>;
text: Schema<string, string>;
position: Schema<"top-left" | "top-right" | "bottom-left" | "bottom-right" | "center", "top-left" | "top-right" | "bottom-left" | "bottom-right" | "center">;
opacity: Schema<number, number>;
fontSize: Schema<number, number>;
}>, Schemastery.ObjectT<{
enabled: Schema<boolean, boolean>;
text: Schema<string, string>;
position: Schema<"top-left" | "top-right" | "bottom-left" | "bottom-right" | "center", "top-left" | "top-right" | "bottom-left" | "bottom-right" | "center">;
opacity: Schema<number, number>;
fontSize: Schema<number, number>;
}>>;
}>, Schemastery.ObjectT<{
enabled: Schema<boolean, boolean>;
maxDuration: Schema<number, number>;
fps: Schema<number, number>;
width: Schema<number, number>;
quality: Schema<number, number>;
maxFileSize: Schema<number, number>;
tempDir: Schema<string, string>;
allowedFormats: Schema<string[], string[]>;
watermark: Schema<Schemastery.ObjectS<{
enabled: Schema<boolean, boolean>;
text: Schema<string, string>;
position: Schema<"top-left" | "top-right" | "bottom-left" | "bottom-right" | "center", "top-left" | "top-right" | "bottom-left" | "bottom-right" | "center">;
opacity: Schema<number, number>;
fontSize: Schema<number, number>;
}>, Schemastery.ObjectT<{
enabled: Schema<boolean, boolean>;
text: Schema<string, string>;
position: Schema<"top-left" | "top-right" | "bottom-left" | "bottom-right" | "center", "top-left" | "top-right" | "bottom-left" | "bottom-right" | "center">;
opacity: Schema<number, number>;
fontSize: Schema<number, number>;
}>>;
}>>;
messages: Schema<Schemastery.ObjectS<{
noPermission: Schema<string, string>;
noQuestions: Schema<string, string>;
invalidAnswer: Schema<string, string>;
correctAnswer: Schema<string, string>;
wrongAnswer: Schema<string, string>;
noCurrentQuestion: Schema<string, string>;
statsHeader: Schema<string, string>;
profileHeader: Schema<string, string>;
}>, Schemastery.ObjectT<{
noPermission: Schema<string, string>;
noQuestions: Schema<string, string>;
invalidAnswer: Schema<string, string>;
correctAnswer: Schema<string, string>;
wrongAnswer: Schema<string, string>;
noCurrentQuestion: Schema<string, string>;
statsHeader: Schema<string, string>;
profileHeader: Schema<string, string>;
}>>;
profileCard: Schema<Schemastery.ObjectS<{
width: Schema<number, number>;
height: Schema<number, number>;
padding: Schema<number, number>;
theme: Schema<"dark" | "blue" | "green" | "purple" | "custom", "dark" | "blue" | "green" | "purple" | "custom">;
primaryColor: Schema<string, string>;
secondaryColor: Schema<string, string>;
accentColor: Schema<string, string>;
borderRadius: Schema<number, number>;
borderColor: Schema<string, string>;
cardBg: Schema<string, string>;
cardBgEnd: Schema<string, string>;
fontFamily: Schema<string, string>;
nameFontSize: Schema<number, number>;
levelFontSize: Schema<number, number>;
statsFontSize: Schema<number, number>;
showAvatar: Schema<boolean, boolean>;
showStats: Schema<boolean, boolean>;
}>, Schemastery.ObjectT<{
width: Schema<number, number>;
height: Schema<number, number>;
padding: Schema<number, number>;
theme: Schema<"dark" | "blue" | "green" | "purple" | "custom", "dark" | "blue" | "green" | "purple" | "custom">;
primaryColor: Schema<string, string>;
secondaryColor: Schema<string, string>;
accentColor: Schema<string, string>;
borderRadius: Schema<number, number>;
borderColor: Schema<string, string>;
cardBg: Schema<string, string>;
cardBgEnd: Schema<string, string>;
fontFamily: Schema<string, string>;
nameFontSize: Schema<number, number>;
levelFontSize: Schema<number, number>;
statsFontSize: Schema<number, number>;
showAvatar: Schema<boolean, boolean>;
showStats: Schema<boolean, boolean>;
}>>;
profile: Schema<Schemastery.ObjectS<{
defaultAvatar: Schema<string, string>;
defaultName: Schema<string, string>;
levelNames: Schema<string[], string[]>;
backgrounds: Schema<string[], string[]>;
showStats: Schema<boolean, boolean>;
showHistory: Schema<boolean, boolean>;
}>, Schemastery.ObjectT<{
defaultAvatar: Schema<string, string>;
defaultName: Schema<string, string>;
levelNames: Schema<string[], string[]>;
backgrounds: Schema<string[], string[]>;
showStats: Schema<boolean, boolean>;
showHistory: Schema<boolean, boolean>;
}>>;
permissions: Schema<Schemastery.ObjectS<{
enabled: Schema<boolean, boolean>;
mode: Schema<"whitelist" | "blacklist", "whitelist" | "blacklist">;
groups: Schema<string[], string[]>;
users: Schema<string[], string[]>;
commands: Schema<import("cosmokit").Dict<Schemastery.ObjectS<{
enabled: Schema<boolean, boolean>;
mode: Schema<"whitelist" | "blacklist", "whitelist" | "blacklist">;
groups: Schema<string[], string[]>;
users: Schema<string[], string[]>;
}>, string>, import("cosmokit").Dict<Schemastery.ObjectT<{
enabled: Schema<boolean, boolean>;
mode: Schema<"whitelist" | "blacklist", "whitelist" | "blacklist">;
groups: Schema<string[], string[]>;
users: Schema<string[], string[]>;
}>, string>>;
}>, Schemastery.ObjectT<{
enabled: Schema<boolean, boolean>;
mode: Schema<"whitelist" | "blacklist", "whitelist" | "blacklist">;
groups: Schema<string[], string[]>;
users: Schema<string[], string[]>;
commands: Schema<import("cosmokit").Dict<Schemastery.ObjectS<{
enabled: Schema<boolean, boolean>;
mode: Schema<"whitelist" | "blacklist", "whitelist" | "blacklist">;
groups: Schema<string[], string[]>;
users: Schema<string[], string[]>;
}>, string>, import("cosmokit").Dict<Schemastery.ObjectT<{
enabled: Schema<boolean, boolean>;
mode: Schema<"whitelist" | "blacklist", "whitelist" | "blacklist">;
groups: Schema<string[], string[]>;
users: Schema<string[], string[]>;
}>, string>>;
}>>;
}>, Schemastery.ObjectT<{
cardWidth: Schema<number, number>;
padding: Schema<number, number>;
optionHeight: Schema<number, number>;
titleHeight: Schema<number, number>;
lineHeight: Schema<number, number>;
theme: Schema<"light" | "dark", "light" | "dark">;
primaryColor: Schema<string, string>;
accentColor: Schema<string, string>;
fontFamily: Schema<string, string>;
titleEmoji: Schema<string, string>;
titleText: Schema<string, string>;
hintText: Schema<string, string>;
backgroundImage: Schema<string, string>;
backgroundOpacity: Schema<number, number>;
customCSS: Schema<string, string>;
questions: Schema<Schemastery.ObjectS<{
source: Schema<"file" | "builtin" | "api", "file" | "builtin" | "api">;
filePath: Schema<string, string>;
apiUrl: Schema<string, string>;
categories: Schema<string[], string[]>;
difficulty: Schema<"easy" | "medium" | "hard" | "all", "easy" | "medium" | "hard" | "all">;
count: Schema<number, number>;
shuffle: Schema<boolean, boolean>;
}>, Schemastery.ObjectT<{
source: Schema<"file" | "builtin" | "api", "file" | "builtin" | "api">;
filePath: Schema<string, string>;
apiUrl: Schema<string, string>;
categories: Schema<string[], string[]>;
difficulty: Schema<"easy" | "medium" | "hard" | "all", "easy" | "medium" | "hard" | "all">;
count: Schema<number, number>;
shuffle: Schema<boolean, boolean>;
}>>;
checkIn: Schema<Schemastery.ObjectS<{
enabled: Schema<boolean, boolean>;
points: Schema<Schemastery.ObjectS<{
base: Schema<number, number>;
streakBonus: Schema<number, number>;
maxStreakBonus: Schema<number, number>;
}>, Schemastery.ObjectT<{
base: Schema<number, number>;
streakBonus: Schema<number, number>;
maxStreakBonus: Schema<number, number>;
}>>;
messages: Schema<Schemastery.ObjectS<{
success: Schema<string, string>;
alreadyDone: Schema<string, string>;
firstTime: Schema<string, string>;
}>, Schemastery.ObjectT<{
success: Schema<string, string>;
alreadyDone: Schema<string, string>;
firstTime: Schema<string, string>;
}>>;
}>, Schemastery.ObjectT<{
enabled: Schema<boolean, boolean>;
points: Schema<Schemastery.ObjectS<{
base: Schema<number, number>;
streakBonus: Schema<number, number>;
maxStreakBonus: Schema<number, number>;
}>, Schemastery.ObjectT<{
base: Schema<number, number>;
streakBonus: Schema<number, number>;
maxStreakBonus: Schema<number, number>;
}>>;
messages: Schema<Schemastery.ObjectS<{
success: Schema<string, string>;
alreadyDone: Schema<string, string>;
firstTime: Schema<string, string>;
}>, Schemastery.ObjectT<{
success: Schema<string, string>;
alreadyDone: Schema<string, string>;
firstTime: Schema<string, string>;
}>>;
}>>;
webRender: Schema<Schemastery.ObjectS<{
defaultWidth: Schema<number, number>;
defaultHeight: Schema<number, number>;
timeout: Schema<number, number>;
userAgent: Schema<string, string>;
allowedDomains: Schema<string[], string[]>;
blockedDomains: Schema<string[], string[]>;
maxFileSize: Schema<number, number>;
}>, Schemastery.ObjectT<{
defaultWidth: Schema<number, number>;
defaultHeight: Schema<number, number>;
timeout: Schema<number, number>;
userAgent: Schema<string, string>;
allowedDomains: Schema<string[], string[]>;
blockedDomains: Schema<string[], string[]>;
maxFileSize: Schema<number, number>;
}>>;
videoToGif: Schema<Schemastery.ObjectS<{
enabled: Schema<boolean, boolean>;
maxDuration: Schema<number, number>;
fps: Schema<number, number>;
width: Schema<number, number>;
quality: Schema<number, number>;
maxFileSize: Schema<number, number>;
tempDir: Schema<string, string>;
allowedFormats: Schema<string[], string[]>;
watermark: Schema<Schemastery.ObjectS<{
enabled: Schema<boolean, boolean>;
text: Schema<string, string>;
position: Schema<"top-left" | "top-right" | "bottom-left" | "bottom-right" | "center", "top-left" | "top-right" | "bottom-left" | "bottom-right" | "center">;
opacity: Schema<number, number>;
fontSize: Schema<number, number>;
}>, Schemastery.ObjectT<{
enabled: Schema<boolean, boolean>;
text: Schema<string, string>;
position: Schema<"top-left" | "top-right" | "bottom-left" | "bottom-right" | "center", "top-left" | "top-right" | "bottom-left" | "bottom-right" | "center">;
opacity: Schema<number, number>;
fontSize: Schema<number, number>;
}>>;
}>, Schemastery.ObjectT<{
enabled: Schema<boolean, boolean>;
maxDuration: Schema<number, number>;
fps: Schema<number, number>;
width: Schema<number, number>;
quality: Schema<number, number>;
maxFileSize: Schema<number, number>;
tempDir: Schema<string, string>;
allowedFormats: Schema<string[], string[]>;
watermark: Schema<Schemastery.ObjectS<{
enabled: Schema<boolean, boolean>;
text: Schema<string, string>;
position: Schema<"top-left" | "top-right" | "bottom-left" | "bottom-right" | "center", "top-left" | "top-right" | "bottom-left" | "bottom-right" | "center">;
opacity: Schema<number, number>;
fontSize: Schema<number, number>;
}>, Schemastery.ObjectT<{
enabled: Schema<boolean, boolean>;
text: Schema<string, string>;
position: Schema<"top-left" | "top-right" | "bottom-left" | "bottom-right" | "center", "top-left" | "top-right" | "bottom-left" | "bottom-right" | "center">;
opacity: Schema<number, number>;
fontSize: Schema<number, number>;
}>>;
}>>;
messages: Schema<Schemastery.ObjectS<{
noPermission: Schema<string, string>;
noQuestions: Schema<string, string>;
invalidAnswer: Schema<string, string>;
correctAnswer: Schema<string, string>;
wrongAnswer: Schema<string, string>;
noCurrentQuestion: Schema<string, string>;
statsHeader: Schema<string, string>;
profileHeader: Schema<string, string>;
}>, Schemastery.ObjectT<{
noPermission: Schema<string, string>;
noQuestions: Schema<string, string>;
invalidAnswer: Schema<string, string>;
correctAnswer: Schema<string, string>;
wrongAnswer: Schema<string, string>;
noCurrentQuestion: Schema<string, string>;
statsHeader: Schema<string, string>;
profileHeader: Schema<string, string>;
}>>;
profileCard: Schema<Schemastery.ObjectS<{
width: Schema<number, number>;
height: Schema<number, number>;
padding: Schema<number, number>;
theme: Schema<"dark" | "blue" | "green" | "purple" | "custom", "dark" | "blue" | "green" | "purple" | "custom">;
primaryColor: Schema<string, string>;
secondaryColor: Schema<string, string>;
accentColor: Schema<string, string>;
borderRadius: Schema<number, number>;
borderColor: Schema<string, string>;
cardBg: Schema<string, string>;
cardBgEnd: Schema<string, string>;
fontFamily: Schema<string, string>;
nameFontSize: Schema<number, number>;
levelFontSize: Schema<number, number>;
statsFontSize: Schema<number, number>;
showAvatar: Schema<boolean, boolean>;
showStats: Schema<boolean, boolean>;
}>, Schemastery.ObjectT<{
width: Schema<number, number>;
height: Schema<number, number>;
padding: Schema<number, number>;
theme: Schema<"dark" | "blue" | "green" | "purple" | "custom", "dark" | "blue" | "green" | "purple" | "custom">;
primaryColor: Schema<string, string>;
secondaryColor: Schema<string, string>;
accentColor: Schema<string, string>;
borderRadius: Schema<number, number>;
borderColor: Schema<string, string>;
cardBg: Schema<string, string>;
cardBgEnd: Schema<string, string>;
fontFamily: Schema<string, string>;
nameFontSize: Schema<number, number>;
levelFontSize: Schema<number, number>;
statsFontSize: Schema<number, number>;
showAvatar: Schema<boolean, boolean>;
showStats: Schema<boolean, boolean>;
}>>;
profile: Schema<Schemastery.ObjectS<{
defaultAvatar: Schema<string, string>;
defaultName: Schema<string, string>;
levelNames: Schema<string[], string[]>;
backgrounds: Schema<string[], string[]>;
showStats: Schema<boolean, boolean>;
showHistory: Schema<boolean, boolean>;
}>, Schemastery.ObjectT<{
defaultAvatar: Schema<string, string>;
defaultName: Schema<string, string>;
levelNames: Schema<string[], string[]>;
backgrounds: Schema<string[], string[]>;
showStats: Schema<boolean, boolean>;
showHistory: Schema<boolean, boolean>;
}>>;
permissions: Schema<Schemastery.ObjectS<{
enabled: Schema<boolean, boolean>;
mode: Schema<"whitelist" | "blacklist", "whitelist" | "blacklist">;
groups: Schema<string[], string[]>;
users: Schema<string[], string[]>;
commands: Schema<import("cosmokit").Dict<Schemastery.ObjectS<{
enabled: Schema<boolean, boolean>;
mode: Schema<"whitelist" | "blacklist", "whitelist" | "blacklist">;
groups: Schema<string[], string[]>;
users: Schema<string[], string[]>;
}>, string>, import("cosmokit").Dict<Schemastery.ObjectT<{
enabled: Schema<boolean, boolean>;
mode: Schema<"whitelist" | "blacklist", "whitelist" | "blacklist">;
groups: Schema<string[], string[]>;
users: Schema<string[], string[]>;
}>, string>>;
}>, Schemastery.ObjectT<{
enabled: Schema<boolean, boolean>;
mode: Schema<"whitelist" | "blacklist", "whitelist" | "blacklist">;
groups: Schema<string[], string[]>;
users: Schema<string[], string[]>;
commands: Schema<import("cosmokit").Dict<Schemastery.ObjectS<{
enabled: Schema<boolean, boolean>;
mode: Schema<"whitelist" | "blacklist", "whitelist" | "blacklist">;
groups: Schema<string[], string[]>;
users: Schema<string[], string[]>;
}>, string>, import("cosmokit").Dict<Schemastery.ObjectT<{
enabled: Schema<boolean, boolean>;
mode: Schema<"whitelist" | "blacklist", "whitelist" | "blacklist">;
groups: Schema<string[], string[]>;
users: Schema<string[], string[]>;
}>, string>>;
}>>;
}>>;