diff --git a/konabot/docs/user/k8x12S.txt b/konabot/docs/user/k8x12S.txt new file mode 100644 index 0000000..8707949 --- /dev/null +++ b/konabot/docs/user/k8x12S.txt @@ -0,0 +1,10 @@ +# 指令介绍 + +根据文字生成 k8x12S + +> 「现在还不知道k8x12S是什么的可以开除界隈籍了」—— Louis, 2025/12/31 + +## 使用指南 + +`k8x12S 安心をしてください` + diff --git a/konabot/plugins/k8x12S/__init__.py b/konabot/plugins/k8x12S/__init__.py new file mode 100644 index 0000000..76b64d4 --- /dev/null +++ b/konabot/plugins/k8x12S/__init__.py @@ -0,0 +1,46 @@ +import re +from nonebot import on_message +from nonebot.rule import StartswithRule +from nonebot_plugin_alconna import At, Text, UniMessage, UniMsg + +from konabot.common.longtask import DepLongTaskTarget +from konabot.common.web_render import konaweb +from konabot.common.web_render.core import WebRenderer + + +evt = on_message(rule=StartswithRule(("k8x12s",), True)) +rule = re.compile(r"^[kK]8[xX]12[sS] ?(.+)$") + + +@evt.handle() +async def _(msg: UniMsg, target: DepLongTaskTarget): + if len(msg.include(Text, At)) != len(msg): + return + + text = msg.extract_plain_text() + result = re.match(rule, text) + if result is None: + return + + obj: str | None = result.group(1) + if obj is None: + return + + img = await render_with_web_renderer(obj) + await target.send_message(UniMessage.image(raw=img)) + + +async def render_with_web_renderer(text: str) -> bytes: + async def page_function(page): + await page.wait_for_selector('textarea[name=content]') + await page.locator('textarea[name=content]').fill(text) + + out = await WebRenderer.render_with_persistent_page( + "markdown_renderer", + konaweb('k8x12S'), + target='#main', + other_function=page_function, + ) + return out + + diff --git a/scripts/watch_filter.py b/scripts/watch_filter.py index d02dd1c..9554e41 100644 --- a/scripts/watch_filter.py +++ b/scripts/watch_filter.py @@ -12,5 +12,8 @@ def filter(change: Change, path: str) -> bool: return False if Path(path).absolute().is_relative_to((base / ".git").absolute()): return False + if Path(path).absolute().is_relative_to((base / "assets" / "oracle" / "image").absolute()): + # 还要解决坏枪的这个问题 + return False print(path) return True