mirror of
https://github.com/nonebot/nonebot2.git
synced 2024-09-21 05:12:34 +00:00
✨ implement text merger
This commit is contained in:
parent
79b6601d12
commit
7df407056b
@ -2,7 +2,7 @@ import json
|
|||||||
import itertools
|
import itertools
|
||||||
|
|
||||||
from dataclasses import dataclass
|
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.adapters import Message as BaseMessage, MessageSegment as BaseMessageSegment
|
||||||
from nonebot.typing import overrides
|
from nonebot.typing import overrides
|
||||||
@ -137,6 +137,18 @@ class Message(BaseMessage[MessageSegment]):
|
|||||||
else:
|
else:
|
||||||
yield MessageSegment(seg["type"], seg.get("data") or {})
|
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)
|
@overrides(BaseMessage)
|
||||||
def extract_plain_text(self) -> str:
|
def extract_plain_text(self) -> str:
|
||||||
return "".join(seg.data["text"] for seg in self if seg.is_text())
|
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"]):
|
for seg in itertools.chain(*self.data["content"]):
|
||||||
tag = seg.pop("tag")
|
tag = seg.pop("tag")
|
||||||
msg += MessageSegment(tag if tag != "img" else "image", seg)
|
msg += MessageSegment(tag if tag != "img" else "image", seg)
|
||||||
return msg
|
return msg._merge()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
return Message(MessageSegment(self.type, self.data))
|
return Message(MessageSegment(self.type, self.data))
|
||||||
|
Loading…
Reference in New Issue
Block a user