From 83bea507ab85f47feb125e182ef811b09e1e6692 Mon Sep 17 00:00:00 2001 From: Azide Date: Wed, 12 Jun 2024 23:12:01 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E8=A1=A5=E5=85=85=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E6=B8=B2=E6=9F=93=E6=97=B6=E9=81=97=E6=BC=8F=E7=9A=84?= =?UTF-8?q?=E8=BD=AC=E5=8F=91=E6=8E=A8=E6=96=87=E4=B8=AD=E7=9A=84=E5=9B=BE?= =?UTF-8?q?=E7=89=87=20(#554)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nonebot_bison/theme/themes/basic/build.py | 10 +++- .../theme/themes/ceobe_canteen/build.py | 14 ++++- nonebot_bison/theme/themes/ht2i/build.py | 12 ++++- tests/platforms/static/mergeable-pic.jpg | Bin 0 -> 53912 bytes tests/platforms/utils.py | 5 ++ tests/theme/test_themes.py | 51 ++++++++++++++---- 6 files changed, 77 insertions(+), 15 deletions(-) create mode 100644 tests/platforms/static/mergeable-pic.jpg diff --git a/nonebot_bison/theme/themes/basic/build.py b/nonebot_bison/theme/themes/basic/build.py index c801258..8b33278 100644 --- a/nonebot_bison/theme/themes/basic/build.py +++ b/nonebot_bison/theme/themes/basic/build.py @@ -1,3 +1,5 @@ +from io import BytesIO +from pathlib import Path from typing import TYPE_CHECKING, Literal from nonebot_plugin_saa import Text, Image, MessageSegmentFactory @@ -44,8 +46,14 @@ class BasicTheme(Theme): client = await post.platform.ctx.get_client_for_static() msgs: list[MessageSegmentFactory] = [Text(text)] + + pics_group: list[list[str | bytes | Path | BytesIO]] = [] if post.images: - pics = post.images + pics_group.append(post.images) + if rp and rp.images: + pics_group.append(rp.images) + + for pics in pics_group: if is_pics_mergable(pics): pics = await pic_merge(list(pics), client) msgs.extend(map(Image, pics)) diff --git a/nonebot_bison/theme/themes/ceobe_canteen/build.py b/nonebot_bison/theme/themes/ceobe_canteen/build.py index 7e66374..8b24464 100644 --- a/nonebot_bison/theme/themes/ceobe_canteen/build.py +++ b/nonebot_bison/theme/themes/ceobe_canteen/build.py @@ -1,3 +1,4 @@ +from io import BytesIO from pathlib import Path from datetime import datetime from typing import TYPE_CHECKING, Literal @@ -8,6 +9,7 @@ from nonebot_plugin_saa import Text, Image, MessageSegmentFactory from nonebot_bison.compat import model_validator from nonebot_bison.theme.utils import convert_to_qr +from nonebot_bison.utils.image import pic_merge, is_pics_mergable from nonebot_bison.theme import Theme, ThemeRenderError, ThemeRenderUnsupportError if TYPE_CHECKING: @@ -109,6 +111,16 @@ class CeobeCanteenTheme(Theme): text += f"详情: {post.url}" msgs.append(Text(text)) + pics_group: list[list[str | bytes | Path | BytesIO]] = [] if post.images: - msgs.extend(map(Image, post.images)) + pics_group.append(post.images) + if post.repost and post.repost.images: + pics_group.append(post.repost.images) + + client = await post.platform.ctx.get_client_for_static() + for pics in pics_group: + if is_pics_mergable(pics): + pics = await pic_merge(list(pics), client) + msgs.extend(map(Image, pics)) + return msgs diff --git a/nonebot_bison/theme/themes/ht2i/build.py b/nonebot_bison/theme/themes/ht2i/build.py index 88c6d4a..3134a28 100644 --- a/nonebot_bison/theme/themes/ht2i/build.py +++ b/nonebot_bison/theme/themes/ht2i/build.py @@ -1,3 +1,5 @@ +from io import BytesIO +from pathlib import Path from typing import TYPE_CHECKING, Literal from nonebot_plugin_saa import Text, Image, MessageSegmentFactory @@ -53,9 +55,15 @@ class Ht2iTheme(Theme): if urls: msgs.append(Text("\n".join(urls))) + pics_group: list[list[str | bytes | Path | BytesIO]] = [] if post.images: - client = await post.platform.ctx.get_client_for_static() - pics = post.images + pics_group.append(post.images) + if rp and rp.images: + pics_group.append(rp.images) + + client = await post.platform.ctx.get_client_for_static() + + for pics in pics_group: if is_pics_mergable(pics): pics = await pic_merge(list(pics), client) msgs.extend(map(Image, pics)) diff --git a/tests/platforms/static/mergeable-pic.jpg b/tests/platforms/static/mergeable-pic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4fc190fe7228e46a243e1a90865ebadf24daa42 GIT binary patch literal 53912 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

8i*`r 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 bytes: + from tests.platforms.utils import get_bytes + + return get_bytes("mergeable-pic.jpg") + + +@pytest.fixture() +def SIMPLE_PNG_DATA() -> bytes: + return b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x06\x00\x00\x00\x1f\x15\xc4\x89" + + @pytest.fixture() def mock_platform(app: App): from nonebot_bison.post import Post @@ -160,7 +176,7 @@ async def test_arknights_theme(app: App, mock_post): @pytest.mark.asyncio -async def test_basic_theme(app: App, mock_post): +async def test_basic_theme(app: App, mock_post: "Post", MERGEABLE_PNG_DATA, SIMPLE_PNG_DATA): from nonebot_plugin_saa import Text, Image from nonebot_bison.theme import theme_manager @@ -171,7 +187,7 @@ async def test_basic_theme(app: App, mock_post): assert isinstance(basic_theme, BasicTheme) assert basic_theme.name == "basic" res = await basic_theme.render(mock_post) - assert len(res) == 2 + assert len(res) == 3 assert res[0] == Text( cleandoc( """title @@ -190,7 +206,7 @@ async def test_basic_theme(app: App, mock_post): ) assert isinstance(res[1], Image) - mock_post2 = mock_post + mock_post2 = deepcopy(mock_post) mock_post2.repost = None mock_post2.images = [] res2 = await basic_theme.render(mock_post2) @@ -206,6 +222,13 @@ async def test_basic_theme(app: App, mock_post): ) ) + mock_post3 = deepcopy(mock_post) + mock_post3.images = [MERGEABLE_PNG_DATA, MERGEABLE_PNG_DATA, MERGEABLE_PNG_DATA, SIMPLE_PNG_DATA] + assert mock_post3.repost + mock_post3.repost.images = [SIMPLE_PNG_DATA, SIMPLE_PNG_DATA] + res3 = await basic_theme.render(mock_post3) + assert len(res3) == 5 + @pytest.mark.asyncio async def test_brief_theme(app: App, mock_post): @@ -250,7 +273,7 @@ async def test_brief_theme(app: App, mock_post): @pytest.mark.render @pytest.mark.asyncio @flaky(max_runs=3, min_passes=1) -async def test_ceobecanteen_theme(app: App, mock_post): +async def test_ceobecanteen_theme(app: App, mock_post: "Post", MERGEABLE_PNG_DATA, SIMPLE_PNG_DATA): from nonebot_plugin_saa import Text, Image from nonebot_bison.theme import theme_manager @@ -261,16 +284,22 @@ async def test_ceobecanteen_theme(app: App, mock_post): assert isinstance(ceobecanteen_theme, CeobeCanteenTheme) assert ceobecanteen_theme.name == "ceobecanteen" res = await ceobecanteen_theme.render(mock_post) - assert len(res) == 3 + assert len(res) == 4 assert isinstance(res[0], Image) assert isinstance(res[2], Image) assert res[1] == Text("来源: Mock Platform Mock\n详情: http://t.tt/1") + mock_post2 = deepcopy(mock_post) + assert mock_post2.repost + mock_post2.repost.images = [MERGEABLE_PNG_DATA, MERGEABLE_PNG_DATA, MERGEABLE_PNG_DATA, SIMPLE_PNG_DATA] + res2 = await ceobecanteen_theme.render(mock_post2) + assert len(res2) == 5 + @pytest.mark.render @pytest.mark.asyncio @flaky(max_runs=3, min_passes=1) -async def test_ht2i_theme(app: App, mock_post): +async def test_ht2i_theme(app: App, mock_post: "Post", MERGEABLE_PNG_DATA, SIMPLE_PNG_DATA): from nonebot_plugin_saa import Text, Image from nonebot_bison.theme import theme_manager @@ -281,16 +310,16 @@ async def test_ht2i_theme(app: App, mock_post): assert isinstance(ht2i_theme, Ht2iTheme) assert ht2i_theme.name == "ht2i" res = await ht2i_theme.render(mock_post) - assert len(res) == 3 + assert len(res) == 4 assert isinstance(res[0], Image) assert isinstance(res[2], Image) assert res[1] == Text("转发详情: http://t.tt/2\n详情: http://t.tt/1") - mock_post2 = mock_post + mock_post2 = deepcopy(mock_post) mock_post2.repost = None - mock_post2.images = [] + mock_post2.images = [MERGEABLE_PNG_DATA, MERGEABLE_PNG_DATA, MERGEABLE_PNG_DATA, MERGEABLE_PNG_DATA] res2 = await ht2i_theme.render(mock_post2) - assert len(res2) == 2 + assert len(res2) == 4 assert res2[1] == Text("详情: http://t.tt/1")