diff --git a/nonebot/plugin.py b/nonebot/plugin.py index d864af1c..d9bb3913 100644 --- a/nonebot/plugin.py +++ b/nonebot/plugin.py @@ -422,15 +422,12 @@ def on_command(cmd: Union[str, Tuple[str, ...]], async def _strip_cmd(bot: "Bot", event: "Event", state: T_State): message = event.get_message() - text_processed = False - for index, segment in enumerate(message): - segment: "MessageSegment" = message.pop(index) - if segment.is_text() and not text_processed: - segment, *_ = message.__class__( - str(segment)[len(state["_prefix"]["raw_command"]):].lstrip( - )) # type: ignore - text_processed = True - message.insert(index, segment) + segment = message.pop(0) + new_message = message.__class__( + str(segment) + [len(state["_prefix"]["raw_command"]):].lstrip()) # type: ignore + for new_segment in reversed(new_message): + message.insert(0, new_segment) handlers = kwargs.pop("handlers", []) handlers.insert(0, _strip_cmd) diff --git a/nonebot/rule.py b/nonebot/rule.py index 45146ae8..75022335 100644 --- a/nonebot/rule.py +++ b/nonebot/rule.py @@ -137,9 +137,8 @@ class TrieRule: prefix = None suffix = None message = event.get_message() - message_seg: Optional["MessageSegment"] = next( - filter(lambda x: x.is_text(), message), None) - if message_seg is not None: + message_seg = message[0] + if message_seg.is_text(): prefix = cls.prefix.longest_prefix(str(message_seg).lstrip()) message_seg_r = message[-1] if message_seg_r.is_text():