UNPKG

koishi-plugin-lo-terr

Version:

泰拉瑞亚主题答题插件,支持视频转GIF、网页渲染等多功能

601 lines (600 loc) 25.7 kB
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>>; }>>; }>>;