|
6 | 6 | from nonebot.adapters.satori.bot import Bot as SatoriBot |
7 | 7 | from nonebot.adapters.satori.message import Text as _Text |
8 | 8 | from nonebot.adapters.satori.message import STYLE_TYPE_MAP |
9 | | -from nonebot.adapters.satori.event import NoticeEvent, MessageEvent, ReactionEvent, InteractionCommandMessageEvent |
10 | 9 | from nonebot.adapters.satori.message import Message, MessageSegment |
11 | 10 | from nonebot.adapters.satori.models import ChannelType, MessageObject |
| 11 | +from nonebot.adapters.satori.event import NoticeEvent, MessageEvent, ReactionEvent, InteractionCommandMessageEvent |
12 | 12 |
|
13 | 13 | from nonebot_plugin_alconna.uniseg.target import Target |
14 | 14 | from nonebot_plugin_alconna.uniseg.constraint import SupportScope |
@@ -79,21 +79,27 @@ def get_message_id(self, event: Event) -> str: |
79 | 79 | return str(event.message.id) |
80 | 80 |
|
81 | 81 | @export |
82 | | - async def text(self, seg: Text, bot: Union[Bot, None]) -> "MessageSegment": |
| 82 | + async def text(self, seg: Text, bot: Union[Bot, None]): |
83 | 83 | if not seg.styles: |
84 | 84 | return MessageSegment.text(seg.text) |
85 | | - if seg.extract_most_style() == "br": |
86 | | - return MessageSegment.br() |
87 | | - if seg.extract_most_style() == "link": |
88 | | - if not getattr(seg, "_children", []): |
89 | | - return MessageSegment.link(seg.text) |
90 | | - return MessageSegment.link(seg.text, seg._children[0].text) # type: ignore |
91 | 85 | if seg.extract_most_style() == "markdown": |
92 | 86 | return _Text("text", {"text": seg.text, "styles": {(0, len(seg.text)): ["chronocat:markdown"]}}) |
93 | | - styles = seg.styles.copy() |
94 | | - for scale, style in seg.styles.items(): |
95 | | - styles[scale] = [STYLE_TYPE_MAP.get(s, s) for s in style] |
96 | | - return _Text("text", {"text": seg.text, "styles": styles}) |
| 87 | + res = Message() |
| 88 | + for part in seg.style_split(): |
| 89 | + if part.extract_most_style() == "br": |
| 90 | + res.append(MessageSegment.br()) |
| 91 | + elif part.extract_most_style() == "link": |
| 92 | + if not getattr(part, "_children", []): |
| 93 | + res.append(MessageSegment.link(part.text)) |
| 94 | + else: |
| 95 | + res.append(MessageSegment.link(part.text, part._children[0].text)) # type: ignore |
| 96 | + else: |
| 97 | + styles = part.styles.copy() |
| 98 | + for scale, style in part.styles.items(): |
| 99 | + styles[scale] = [STYLE_TYPE_MAP.get(s, s) for s in style] |
| 100 | + res.append(_Text("text", {"text": part.text, "styles": styles})) |
| 101 | + res.__merge_text__() |
| 102 | + return res |
97 | 103 |
|
98 | 104 | @export |
99 | 105 | async def at(self, seg: At, bot: Union[Bot, None]) -> "MessageSegment": |
@@ -247,7 +253,9 @@ async def reaction(self, emoji: Emoji, mid: Any, bot: Bot, context: Union[Target |
247 | 253 | if isinstance(context, (MessageEvent, NoticeEvent)) and context.channel: |
248 | 254 | channel = mid.channel or context.channel |
249 | 255 | if delete: |
250 | | - return await bot.reaction_delete(channel_id=channel.id, message_id=_mid.id, emoji=emoji.name or emoji.id) |
| 256 | + return await bot.reaction_delete( |
| 257 | + channel_id=channel.id, message_id=_mid.id, emoji=emoji.name or emoji.id |
| 258 | + ) |
251 | 259 | return await bot.reaction_create(channel_id=channel.id, message_id=_mid.id, emoji=emoji.name or emoji.id) |
252 | 260 |
|
253 | 261 | def get_reply(self, mid: Any): |
|
0 commit comments