LittlePaimon/matcher_patch.py
2022-08-31 17:45:18 +08:00

57 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from typing import Union, Tuple, Set
from nonebot import on_command, on_regex, on_endswith, on_keyword, on_startswith
import nonebot
"""
通过猴子补丁为nonebot的部分matcher注入其命令到默认state中
"""
def on_command_(cmd: Union[str, Tuple[str, ...]], state: dict = None, *args, **kwargs):
if state is None:
state = {}
if 'pm_name' not in state:
state['pm_name'] = cmd if isinstance(cmd, str) else cmd[0]
return on_command(cmd=cmd, state=state, _depth=1, *args, **kwargs)
def on_endswith_(msg: Union[str, Tuple[str, ...]], state: dict = None, *args, **kwargs):
if state is None:
state = {}
if 'pm_name' not in state:
state['pm_name'] = msg if isinstance(msg, str) else msg[0]
return on_endswith(msg=msg, state=state, _depth=1, *args, **kwargs)
def on_startswith_(msg: Union[str, Tuple[str, ...]], state: dict = None, *args, **kwargs):
if state is None:
state = {}
if 'pm_name' not in state:
state['pm_name'] = msg if isinstance(msg, str) else msg[0]
return on_startswith(msg=msg, state=state, _depth=1, *args, **kwargs)
def on_regex_(pattern: str, state: dict = None, *args, **kwargs):
if state is None:
state = {}
if 'pm_name' not in state:
state['pm_name'] = pattern
return on_regex(pattern=pattern, state=state, _depth=1, *args, **kwargs)
def on_keyword_(keywords: Set[str], state: dict = None, *args, **kwargs):
if state is None:
state = {}
if 'pm_name' not in state:
state['pm_name'] = list(keywords)[0]
return on_keyword(keywords=keywords, state=state, _depth=1, *args, **kwargs)
nonebot.on_command = on_command_
nonebot.on_regex = on_regex_
nonebot.on_startswith = on_startswith_
nonebot.on_endswith = on_endswith_
nonebot.on_keyword = on_keyword_