From 7df407056bece27527f7a24e6423ea0d73dcad2c Mon Sep 17 00:00:00 2001 From: StarHeartHunt Date: Thu, 8 Jul 2021 10:49:02 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20implement=20text=20merger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nonebot/adapters/feishu/message.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/nonebot-adapter-feishu/nonebot/adapters/feishu/message.py b/packages/nonebot-adapter-feishu/nonebot/adapters/feishu/message.py index 54a56395..aba04843 100644 --- a/packages/nonebot-adapter-feishu/nonebot/adapters/feishu/message.py +++ b/packages/nonebot-adapter-feishu/nonebot/adapters/feishu/message.py @@ -2,7 +2,7 @@ import json import itertools from dataclasses import dataclass -from typing import Any, Dict, Tuple, Type, Union, Mapping, Iterable +from typing import Any, Dict, List, Tuple, Type, Union, Mapping, Iterable from nonebot.adapters import Message as BaseMessage, MessageSegment as BaseMessageSegment from nonebot.typing import overrides @@ -137,6 +137,18 @@ class Message(BaseMessage[MessageSegment]): else: yield MessageSegment(seg["type"], seg.get("data") or {}) + def _merge(self) -> "Message": + i: int + seg: MessageSegment + msg: List[MessageSegment] = [] + for i, seg in enumerate(self): + if seg.type == "text" and i != 0 and msg[-1].type == "text": + msg[-1] = MessageSegment( + "text", {"text": msg[-1].data["text"] + seg.data["text"]}) + else: + msg.append(seg) + return Message(msg) + @overrides(BaseMessage) def extract_plain_text(self) -> str: return "".join(seg.data["text"] for seg in self if seg.is_text()) @@ -169,7 +181,7 @@ class MessageDeserializer: for seg in itertools.chain(*self.data["content"]): tag = seg.pop("tag") msg += MessageSegment(tag if tag != "img" else "image", seg) - return msg + return msg._merge() else: return Message(MessageSegment(self.type, self.data))