koishi-plugin-markdown-to-image-service
Version:
Koishi 的 Markdown 转图片服务插件。支持 LaTeX、Mermaid、代码高亮等。
63 lines (62 loc) • 3.07 kB
TypeScript
import { Context, Schema, Service } from "koishi";
export declare const inject: {
required: string[];
optional: string[];
};
export declare const name = "markdown-to-image-service";
export declare const usage = "## \u547D\u4EE4\n\n### `markdownToImage [markdownText:text]`\n\n\u5C06 Markdown \u6587\u672C\u8F6C\u6362\u4E3A\u56FE\u7247\u3002\n\n- **\u7528\u6CD5 1**\uFF1A`markdownToImage # Hello World`\n- **\u7528\u6CD5 2**\uFF1A\u76F4\u63A5\u8F93\u5165 `markdownToImage`\uFF0C\u6839\u636E\u63D0\u793A\u8F93\u5165 Markdown \u5185\u5BB9\u3002\n\n## \u670D\u52A1\n\n\u672C\u63D2\u4EF6\u63D0\u4F9B `markdownToImage` \u670D\u52A1\uFF0C\u4F9B\u5176\u4ED6\u63D2\u4EF6\u8C03\u7528\u3002\n\n```typescript\nctx.markdownToImage.convertToImage(markdownText: string): Promise<Buffer>\n```\n\n### \u793A\u4F8B\n\n```typescript\nimport { Context, h } from 'koishi'\nimport {} from 'koishi-plugin-markdown-to-image-service'\n\nexport const inject = {\n required: ['markdownToImage'],\n}\n\nexport function apply(ctx: Context) {\n ctx.command('test-md', '\u6D4B\u8BD5 Markdown \u56FE\u7247\u8F6C\u6362')\n .action(async ({ session }) => {\n const markdown = `\n# Hello, Koishi\n\nThis is a test.\n\n- LaTeX: $E=mc^2$\n- Code:\n \\`\\`\\`typescript\n console.log('Hello, world!')\n \\`\\`\\`\n- Mermaid:\n \\`\\`\\`mermaid\n graph TD;\n A-->B;\n A-->C;\n B-->D;\n C-->D;\n \\`\\`\\`\n`\n const imageBuffer = await ctx.markdownToImage.convertToImage(markdown)\n return h.image(imageBuffer, 'image/png')\n })\n}\n```\n\n## QQ \u7FA4\n\n- `956758505`\n";
interface ThemeSettings {
pageTheme: "light" | "dark";
codeTheme: string;
mermaidTheme: "default" | "dark" | "forest" | "neutral";
}
declare const themePresets: Record<string, ThemeSettings>;
/**
* 渲染相关的配置
*/
interface RenderingConfig {
width: number;
height: number;
deviceScaleFactor: number;
defaultImageFormat: "png" | "jpeg" | "webp";
waitUntil: "load" | "domcontentloaded" | "networkidle0" | "networkidle2";
}
/**
* 自定义主题的详细配置
*/
interface CustomThemeSettings {
pageTheme: "light" | "dark";
codeTheme: string;
mermaidTheme: "default" | "dark" | "forest" | "neutral";
}
/**
* 主题配置,可以是预设模式或自定义模式
*/
type ThemeConfig = {
mode: "preset";
preset: keyof typeof themePresets;
} | {
mode: "custom";
custom: CustomThemeSettings;
};
export interface Config {
rendering: RenderingConfig;
theme: ThemeConfig;
}
export declare const Config: Schema<Config>;
declare module "koishi" {
interface Context {
markdownToImage: MarkdownToImageService;
}
}
declare class MarkdownToImageService extends Service {
readonly config: Config;
private loggerForService;
private md;
constructor(ctx: Context, config: Config);
private getThemeSettings;
private buildHtml;
convertToImage(markdownText: string): Promise<Buffer>;
}
export declare function apply(ctx: Context, config: Config): Promise<void>;
export {};