mirror of
https://github.com/nonebot/nonebot2.git
synced 2025-06-07 21:05:40 +00:00
add matcher type
This commit is contained in:
parent
26c697f5e4
commit
c01d3c7ca1
@ -19,6 +19,7 @@ class Matcher:
|
|||||||
"""`Matcher`类
|
"""`Matcher`类
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
type: str = ""
|
||||||
rule: Rule = Rule()
|
rule: Rule = Rule()
|
||||||
permission: Permission = Permission()
|
permission: Permission = Permission()
|
||||||
handlers: List[Handler] = []
|
handlers: List[Handler] = []
|
||||||
@ -38,6 +39,7 @@ class Matcher:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def new(cls,
|
def new(cls,
|
||||||
|
type_: str = "",
|
||||||
rule: Rule = Rule(),
|
rule: Rule = Rule(),
|
||||||
permission: Permission = Permission(),
|
permission: Permission = Permission(),
|
||||||
handlers: list = [],
|
handlers: list = [],
|
||||||
@ -54,6 +56,7 @@ class Matcher:
|
|||||||
|
|
||||||
NewMatcher = type(
|
NewMatcher = type(
|
||||||
"Matcher", (Matcher,), {
|
"Matcher", (Matcher,), {
|
||||||
|
"type": type_,
|
||||||
"rule": rule,
|
"rule": rule,
|
||||||
"permission": permission,
|
"permission": permission,
|
||||||
"handlers": handlers,
|
"handlers": handlers,
|
||||||
@ -69,7 +72,8 @@ class Matcher:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def check_perm(cls, bot: Bot, event: Event) -> bool:
|
async def check_perm(cls, bot: Bot, event: Event) -> bool:
|
||||||
return await cls.permission(bot, event)
|
return (event.type == (cls.type or event.type) and
|
||||||
|
await cls.permission(bot, event))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def check_rule(cls, bot: Bot, event: Event, state: dict) -> bool:
|
async def check_rule(cls, bot: Bot, event: Event, state: dict) -> bool:
|
||||||
@ -180,6 +184,7 @@ class Matcher:
|
|||||||
except RejectedException:
|
except RejectedException:
|
||||||
self.handlers.insert(0, handler) # type: ignore
|
self.handlers.insert(0, handler) # type: ignore
|
||||||
matcher = Matcher.new(
|
matcher = Matcher.new(
|
||||||
|
self.type,
|
||||||
self.rule,
|
self.rule,
|
||||||
USER(event.user_id, perm=self.permission), # type:ignore
|
USER(event.user_id, perm=self.permission), # type:ignore
|
||||||
self.handlers,
|
self.handlers,
|
||||||
@ -191,6 +196,7 @@ class Matcher:
|
|||||||
return
|
return
|
||||||
except PausedException:
|
except PausedException:
|
||||||
matcher = Matcher.new(
|
matcher = Matcher.new(
|
||||||
|
self.type,
|
||||||
self.rule,
|
self.rule,
|
||||||
USER(event.user_id, perm=self.permission), # type:ignore
|
USER(event.user_id, perm=self.permission), # type:ignore
|
||||||
self.handlers,
|
self.handlers,
|
||||||
|
@ -8,8 +8,8 @@ from importlib.util import module_from_spec
|
|||||||
|
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
|
from nonebot.permission import Permission
|
||||||
from nonebot.rule import Rule, startswith, endswith, command, regex
|
from nonebot.rule import Rule, startswith, endswith, command, regex
|
||||||
from nonebot.permission import Permission, METAEVENT, MESSAGE, NOTICE, REQUEST
|
|
||||||
from nonebot.typing import Set, Dict, Type, Tuple, Union, Optional, ModuleType, RuleChecker
|
from nonebot.typing import Set, Dict, Type, Tuple, Union, Optional, ModuleType, RuleChecker
|
||||||
|
|
||||||
plugins: Dict[str, "Plugin"] = {}
|
plugins: Dict[str, "Plugin"] = {}
|
||||||
@ -27,14 +27,33 @@ class Plugin(object):
|
|||||||
self.matchers = matchers
|
self.matchers = matchers
|
||||||
|
|
||||||
|
|
||||||
|
def on(rule: Union[Rule, RuleChecker] = Rule(),
|
||||||
|
permission: Permission = Permission(),
|
||||||
|
*,
|
||||||
|
handlers=[],
|
||||||
|
temp=False,
|
||||||
|
priority: int = 1,
|
||||||
|
state={}) -> Type[Matcher]:
|
||||||
|
matcher = Matcher.new("",
|
||||||
|
Rule() & rule,
|
||||||
|
permission,
|
||||||
|
temp=temp,
|
||||||
|
priority=priority,
|
||||||
|
handlers=handlers,
|
||||||
|
default_state=state)
|
||||||
|
_tmp_matchers.add(matcher)
|
||||||
|
return matcher
|
||||||
|
|
||||||
|
|
||||||
def on_metaevent(rule: Union[Rule, RuleChecker] = Rule(),
|
def on_metaevent(rule: Union[Rule, RuleChecker] = Rule(),
|
||||||
*,
|
*,
|
||||||
handlers=[],
|
handlers=[],
|
||||||
temp=False,
|
temp=False,
|
||||||
priority: int = 1,
|
priority: int = 1,
|
||||||
state={}) -> Type[Matcher]:
|
state={}) -> Type[Matcher]:
|
||||||
matcher = Matcher.new(Rule() & rule,
|
matcher = Matcher.new("meta_event",
|
||||||
METAEVENT,
|
Rule() & rule,
|
||||||
|
Permission(),
|
||||||
temp=temp,
|
temp=temp,
|
||||||
priority=priority,
|
priority=priority,
|
||||||
handlers=handlers,
|
handlers=handlers,
|
||||||
@ -44,13 +63,14 @@ def on_metaevent(rule: Union[Rule, RuleChecker] = Rule(),
|
|||||||
|
|
||||||
|
|
||||||
def on_message(rule: Union[Rule, RuleChecker] = Rule(),
|
def on_message(rule: Union[Rule, RuleChecker] = Rule(),
|
||||||
permission: Permission = MESSAGE,
|
permission: Permission = Permission(),
|
||||||
*,
|
*,
|
||||||
handlers=[],
|
handlers=[],
|
||||||
temp=False,
|
temp=False,
|
||||||
priority: int = 1,
|
priority: int = 1,
|
||||||
state={}) -> Type[Matcher]:
|
state={}) -> Type[Matcher]:
|
||||||
matcher = Matcher.new(Rule() & rule,
|
matcher = Matcher.new("message",
|
||||||
|
Rule() & rule,
|
||||||
permission,
|
permission,
|
||||||
temp=temp,
|
temp=temp,
|
||||||
priority=priority,
|
priority=priority,
|
||||||
@ -66,8 +86,9 @@ def on_notice(rule: Union[Rule, RuleChecker] = Rule(),
|
|||||||
temp=False,
|
temp=False,
|
||||||
priority: int = 1,
|
priority: int = 1,
|
||||||
state={}) -> Type[Matcher]:
|
state={}) -> Type[Matcher]:
|
||||||
matcher = Matcher.new(Rule() & rule,
|
matcher = Matcher.new("notice",
|
||||||
NOTICE,
|
Rule() & rule,
|
||||||
|
Permission(),
|
||||||
temp=temp,
|
temp=temp,
|
||||||
priority=priority,
|
priority=priority,
|
||||||
handlers=handlers,
|
handlers=handlers,
|
||||||
@ -82,8 +103,9 @@ def on_request(rule: Union[Rule, RuleChecker] = Rule(),
|
|||||||
temp=False,
|
temp=False,
|
||||||
priority: int = 1,
|
priority: int = 1,
|
||||||
state={}) -> Type[Matcher]:
|
state={}) -> Type[Matcher]:
|
||||||
matcher = Matcher.new(Rule() & rule,
|
matcher = Matcher.new("request",
|
||||||
REQUEST,
|
Rule() & rule,
|
||||||
|
Permission(),
|
||||||
temp=temp,
|
temp=temp,
|
||||||
priority=priority,
|
priority=priority,
|
||||||
handlers=handlers,
|
handlers=handlers,
|
||||||
@ -94,7 +116,7 @@ def on_request(rule: Union[Rule, RuleChecker] = Rule(),
|
|||||||
|
|
||||||
def on_startswith(msg: str,
|
def on_startswith(msg: str,
|
||||||
rule: Optional[Union[Rule, RuleChecker]] = None,
|
rule: Optional[Union[Rule, RuleChecker]] = None,
|
||||||
permission: Permission = MESSAGE,
|
permission: Permission = Permission(),
|
||||||
**kwargs) -> Type[Matcher]:
|
**kwargs) -> Type[Matcher]:
|
||||||
return on_message(startswith(msg) &
|
return on_message(startswith(msg) &
|
||||||
rule, permission, **kwargs) if rule else on_message(
|
rule, permission, **kwargs) if rule else on_message(
|
||||||
@ -103,7 +125,7 @@ def on_startswith(msg: str,
|
|||||||
|
|
||||||
def on_endswith(msg: str,
|
def on_endswith(msg: str,
|
||||||
rule: Optional[Union[Rule, RuleChecker]] = None,
|
rule: Optional[Union[Rule, RuleChecker]] = None,
|
||||||
permission: Permission = MESSAGE,
|
permission: Permission = Permission(),
|
||||||
**kwargs) -> Type[Matcher]:
|
**kwargs) -> Type[Matcher]:
|
||||||
return on_message(endswith(msg) &
|
return on_message(endswith(msg) &
|
||||||
rule, permission, **kwargs) if rule else on_message(
|
rule, permission, **kwargs) if rule else on_message(
|
||||||
@ -112,7 +134,7 @@ def on_endswith(msg: str,
|
|||||||
|
|
||||||
def on_command(cmd: Tuple[str],
|
def on_command(cmd: Tuple[str],
|
||||||
rule: Optional[Union[Rule, RuleChecker]] = None,
|
rule: Optional[Union[Rule, RuleChecker]] = None,
|
||||||
permission: Permission = MESSAGE,
|
permission: Permission = Permission(),
|
||||||
**kwargs) -> Type[Matcher]:
|
**kwargs) -> Type[Matcher]:
|
||||||
return on_message(command(cmd) &
|
return on_message(command(cmd) &
|
||||||
rule, permission, **kwargs) if rule else on_message(
|
rule, permission, **kwargs) if rule else on_message(
|
||||||
@ -122,10 +144,11 @@ def on_command(cmd: Tuple[str],
|
|||||||
def on_regex(pattern: str,
|
def on_regex(pattern: str,
|
||||||
flags: Union[int, re.RegexFlag] = 0,
|
flags: Union[int, re.RegexFlag] = 0,
|
||||||
rule: Optional[Rule] = None,
|
rule: Optional[Rule] = None,
|
||||||
|
permission: Permission = Permission(),
|
||||||
**kwargs) -> Type[Matcher]:
|
**kwargs) -> Type[Matcher]:
|
||||||
return on_message(regex(pattern, flags) &
|
return on_message(regex(pattern, flags) &
|
||||||
rule, **kwargs) if rule else on_message(
|
rule, permission, **kwargs) if rule else on_message(
|
||||||
regex(pattern, flags), **kwargs)
|
regex(pattern, flags), permission, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
def load_plugin(module_path: str) -> Optional[Plugin]:
|
def load_plugin(module_path: str) -> Optional[Plugin]:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user