@axw_/koishi-plugin-markdown-to-image-service
Version:
一个功能强大的 Markdown 转图片服务,支持丰富的语法和主题,并能处理来自 NapCat 等适配器的文件上传。
69 lines (68 loc) • 4.3 kB
TypeScript
import { Context, Schema, Service } from 'koishi';
export declare const inject: {
required: string[];
};
export declare const name = "markdown-to-image-service";
export declare const usage = "## \u4F7F\u7528\u65B9\u5F0F\n\n1. **\u76F4\u63A5\u4E0A\u4F20\u6587\u4EF6**: \u5728\u804A\u5929\u4E2D\u76F4\u63A5\u53D1\u9001\u4E00\u4E2A `.md` \u6587\u4EF6\uFF0C\u673A\u5668\u4EBA\u4F1A\u81EA\u52A8\u5C06\u5176\u8F6C\u6362\u4E3A\u56FE\u7247\u3002\n2. **\u4F7F\u7528\u6307\u4EE4**: \u8F93\u5165 `markdown <\u4F60\u7684MD\u6587\u672C>` \u6765\u8F6C\u6362\u7EAF\u6587\u672C\u5185\u5BB9\u3002\n\n---\n### Docker/WSL \u7528\u6237\uFF08\u91CD\u8981\uFF01\uFF09\n\u5982\u679C\u60A8\u7684 Koishi \u548C OneBot \u5B9E\u73B0\uFF08\u5982 NapCat\uFF09\u5728\u4E0D\u540C\u7684 Docker \u5BB9\u5668\u4E2D\uFF0C\u60A8 **\u5FC5\u987B** \u914D\u7F6E\u201C\u8DE8\u73AF\u5883\u8DEF\u5F84\u6620\u5C04\u8BBE\u7F6E\u201D\uFF0C\u5426\u5219**\u65E0\u6CD5\u5904\u7406\u4E0A\u4F20\u7684\u6587\u4EF6**\u3002\n\n- **\u5BB9\u5668\u5185\u8DEF\u5F84\u524D\u7F00**: \u586B\u5165 NapCat \u8FD4\u56DE\u7684\u8DEF\u5F84\u524D\u7F00\uFF0C\u4F8B\u5982 `/app/.config/QQ/NapCat/temp`\n- **\u4E3B\u673A/Koishi\u5BB9\u5668\u8DEF\u5F84\u524D\u7F00**: \u586B\u5165\u4E0E\u4E0A\u8FF0\u8DEF\u5F84\u5BF9\u5E94\u7684\u3001Koishi \u53EF\u4EE5\u8BBF\u95EE\u7684\u8DEF\u5F84\uFF0C\u4F8B\u5982 `/koishi/data/shared_files`\n";
export interface Config {
width: number;
height: number;
deviceScaleFactor: number;
waitUntil: "load" | "domcontentloaded" | "networkidle0" | "networkidle2";
timeout: number;
enableAutoCacheClear: boolean;
enableRunAllCodeChunks: boolean;
defaultImageFormat: "png" | "jpeg" | "webp";
mermaidTheme: 'default' | 'dark' | 'forest';
codeBlockTheme: "auto.css" | "default.css" | "atom-dark.css" | "atom-light.css" | "atom-material.css" | "coy.css" | "darcula.css" | "dark.css" | "funky.css" | "github.css" | "github-dark.css" | "hopscotch.css" | "monokai.css" | "okaidia.css" | "one-dark.css" | "one-light.css" | "pen-paper-coffee.css" | "pojoaque.css" | "solarized-dark.css" | "solarized-light.css" | "twilight.css" | "vue.css" | "vs.css" | "xonokai.css";
previewTheme: "atom-dark.css" | "atom-light.css" | "atom-material.css" | "github-dark.css" | "github-light.css" | "gothic.css" | "medium.css" | "monokai.css" | "newsprint.css" | "night.css" | "none.css" | "one-dark.css" | "one-light.css" | "solarized-dark.css" | "solarized-light.css" | "vue.css";
revealjsTheme: "beige.css" | "black.css" | "blood.css" | "league.css" | "moon.css" | "night.css" | "serif.css" | "simple.css" | "sky.css" | "solarized.css" | "white.css" | "none.css";
breakOnSingleNewLine: boolean;
enableLinkify: boolean;
enableWikiLinkSyntax: boolean;
enableEmojiSyntax: boolean;
enableExtendedTableSyntax: boolean;
enableCriticMarkupSyntax: boolean;
frontMatterRenderingOption: 'none' | 'table' | 'code';
enableScriptExecution: boolean;
enableHTML5Embed: boolean;
HTML5EmbedUseImageSyntax: boolean;
HTML5EmbedUseLinkSyntax: boolean;
HTML5EmbedIsAllowedHttp: boolean;
HTML5EmbedAudioAttributes: string;
HTML5EmbedVideoAttributes: string;
mathRenderingOption: "KaTeX" | "MathJax" | "None";
mathInlineDelimiters: [string, string][];
mathBlockDelimiters: [string, string][];
mathRenderingOnlineService: string;
mathjaxV3ScriptSrc: string;
enableOffline: boolean;
printBackground: boolean;
chromePath: string;
puppeteerArgs: string[];
protocolsWhiteList: string;
containerPathPrefix?: string;
hostPathPrefix?: string;
}
export declare const Config: Schema<Config>;
declare module 'koishi' {
interface Context {
markdownToImage: MarkdownToImageService;
}
}
declare class MarkdownToImageService extends Service {
private readonly config;
private browser;
private loggerForService;
private readonly notebookDirPath;
private notebook;
constructor(ctx: Context, config: Config);
private initBrowser;
private initNotebook;
private ensureDirExists;
private getCurrentTimeNumberString;
private generateAndRenderImage;
convertToImage(markdownText: string): Promise<Buffer>;
}
export declare function apply(ctx: Context, config: Config): Promise<void>;
export {};