diff --git a/nonebot/adapters/onebot/v11/message.py b/nonebot/adapters/onebot/v11/message.py index 8639d96..4b79198 100644 --- a/nonebot/adapters/onebot/v11/message.py +++ b/nonebot/adapters/onebot/v11/message.py @@ -5,7 +5,6 @@ description: onebot.v11.message 模块 """ -import re from io import BytesIO from pathlib import Path from functools import partial @@ -38,7 +37,7 @@ def __str__(self) -> str: params = ",".join( f"{k}={escape(str(v))}" for k, v in self.data.items() if v is not None ) - return f"[CQ:{self.type}{',' if params else ''}{params}]" + return f"[{self.type}{':' if params else ''}{params}]" def to_rich_text(self, truncate: Optional[int] = 70) -> str: if self.is_text(): @@ -297,36 +296,7 @@ def __iadd__( @staticmethod @override def _construct(msg: str) -> Iterable[MessageSegment]: - def _iter_message(msg: str) -> Iterable[tuple[str, str]]: - text_begin = 0 - for cqcode in re.finditer( - r"\[CQ:(?P[a-zA-Z0-9-_.]+)" - r"(?P" - r"(?:,[a-zA-Z0-9-_.]+=[^,\]]*)*" - r"),?\]", - msg, - ): - yield "text", msg[text_begin : cqcode.pos + cqcode.start()] - text_begin = cqcode.pos + cqcode.end() - yield cqcode.group("type"), cqcode.group("params").lstrip(",") - yield "text", msg[text_begin:] - - for type_, data in _iter_message(msg): - if type_ == "text": - if data: - # only yield non-empty text segment - yield MessageSegment(type_, {"text": unescape(data)}) - else: - data = { - k: unescape(v) - for k, v in ( - x.split("=", maxsplit=1) - for x in filter( - lambda x: x, (x.lstrip() for x in data.split(",")) - ) - ) - } - yield MessageSegment(type_, data) + yield MessageSegment("text", {"text": unescape(msg)}) @override def extract_plain_text(self) -> str: