diff --git a/assets/fonts/LXGWWenKai-Regular.ttf b/assets/fonts/LXGWWenKai-Regular.ttf new file mode 100644 index 0000000..14d3810 Binary files /dev/null and b/assets/fonts/LXGWWenKai-Regular.ttf differ diff --git a/assets/img/meme/dss.png b/assets/img/meme/dss.png new file mode 100644 index 0000000..742040f Binary files /dev/null and b/assets/img/meme/dss.png differ diff --git a/assets/img/meme/mnksay.jpg b/assets/img/meme/mnksay.jpg new file mode 100644 index 0000000..2859a71 Binary files /dev/null and b/assets/img/meme/mnksay.jpg differ diff --git a/assets/img/meme/suanleba.png b/assets/img/meme/suanleba.png new file mode 100644 index 0000000..7f96b84 Binary files /dev/null and b/assets/img/meme/suanleba.png differ diff --git a/konabot/plugins/memepack/__init__.py b/konabot/plugins/memepack/__init__.py index a958d51..9dff667 100644 --- a/konabot/plugins/memepack/__init__.py +++ b/konabot/plugins/memepack/__init__.py @@ -3,8 +3,7 @@ from io import BytesIO 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 +from konabot.plugins.memepack.drawing.saying import draw_geimao, draw_mnk, draw_pt, draw_suan geimao = on_alconna(Alconna( "给猫说", @@ -36,3 +35,51 @@ async def _(saying: list[str]): img.save(img_bytes, format="PNG") await pt.send(await UniMessage().image(raw=img_bytes).export()) + + +mnk = on_alconna(Alconna( + "re:小?黑白子?说", + Args["saying", MultiVar(str, '+'), Field( + missing_tips=lambda: "你没有写黑白子说了什么" + )] +), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases={"mnk说"}) + +@mnk.handle() +async def _(saying: list[str]): + img = await draw_mnk("\n".join(saying)) + img_bytes = BytesIO() + img.save(img_bytes, format="PNG") + + await pt.send(await UniMessage().image(raw=img_bytes).export()) + + +suan = on_alconna(Alconna( + "小蒜说", + Args["saying", MultiVar(str, '+'), Field( + missing_tips=lambda: "你没有写小蒜说了什么" + )] +), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases=set()) + +@suan.handle() +async def _(saying: list[str]): + img = await draw_suan("\n".join(saying)) + img_bytes = BytesIO() + img.save(img_bytes, format="PNG") + + await pt.send(await UniMessage().image(raw=img_bytes).export()) + + +dsuan = on_alconna(Alconna( + "大蒜说", + Args["saying", MultiVar(str, '+'), Field( + missing_tips=lambda: "你没有写大蒜说了什么" + )] +), use_cmd_start=True, use_cmd_sep=False, skip_for_unmatch=False, aliases=set()) + +@dsuan.handle() +async def _(saying: list[str]): + img = await draw_suan("\n".join(saying), True) + 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/drawing/base/fonts.py b/konabot/plugins/memepack/drawing/base/fonts.py index 538dc6b..3cd8e4e 100644 --- a/konabot/plugins/memepack/drawing/base/fonts.py +++ b/konabot/plugins/memepack/drawing/base/fonts.py @@ -10,3 +10,4 @@ FontDB.SetDefaultEmojiOptions(EmojiOptions( HARMONYOS_SANS_SC_BLACK = FontDB.Query("HarmonyOS_Sans_SC_Black") HARMONYOS_SANS_SC_REGULAR = FontDB.Query("HarmonyOS_Sans_SC_Regular") +LXGWWENKAI_REGULAR = FontDB.Query("LXGWWenKai-Regular") diff --git a/konabot/plugins/memepack/drawing/geimao.py b/konabot/plugins/memepack/drawing/geimao.py deleted file mode 100644 index 41c576f..0000000 --- a/konabot/plugins/memepack/drawing/geimao.py +++ /dev/null @@ -1,30 +0,0 @@ -import asyncio -from typing import Any, cast - -import imagetext_py -import PIL.Image - -from konabot.common.path import ASSETS_PATH - -from .base.fonts import HARMONYOS_SANS_SC_BLACK - -geimao_image = PIL.Image.open(ASSETS_PATH / "img" / "meme" / "geimao.jpg").convert("RGBA") - - -def _draw_geimao(saying: str): - img = geimao_image.copy() - with imagetext_py.Writer(img) as iw: - iw.draw_text_wrapped( - saying, 960, 50, 00.5, 0, 1920, 240, HARMONYOS_SANS_SC_BLACK, - imagetext_py.Paint.Color(imagetext_py.Color.from_hex("000000FF")), - 0.8, - imagetext_py.TextAlign.Center, - cast(Any, 30.0), - imagetext_py.Paint.Color(imagetext_py.Color.from_hex("FFFFFFFF")), - draw_emojis=True, - ) - return img - - -async def draw_geimao(saying: str): - return await asyncio.to_thread(_draw_geimao, saying) \ No newline at end of file diff --git a/konabot/plugins/memepack/drawing/pt.py b/konabot/plugins/memepack/drawing/pt.py deleted file mode 100644 index 3324865..0000000 --- a/konabot/plugins/memepack/drawing/pt.py +++ /dev/null @@ -1,27 +0,0 @@ -import asyncio - -import imagetext_py -import PIL.Image - -from konabot.common.path import ASSETS_PATH - -from .base.fonts import HARMONYOS_SANS_SC_REGULAR - -pt_image = PIL.Image.open(ASSETS_PATH / "img" / "meme" / "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) diff --git a/konabot/plugins/memepack/drawing/saying.py b/konabot/plugins/memepack/drawing/saying.py new file mode 100644 index 0000000..caa4a5b --- /dev/null +++ b/konabot/plugins/memepack/drawing/saying.py @@ -0,0 +1,90 @@ +import asyncio +from typing import Any, cast + +import imagetext_py +import PIL.Image + +from konabot.common.path import ASSETS_PATH + +from .base.fonts import HARMONYOS_SANS_SC_BLACK, HARMONYOS_SANS_SC_REGULAR, LXGWWENKAI_REGULAR + +geimao_image = PIL.Image.open(ASSETS_PATH / "img" / "meme" / "geimao.jpg").convert("RGBA") +pt_image = PIL.Image.open(ASSETS_PATH / "img" / "meme" / "ptsay.png").convert("RGBA") +mnk_image = PIL.Image.open(ASSETS_PATH / "img" / "meme" / "mnksay.jpg").convert("RGBA") +dasuan_image = PIL.Image.open(ASSETS_PATH / "img" / "meme" / "dss.png").convert("RGBA") +suan_image = PIL.Image.open(ASSETS_PATH / "img" / "meme" / "suanleba.png").convert("RGBA") + + +def _draw_geimao(saying: str): + img = geimao_image.copy() + with imagetext_py.Writer(img) as iw: + iw.draw_text_wrapped( + saying, 960, 50, 0.5, 0, 1920, 240, HARMONYOS_SANS_SC_BLACK, + imagetext_py.Paint.Color(imagetext_py.Color.from_hex("000000FF")), + 0.8, + imagetext_py.TextAlign.Center, + cast(Any, 30.0), + imagetext_py.Paint.Color(imagetext_py.Color.from_hex("FFFFFFFF")), + draw_emojis=True, + ) + return img + + +async def draw_geimao(saying: str): + return await asyncio.to_thread(_draw_geimao, saying) + + +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) + + +def _draw_mnk(saying: str): + img = mnk_image.copy() + with imagetext_py.Writer(img) as iw: + iw.draw_text_wrapped( + saying, 540, 25, 0.5, 0, 1080, 120, HARMONYOS_SANS_SC_BLACK, + imagetext_py.Paint.Color(imagetext_py.Color.from_hex("000000FF")), + 0.8, + imagetext_py.TextAlign.Center, + cast(Any, 15.0), + imagetext_py.Paint.Color(imagetext_py.Color.from_hex("FFFFFFFF")), + draw_emojis=True, + ) + return img + + +async def draw_mnk(saying: str): + return await asyncio.to_thread(_draw_mnk, saying) + + +def _draw_suan(saying: str, dasuan: bool = False): + if dasuan: + img = dasuan_image.copy() + else: + img = suan_image.copy() + with imagetext_py.Writer(img) as iw: + iw.draw_text_wrapped( + saying, 1020, 290, 0.5, 0.5, 400, 48, LXGWWENKAI_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_suan(saying: str, dasuan: bool = False): + return await asyncio.to_thread(_draw_suan, saying, dasuan)