diff --git a/src/plugins/nonebot_bison/post.py b/src/plugins/nonebot_bison/post.py index d7c1cad..ceca521 100644 --- a/src/plugins/nonebot_bison/post.py +++ b/src/plugins/nonebot_bison/post.py @@ -24,7 +24,7 @@ class Post: pics: list[Union[str, bytes]] = field(default_factory=list) extra_msg: list[Message] = field(default_factory=list) - _message: Optional[list] = None + _message: Optional[list[Message]] = None def _use_pic(self): if not self.override_use_pic is None: @@ -107,10 +107,10 @@ class Post: self.pics = self.pics[matrix[0] * matrix[1] :] self.pics.insert(0, target_io.getvalue()) - async def generate_messages(self): + async def generate_messages(self) -> list[Message]: if self._message is None: await self._pic_merge() - msgs = [] + msg_segments: list[MessageSegment] = [] text = "" if self.text: if self._use_pic(): @@ -123,20 +123,21 @@ class Post: if self.target_name: text += " {}".format(self.target_name) if self._use_pic(): - msgs.append(await parse_text(text)) + msg_segments.append(await parse_text(text)) if not self.target_type == "rss" and self.url: - msgs.append(MessageSegment.text(self.url)) + msg_segments.append(MessageSegment.text(self.url)) else: if self.url: text += " \n详情: {}".format(self.url) - msgs.append(MessageSegment.text(text)) + msg_segments.append(MessageSegment.text(text)) for pic in self.pics: - # if isinstance(pic, bytes): - # pic = 'base64://' + base64.b64encode(pic).decode() - # msgs.append(Message("[CQ:image,file={url}]".format(url=pic))) - msgs.append(MessageSegment.image(pic)) + msg_segments.append(MessageSegment.image(pic)) if self.compress: - msgs = [reduce(lambda x, y: x.append(y), msgs, Message())] + msgs = [reduce(lambda x, y: x.append(y), msg_segments, Message())] + else: + msgs = list( + map(lambda msg_segment: Message([msg_segment]), msg_segments) + ) msgs.extend(self.extra_msg) self._message = msgs assert len(self._message) > 0, f"message list empty, {self}" diff --git a/src/plugins/nonebot_bison/send.py b/src/plugins/nonebot_bison/send.py index 31f31f0..b744926 100644 --- a/src/plugins/nonebot_bison/send.py +++ b/src/plugins/nonebot_bison/send.py @@ -64,7 +64,9 @@ async def _send_msgs_dispatch( await _do_send(bot, user, user_type, msg) -async def send_msgs(bot: Bot, user, user_type: Literal["private", "group"], msgs: list): +async def send_msgs( + bot: Bot, user, user_type: Literal["private", "group"], msgs: list[Message] +): if not plugin_config.bison_use_pic_merge or user_type == "private": for msg in msgs: await _send_msgs_dispatch(bot, user, user_type, msg) diff --git a/tests/test_send.py b/tests/test_send.py index dd2c089..20f5b98 100644 --- a/tests/test_send.py +++ b/tests/test_send.py @@ -1,13 +1,11 @@ -import asyncio - import pytest from nonebug import App @pytest.mark.asyncio async def test_send_no_queue(app: App): - import nonebot from nonebot.adapters.onebot.v11.bot import Bot + from nonebot.adapters.onebot.v11.message import Message from nonebot_bison.plugin_config import plugin_config from nonebot_bison.send import send_msgs @@ -16,16 +14,16 @@ async def test_send_no_queue(app: App): bot = ctx.create_bot(base=Bot) assert isinstance(bot, Bot) ctx.should_call_api( - "send_group_msg", {"group_id": "1233", "message": "msg1"}, True + "send_group_msg", {"group_id": "1233", "message": Message("msg1")}, True ) ctx.should_call_api( - "send_group_msg", {"group_id": "1233", "message": "msg2"}, True + "send_group_msg", {"group_id": "1233", "message": Message("msg2")}, True ) ctx.should_call_api( - "send_private_msg", {"user_id": "666", "message": "priv"}, True + "send_private_msg", {"user_id": "666", "message": Message("priv")}, True ) - await send_msgs(bot, "1233", "group", ["msg1", "msg2"]) - await send_msgs(bot, "666", "private", ["priv"]) + await send_msgs(bot, "1233", "group", [Message("msg1"), Message("msg2")]) + await send_msgs(bot, "666", "private", [Message("priv")]) assert ctx.wait_list.empty() @@ -33,9 +31,10 @@ async def test_send_no_queue(app: App): async def test_send_queue(app: App): import nonebot from nonebot.adapters.onebot.v11.bot import Bot + from nonebot.adapters.onebot.v11.message import Message from nonebot_bison import send from nonebot_bison.plugin_config import plugin_config - from nonebot_bison.send import LAST_SEND_TIME, do_send_msgs, send_msgs + from nonebot_bison.send import do_send_msgs, send_msgs async with app.test_api() as ctx: new_bot = ctx.create_bot(base=Bot) @@ -48,7 +47,7 @@ async def test_send_queue(app: App): "send_group_msg", {"group_id": "1233", "message": "test msg"}, True ) await bot.call_api("send_group_msg", group_id="1233", message="test msg") - await send_msgs(bot, "1233", "group", ["msg"]) + await send_msgs(bot, "1233", "group", [Message("msg")]) ctx.should_call_api( "send_group_msg", {"group_id": "1233", "message": "msg"}, True )