From 3d4d3b0f2479562b0513aba78dc792ef832bb196 Mon Sep 17 00:00:00 2001 From: yanyongyu Date: Mon, 16 Aug 2021 16:47:57 +0800 Subject: [PATCH] :bug: fix got handler running more than once --- nonebot/matcher.py | 3 ++- nonebot/plugin/__init__.py | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/nonebot/matcher.py b/nonebot/matcher.py index f86593ee..b1542e7d 100644 --- a/nonebot/matcher.py +++ b/nonebot/matcher.py @@ -456,7 +456,8 @@ class Matcher(metaclass=MatcherMeta): parser_handler = cls.append_handler(_key_parser) def _decorator(func: T_Handler) -> T_Handler: - if not hasattr(cls.handlers[-1], "__wrapped__"): + print("deco", key, hasattr(cls.handlers[-1].func, "__wrapped__")) + if not hasattr(cls.handlers[-1].func, "__wrapped__"): parser = cls.handlers.pop() func_handler = Handler(func) diff --git a/nonebot/plugin/__init__.py b/nonebot/plugin/__init__.py index 038db8fc..1a13f25b 100644 --- a/nonebot/plugin/__init__.py +++ b/nonebot/plugin/__init__.py @@ -405,10 +405,14 @@ def on_command(cmd: Union[str, Tuple[str, ...]], async def _strip_cmd(bot: "Bot", event: "Event", state: T_State): message = event.get_message() + if len(message) < 1: + return segment = message.pop(0) + segment_text = str(segment).lstrip() + if not segment_text.startswith(state["_prefix"]["raw_command"]): + return new_message = message.__class__( - str(segment).lstrip() - [len(state["_prefix"]["raw_command"]):].lstrip()) # type: ignore + segment_text[len(state["_prefix"]["raw_command"]):].lstrip()) for new_segment in reversed(new_message): message.insert(0, new_segment)