Enhancement: 为 man 和 textfx 指令添加图片渲染和文本 fallback #54

Merged
Passthem merged 4 commits from enhancement/man-and-textfx into master 2026-02-25 16:26:13 +08:00
2 changed files with 13 additions and 9 deletions
Showing only changes of commit 27841b8422 - Show all commits

View File

@ -5,6 +5,7 @@ import nonebot.adapters
import nonebot.rule
from nonebot import on_command
from nonebot_plugin_alconna import Alconna, Args, UniMessage, on_alconna
import playwright.async_api
from konabot.common.nb.is_admin import is_admin
from konabot.common.path import DOCS_PATH_MAN1, DOCS_PATH_MAN3, DOCS_PATH_MAN7, DOCS_PATH_MAN8
@ -87,7 +88,7 @@ async def _(
return
mans_dict: dict[tuple[int, str], Path] = {}
for section in section_set:
mans_dict: dict[tuple[int, str], Path] = {**mans_dict, **search_man(section)}
mans_dict = {**mans_dict, **search_man(section)}
mans_dict_2 = {key[1]: val for key, val in mans_dict.items()}
mans_fp = mans_dict_2.get(doc.lower())
if mans_fp is None:
@ -95,8 +96,12 @@ async def _(
return
mans_msg = mans_fp.read_text('utf-8', 'replace')
# await man.send(UniMessage().text(mans_msg))
img = await MarkDownCore.render_markdown(mans_msg)
await man.send(UniMessage.image(raw=img))
try:
img = await MarkDownCore.render_markdown(mans_msg)
await man.send(UniMessage.image(raw=img))
except playwright.async_api.Error:
# 图片渲染出错,改成发纯文本
await man.send(UniMessage.text(mans_msg))
help_deprecated = on_command('help', rule=nonebot.rule.to_me())

View File

@ -1,5 +1,4 @@
from loguru import logger
from playwright.async_api import ConsoleMessage, Page
from playwright.async_api import Page
from konabot.common.web_render import konaweb
from konabot.common.web_render.core import WebRenderer
@ -12,7 +11,7 @@ class MarkDownCore:
await page.locator('textarea[name=content]').fill(markdown_text)
await page.locator('#button').click()
# 等待 checkState 函数加载完成
await page.wait_for_function("typeof checkState === 'function'", timeout=1000)
# 访问 checkState 函数,确保渲染完成
@ -27,7 +26,7 @@ class MarkDownCore:
)
return out
@staticmethod
async def render_latex(text: str, theme: str = "dark") -> bytes:
params = {
@ -40,7 +39,7 @@ class MarkDownCore:
await page.locator('textarea[name=content]').fill(f"$$ {text} $$")
page.wait_for_selector('#button')
await page.locator('#button').click()
# 等待 checkState 函数加载完成
await page.wait_for_function("typeof checkState === 'function'", timeout=2000)
# 访问 checkState 函数,确保渲染完成
@ -54,4 +53,4 @@ class MarkDownCore:
params=params
)
return out
return out