⚗️ add processor to ensure single matcher

This commit is contained in:
yanyongyu 2021-01-26 15:03:37 +08:00
parent f8304406c5
commit 2e75671d56

View File

@ -5,16 +5,22 @@ from nonebot.matcher import Matcher
from nonebot.adapters import Bot, Event from nonebot.adapters import Bot, Event
from nonebot.message import run_preprocessor, run_postprocessor, IgnoredException from nonebot.message import run_preprocessor, run_postprocessor, IgnoredException
_running_matcher: Dict[str, bool] = {} _running_matcher: Dict[str, int] = {}
@run_preprocessor @run_preprocessor
async def _(matcher: Matcher, bot: Bot, event: Event, state: T_State): async def _(matcher: Matcher, bot: Bot, event: Event, state: T_State):
# TODO session_id = event.get_session_id()
pass event_id = id(event)
if _running_matcher.get(session_id, None) != event_id:
raise IgnoredException("Annother matcher running")
_running_matcher[session_id] = event_id
@run_postprocessor @run_postprocessor
async def _(matcher: Matcher, exception: Optional[Exception], bot: Bot, event: Event, state: T_State): async def _(matcher: Matcher, exception: Optional[Exception], bot: Bot, event: Event, state: T_State):
# TODO session_id = event.get_session_id()
pass if session_id in _running_matcher:
del _running_matcher[session_id]