mirror of
https://github.com/nonebot/nonebot2.git
synced 2024-09-21 05:12:34 +00:00
🐛 fix plain text escaped
This commit is contained in:
parent
b6bf477551
commit
e7993a4485
@ -1,4 +1,5 @@
|
|||||||
import re
|
import re
|
||||||
|
from functools import reduce
|
||||||
from typing import Any, Dict, Union, Tuple, Mapping, Iterable, Optional
|
from typing import Any, Dict, Union, Tuple, Mapping, Iterable, Optional
|
||||||
|
|
||||||
from nonebot.typing import overrides
|
from nonebot.typing import overrides
|
||||||
@ -223,6 +224,7 @@ class Message(BaseMessage):
|
|||||||
yield MessageSegment(seg["type"], seg.get("data") or {})
|
yield MessageSegment(seg["type"], seg.get("data") or {})
|
||||||
return
|
return
|
||||||
elif isinstance(msg, str):
|
elif isinstance(msg, str):
|
||||||
|
|
||||||
def _iter_message(msg: str) -> Iterable[Tuple[str, str]]:
|
def _iter_message(msg: str) -> Iterable[Tuple[str, str]]:
|
||||||
text_begin = 0
|
text_begin = 0
|
||||||
for cqcode in re.finditer(
|
for cqcode in re.finditer(
|
||||||
@ -232,7 +234,8 @@ class Message(BaseMessage):
|
|||||||
r"),?\]", msg):
|
r"),?\]", msg):
|
||||||
yield "text", msg[text_begin:cqcode.pos + cqcode.start()]
|
yield "text", msg[text_begin:cqcode.pos + cqcode.start()]
|
||||||
text_begin = cqcode.pos + cqcode.end()
|
text_begin = cqcode.pos + cqcode.end()
|
||||||
yield cqcode.group("type"), cqcode.group("params").lstrip(",")
|
yield cqcode.group("type"), cqcode.group("params").lstrip(
|
||||||
|
",")
|
||||||
yield "text", msg[text_begin:]
|
yield "text", msg[text_begin:]
|
||||||
|
|
||||||
for type_, data in _iter_message(msg):
|
for type_, data in _iter_message(msg):
|
||||||
@ -248,3 +251,11 @@ class Message(BaseMessage):
|
|||||||
x.lstrip() for x in data.split(","))))
|
x.lstrip() for x in data.split(","))))
|
||||||
}
|
}
|
||||||
yield MessageSegment(type_, data)
|
yield MessageSegment(type_, data)
|
||||||
|
|
||||||
|
def extract_plain_text(self) -> str:
|
||||||
|
|
||||||
|
def _concat(x: str, y: MessageSegment) -> str:
|
||||||
|
return f"{x} {y.data['text']}" if y.is_text() else x
|
||||||
|
|
||||||
|
plain_text = reduce(_concat, self, "")
|
||||||
|
return plain_text[1:] if plain_text else plain_text
|
||||||
|
Loading…
Reference in New Issue
Block a user