nonebot2/nonebot/plugins/single_session.py

33 lines
990 B
Python
Raw Normal View History

2021-01-25 18:15:25 +08:00
from typing import Dict, Optional
from nonebot.typing import T_State
from nonebot.matcher import Matcher
from nonebot.adapters import Bot, Event
from nonebot.message import run_preprocessor, run_postprocessor, IgnoredException
_running_matcher: Dict[str, int] = {}
2021-01-25 18:15:25 +08:00
@run_preprocessor
async def _(matcher: Matcher, bot: Bot, event: Event, state: T_State):
2021-02-24 22:21:47 +08:00
try:
session_id = event.get_session_id()
2021-02-24 23:56:52 +08:00
except Exception:
2021-02-24 22:21:47 +08:00
return
current_event_id = id(event)
event_id = _running_matcher.get(session_id, None)
if event_id and event_id != current_event_id:
2021-03-11 10:55:18 +08:00
raise IgnoredException("Another matcher running")
2021-02-24 22:21:47 +08:00
_running_matcher[session_id] = current_event_id
2021-01-25 18:15:25 +08:00
@run_postprocessor
async def _(matcher: Matcher, exception: Optional[Exception], bot: Bot, event: Event, state: T_State):
2021-02-24 22:21:47 +08:00
try:
session_id = event.get_session_id()
2021-02-24 23:56:52 +08:00
except Exception:
2021-02-24 22:21:47 +08:00
return
if session_id in _running_matcher:
del _running_matcher[session_id]