diff --git a/nonebot/matcher.py b/nonebot/matcher.py index 4ab2c28f..a3531932 100644 --- a/nonebot/matcher.py +++ b/nonebot/matcher.py @@ -294,18 +294,27 @@ class Matcher(metaclass=MatcherMeta): * 无 """ - async def _receive(bot: "Bot", event: "Event", - state: T_State) -> NoReturn: + async def _receive(bot: "Bot", event: "Event") -> NoReturn: raise PausedException + cls.process_handler(_receive) + if cls.handlers: # 已有前置handlers则接受一条新的消息,否则视为接收初始消息 cls.append_handler(_receive) def _decorator(func: T_Handler) -> T_Handler: + cls.process_handler(func) if not cls.handlers or cls.handlers[-1] is not func: cls.append_handler(func) + _receive.__params__.update({ + "bot": + func.__params__["bot"], + "event": + func.__params__["event"] or _receive.__params__["event"] + }) + return func return _decorator @@ -368,6 +377,25 @@ class Matcher(metaclass=MatcherMeta): cls.append_handler(wrapper) + wrapper.__params__.update({ + "bot": + func.__params__["bot"], + "event": + func.__params__["event"] or wrapper.__params__["event"] + }) + _key_getter.__params__.update({ + "bot": + func.__params__["bot"], + "event": + func.__params__["event"] or wrapper.__params__["event"] + }) + _key_parser.__params__.update({ + "bot": + func.__params__["bot"], + "event": + func.__params__["event"] or wrapper.__params__["event"] + }) + return func return _decorator diff --git a/tests/test_plugins/test_overload.py b/tests/test_plugins/test_overload.py new file mode 100644 index 00000000..06712779 --- /dev/null +++ b/tests/test_plugins/test_overload.py @@ -0,0 +1,19 @@ +from nonebot import on_command +from nonebot.adapters.cqhttp import Bot, PrivateMessageEvent, GroupMessageEvent + +overload = on_command("overload") + + +@overload.handle() +async def handle_first_receive(bot: Bot): + return + + +@overload.got("message", prompt="群?") +async def handle_group(bot: Bot, event: GroupMessageEvent): + return + + +@overload.got("message", prompt="私?") +async def handle_private(bot: Bot, event: PrivateMessageEvent): + return