diff --git a/konabot/plugins/memepack/__init__.py b/konabot/plugins/memepack/__init__.py index eee9712..a958d51 100644 --- a/konabot/plugins/memepack/__init__.py +++ b/konabot/plugins/memepack/__init__.py @@ -4,6 +4,7 @@ from nonebot_plugin_alconna import (Alconna, Args, Field, MultiVar, UniMessage, on_alconna) from konabot.plugins.memepack.drawing.geimao import draw_geimao +from konabot.plugins.memepack.drawing.pt import draw_pt geimao = on_alconna(Alconna( "给猫说", @@ -19,3 +20,19 @@ async def _(saying: list[str]): img.save(img_bytes, format="PNG") await geimao.send(await UniMessage().image(raw=img_bytes).export()) + + +pt = on_alconna(Alconna( + "pt说", + Args["saying", MultiVar(str, '+'), Field( + missing_tips=lambda: "你没有写小帕说了什么" + )] +), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"小帕说"}) + +@pt.handle() +async def _(saying: list[str]): + img = await draw_pt("\n".join(saying)) + img_bytes = BytesIO() + img.save(img_bytes, format="PNG") + + await pt.send(await UniMessage().image(raw=img_bytes).export()) diff --git a/konabot/plugins/memepack/assets/HarmonyOS_Sans_SC_Regular.ttf b/konabot/plugins/memepack/assets/HarmonyOS_Sans_SC_Regular.ttf new file mode 100644 index 0000000..aff150a Binary files /dev/null and b/konabot/plugins/memepack/assets/HarmonyOS_Sans_SC_Regular.ttf differ diff --git a/konabot/plugins/memepack/assets/NotoColorEmoji-Regular.ttf b/konabot/plugins/memepack/assets/NotoColorEmoji-Regular.ttf new file mode 100644 index 0000000..5d7a86f Binary files /dev/null and b/konabot/plugins/memepack/assets/NotoColorEmoji-Regular.ttf differ diff --git a/konabot/plugins/memepack/assets/ptsay.png b/konabot/plugins/memepack/assets/ptsay.png new file mode 100644 index 0000000..0f60159 Binary files /dev/null and b/konabot/plugins/memepack/assets/ptsay.png differ diff --git a/konabot/plugins/memepack/drawing/base/fonts.py b/konabot/plugins/memepack/drawing/base/fonts.py index c4a69da..586411d 100644 --- a/konabot/plugins/memepack/drawing/base/fonts.py +++ b/konabot/plugins/memepack/drawing/base/fonts.py @@ -1,6 +1,12 @@ -from imagetext_py import FontDB +from imagetext_py import EmojiOptions, FontDB -from .path import assets +from .path import ASSETS + +FontDB.LoadFromDir(str(ASSETS)) + +FontDB.SetDefaultEmojiOptions(EmojiOptions( + parse_shortcodes=False, +)) -FontDB.LoadFromDir(str(assets)) HARMONYOS_SANS_SC_BLACK = FontDB.Query("HarmonyOS_Sans_SC_Black") +HARMONYOS_SANS_SC_REGULAR = FontDB.Query("HarmonyOS_Sans_SC_Regular") diff --git a/konabot/plugins/memepack/drawing/base/path.py b/konabot/plugins/memepack/drawing/base/path.py index 553cf95..004cdc7 100644 --- a/konabot/plugins/memepack/drawing/base/path.py +++ b/konabot/plugins/memepack/drawing/base/path.py @@ -1,3 +1,3 @@ from pathlib import Path -assets = Path(__file__).parent.parent.parent / "assets" +ASSETS = Path(__file__).parent.parent.parent / "assets" diff --git a/konabot/plugins/memepack/drawing/geimao.py b/konabot/plugins/memepack/drawing/geimao.py index 28b1928..a66d22b 100644 --- a/konabot/plugins/memepack/drawing/geimao.py +++ b/konabot/plugins/memepack/drawing/geimao.py @@ -5,9 +5,9 @@ import imagetext_py import PIL.Image from .base.fonts import HARMONYOS_SANS_SC_BLACK -from .base.path import assets +from .base.path import ASSETS -geimao_image = PIL.Image.open(assets / "geimao.jpg").convert("RGBA") +geimao_image = PIL.Image.open(ASSETS / "geimao.jpg").convert("RGBA") def _draw_geimao(saying: str): @@ -20,6 +20,7 @@ def _draw_geimao(saying: str): imagetext_py.TextAlign.Center, cast(Any, 30.0), imagetext_py.Paint.Color(imagetext_py.Color.from_hex("FFFFFFFF")), + draw_emojis=True, ) return img diff --git a/konabot/plugins/memepack/drawing/pt.py b/konabot/plugins/memepack/drawing/pt.py new file mode 100644 index 0000000..fe4795f --- /dev/null +++ b/konabot/plugins/memepack/drawing/pt.py @@ -0,0 +1,26 @@ +import asyncio + +import imagetext_py +import PIL.Image + +from .base.fonts import HARMONYOS_SANS_SC_REGULAR +from .base.path import ASSETS + +pt_image = PIL.Image.open(ASSETS / "ptsay.png").convert("RGBA") + + +def _draw_pt(saying: str): + img = pt_image.copy() + with imagetext_py.Writer(img) as iw: + iw.draw_text_wrapped( + saying, 259, 278, 0.5, 0.5, 360, 48, HARMONYOS_SANS_SC_REGULAR, + imagetext_py.Paint.Color(imagetext_py.Color.from_hex("000000FF")), + 1.0, + imagetext_py.TextAlign.Center, + draw_emojis=True, + ) + return img + + +async def draw_pt(saying: str): + return await asyncio.to_thread(_draw_pt, saying)