mirror of
https://github.com/nonebot/nonebot2.git
synced 2025-02-25 20:10:28 +08:00
✨ Feature: 改进 CommandGroup
与 MatcherGroup
的结构 (#1240)
This commit is contained in:
parent
20f144ba93
commit
3bbca0fa70
@ -462,7 +462,33 @@ def on_type(
|
|||||||
return on(rule=is_type(*event_types) & rule, **kwargs, _depth=_depth + 1)
|
return on(rule=is_type(*event_types) & rule, **kwargs, _depth=_depth + 1)
|
||||||
|
|
||||||
|
|
||||||
class CommandGroup:
|
class _Group:
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
"""创建一个事件响应器组合,参数为默认值,与 `on` 一致"""
|
||||||
|
self.matchers: List[Type[Matcher]] = []
|
||||||
|
"""组内事件响应器列表"""
|
||||||
|
self.base_kwargs: Dict[str, Any] = kwargs
|
||||||
|
"""其他传递给 `on` 的参数默认值"""
|
||||||
|
|
||||||
|
def _get_final_kwargs(
|
||||||
|
self, update: Dict[str, Any], *, exclude: Optional[Set[str]] = None
|
||||||
|
) -> Dict[str, Any]:
|
||||||
|
"""获取最终传递给 `on` 的参数
|
||||||
|
|
||||||
|
参数:
|
||||||
|
update: 更新的关键字参数
|
||||||
|
exclude: 需要排除的参数
|
||||||
|
"""
|
||||||
|
final_kwargs = self.base_kwargs.copy()
|
||||||
|
final_kwargs.update(update)
|
||||||
|
if exclude:
|
||||||
|
for key in exclude:
|
||||||
|
final_kwargs.pop(key, None)
|
||||||
|
final_kwargs["_depth"] = 1
|
||||||
|
return final_kwargs
|
||||||
|
|
||||||
|
|
||||||
|
class CommandGroup(_Group):
|
||||||
"""命令组,用于声明一组有相同名称前缀的命令。
|
"""命令组,用于声明一组有相同名称前缀的命令。
|
||||||
|
|
||||||
参数:
|
参数:
|
||||||
@ -478,15 +504,13 @@ class CommandGroup:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, cmd: Union[str, Tuple[str, ...]], **kwargs):
|
def __init__(self, cmd: Union[str, Tuple[str, ...]], **kwargs):
|
||||||
self.basecmd: Tuple[str, ...] = (cmd,) if isinstance(cmd, str) else cmd
|
|
||||||
"""命令前缀"""
|
"""命令前缀"""
|
||||||
if "aliases" in kwargs:
|
super().__init__(**kwargs)
|
||||||
del kwargs["aliases"]
|
self.basecmd: Tuple[str, ...] = (cmd,) if isinstance(cmd, str) else cmd
|
||||||
self.base_kwargs: Dict[str, Any] = kwargs
|
self.base_kwargs.pop("aliases", None)
|
||||||
"""其他传递给 `on_command` 的参数默认值"""
|
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return f"CommandGroup(cmd={self.basecmd})"
|
return f"CommandGroup(cmd={self.basecmd}, matchers={len(self.matchers)})"
|
||||||
|
|
||||||
def command(self, cmd: Union[str, Tuple[str, ...]], **kwargs) -> Type[Matcher]:
|
def command(self, cmd: Union[str, Tuple[str, ...]], **kwargs) -> Type[Matcher]:
|
||||||
"""注册一个新的命令。新参数将会覆盖命令组默认值
|
"""注册一个新的命令。新参数将会覆盖命令组默认值
|
||||||
@ -505,10 +529,9 @@ class CommandGroup:
|
|||||||
"""
|
"""
|
||||||
sub_cmd = (cmd,) if isinstance(cmd, str) else cmd
|
sub_cmd = (cmd,) if isinstance(cmd, str) else cmd
|
||||||
cmd = self.basecmd + sub_cmd
|
cmd = self.basecmd + sub_cmd
|
||||||
|
matcher = on_command(cmd, **self._get_final_kwargs(kwargs))
|
||||||
final_kwargs = self.base_kwargs.copy()
|
self.matchers.append(matcher)
|
||||||
final_kwargs.update(kwargs)
|
return matcher
|
||||||
return on_command(cmd, **final_kwargs, _depth=1)
|
|
||||||
|
|
||||||
def shell_command(
|
def shell_command(
|
||||||
self, cmd: Union[str, Tuple[str, ...]], **kwargs
|
self, cmd: Union[str, Tuple[str, ...]], **kwargs
|
||||||
@ -530,22 +553,14 @@ class CommandGroup:
|
|||||||
"""
|
"""
|
||||||
sub_cmd = (cmd,) if isinstance(cmd, str) else cmd
|
sub_cmd = (cmd,) if isinstance(cmd, str) else cmd
|
||||||
cmd = self.basecmd + sub_cmd
|
cmd = self.basecmd + sub_cmd
|
||||||
|
matcher = on_shell_command(cmd, **self._get_final_kwargs(kwargs))
|
||||||
final_kwargs = self.base_kwargs.copy()
|
self.matchers.append(matcher)
|
||||||
final_kwargs.update(kwargs)
|
return matcher
|
||||||
return on_shell_command(cmd, **final_kwargs, _depth=1)
|
|
||||||
|
|
||||||
|
|
||||||
class MatcherGroup:
|
class MatcherGroup(_Group):
|
||||||
"""事件响应器组合,统一管理。为 `Matcher` 创建提供默认属性。"""
|
"""事件响应器组合,统一管理。为 `Matcher` 创建提供默认属性。"""
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
|
||||||
"""创建一个事件响应器组合,参数为默认值,与 `on` 一致"""
|
|
||||||
self.matchers: List[Type[Matcher]] = []
|
|
||||||
"""组内事件响应器列表"""
|
|
||||||
self.base_kwargs: Dict[str, Any] = kwargs
|
|
||||||
"""其他传递给 `on` 的参数默认值"""
|
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return f"MatcherGroup(matchers={len(self.matchers)})"
|
return f"MatcherGroup(matchers={len(self.matchers)})"
|
||||||
|
|
||||||
@ -563,9 +578,7 @@ class MatcherGroup:
|
|||||||
block: 是否阻止事件向更低优先级传递
|
block: 是否阻止事件向更低优先级传递
|
||||||
state: 默认 state
|
state: 默认 state
|
||||||
"""
|
"""
|
||||||
final_kwargs = self.base_kwargs.copy()
|
matcher = on(**self._get_final_kwargs(kwargs))
|
||||||
final_kwargs.update(kwargs)
|
|
||||||
matcher = on(**final_kwargs, _depth=1)
|
|
||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
@ -581,11 +594,8 @@ class MatcherGroup:
|
|||||||
block: 是否阻止事件向更低优先级传递
|
block: 是否阻止事件向更低优先级传递
|
||||||
state: 默认 state
|
state: 默认 state
|
||||||
"""
|
"""
|
||||||
final_kwargs = self.base_kwargs.copy()
|
final_kwargs = self._get_final_kwargs(kwargs, exclude={"type", "permission"})
|
||||||
final_kwargs.update(kwargs)
|
matcher = on_metaevent(**final_kwargs)
|
||||||
final_kwargs.pop("type", None)
|
|
||||||
final_kwargs.pop("permission", None)
|
|
||||||
matcher = on_metaevent(**final_kwargs, _depth=1)
|
|
||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
@ -602,10 +612,8 @@ class MatcherGroup:
|
|||||||
block: 是否阻止事件向更低优先级传递
|
block: 是否阻止事件向更低优先级传递
|
||||||
state: 默认 state
|
state: 默认 state
|
||||||
"""
|
"""
|
||||||
final_kwargs = self.base_kwargs.copy()
|
final_kwargs = self._get_final_kwargs(kwargs, exclude={"type"})
|
||||||
final_kwargs.update(kwargs)
|
matcher = on_message(**final_kwargs)
|
||||||
final_kwargs.pop("type", None)
|
|
||||||
matcher = on_message(**final_kwargs, _depth=1)
|
|
||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
@ -621,11 +629,8 @@ class MatcherGroup:
|
|||||||
block: 是否阻止事件向更低优先级传递
|
block: 是否阻止事件向更低优先级传递
|
||||||
state: 默认 state
|
state: 默认 state
|
||||||
"""
|
"""
|
||||||
final_kwargs = self.base_kwargs.copy()
|
final_kwargs = self._get_final_kwargs(kwargs, exclude={"type", "permission"})
|
||||||
final_kwargs.update(kwargs)
|
matcher = on_notice(**final_kwargs)
|
||||||
final_kwargs.pop("type", None)
|
|
||||||
final_kwargs.pop("permission", None)
|
|
||||||
matcher = on_notice(**final_kwargs, _depth=1)
|
|
||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
@ -641,11 +646,8 @@ class MatcherGroup:
|
|||||||
block: 是否阻止事件向更低优先级传递
|
block: 是否阻止事件向更低优先级传递
|
||||||
state: 默认 state
|
state: 默认 state
|
||||||
"""
|
"""
|
||||||
final_kwargs = self.base_kwargs.copy()
|
final_kwargs = self._get_final_kwargs(kwargs, exclude={"type", "permission"})
|
||||||
final_kwargs.update(kwargs)
|
matcher = on_request(**final_kwargs)
|
||||||
final_kwargs.pop("type", None)
|
|
||||||
final_kwargs.pop("permission", None)
|
|
||||||
matcher = on_request(**final_kwargs, _depth=1)
|
|
||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
@ -666,10 +668,8 @@ class MatcherGroup:
|
|||||||
block: 是否阻止事件向更低优先级传递
|
block: 是否阻止事件向更低优先级传递
|
||||||
state: 默认 state
|
state: 默认 state
|
||||||
"""
|
"""
|
||||||
final_kwargs = self.base_kwargs.copy()
|
final_kwargs = self._get_final_kwargs(kwargs, exclude={"type"})
|
||||||
final_kwargs.update(kwargs)
|
matcher = on_startswith(msg, **final_kwargs)
|
||||||
final_kwargs.pop("type", None)
|
|
||||||
matcher = on_startswith(msg, **final_kwargs, _depth=1)
|
|
||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
@ -688,10 +688,8 @@ class MatcherGroup:
|
|||||||
block: 是否阻止事件向更低优先级传递
|
block: 是否阻止事件向更低优先级传递
|
||||||
state: 默认 state
|
state: 默认 state
|
||||||
"""
|
"""
|
||||||
final_kwargs = self.base_kwargs.copy()
|
final_kwargs = self._get_final_kwargs(kwargs, exclude={"type"})
|
||||||
final_kwargs.update(kwargs)
|
matcher = on_endswith(msg, **final_kwargs)
|
||||||
final_kwargs.pop("type", None)
|
|
||||||
matcher = on_endswith(msg, **final_kwargs, _depth=1)
|
|
||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
@ -710,10 +708,8 @@ class MatcherGroup:
|
|||||||
block: 是否阻止事件向更低优先级传递
|
block: 是否阻止事件向更低优先级传递
|
||||||
state: 默认 state
|
state: 默认 state
|
||||||
"""
|
"""
|
||||||
final_kwargs = self.base_kwargs.copy()
|
final_kwargs = self._get_final_kwargs(kwargs, exclude={"type"})
|
||||||
final_kwargs.update(kwargs)
|
matcher = on_fullmatch(msg, **final_kwargs)
|
||||||
final_kwargs.pop("type", None)
|
|
||||||
matcher = on_fullmatch(msg, **final_kwargs, _depth=1)
|
|
||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
@ -731,10 +727,8 @@ class MatcherGroup:
|
|||||||
block: 是否阻止事件向更低优先级传递
|
block: 是否阻止事件向更低优先级传递
|
||||||
state: 默认 state
|
state: 默认 state
|
||||||
"""
|
"""
|
||||||
final_kwargs = self.base_kwargs.copy()
|
final_kwargs = self._get_final_kwargs(kwargs, exclude={"type"})
|
||||||
final_kwargs.update(kwargs)
|
matcher = on_keyword(keywords, **final_kwargs)
|
||||||
final_kwargs.pop("type", None)
|
|
||||||
matcher = on_keyword(keywords, **final_kwargs, _depth=1)
|
|
||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
@ -760,10 +754,8 @@ class MatcherGroup:
|
|||||||
block: 是否阻止事件向更低优先级传递
|
block: 是否阻止事件向更低优先级传递
|
||||||
state: 默认 state
|
state: 默认 state
|
||||||
"""
|
"""
|
||||||
final_kwargs = self.base_kwargs.copy()
|
final_kwargs = self._get_final_kwargs(kwargs, exclude={"type"})
|
||||||
final_kwargs.update(kwargs)
|
matcher = on_command(cmd, aliases=aliases, **final_kwargs)
|
||||||
final_kwargs.pop("type", None)
|
|
||||||
matcher = on_command(cmd, aliases=aliases, **final_kwargs, _depth=1)
|
|
||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
@ -793,12 +785,8 @@ class MatcherGroup:
|
|||||||
block: 是否阻止事件向更低优先级传递
|
block: 是否阻止事件向更低优先级传递
|
||||||
state: 默认 state
|
state: 默认 state
|
||||||
"""
|
"""
|
||||||
final_kwargs = self.base_kwargs.copy()
|
final_kwargs = self._get_final_kwargs(kwargs, exclude={"type"})
|
||||||
final_kwargs.update(kwargs)
|
matcher = on_shell_command(cmd, aliases=aliases, parser=parser, **final_kwargs)
|
||||||
final_kwargs.pop("type", None)
|
|
||||||
matcher = on_shell_command(
|
|
||||||
cmd, aliases=aliases, parser=parser, **final_kwargs, _depth=1
|
|
||||||
)
|
|
||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
@ -821,10 +809,8 @@ class MatcherGroup:
|
|||||||
block: 是否阻止事件向更低优先级传递
|
block: 是否阻止事件向更低优先级传递
|
||||||
state: 默认 state
|
state: 默认 state
|
||||||
"""
|
"""
|
||||||
final_kwargs = self.base_kwargs.copy()
|
final_kwargs = self._get_final_kwargs(kwargs, exclude={"type"})
|
||||||
final_kwargs.update(kwargs)
|
matcher = on_regex(pattern, flags=flags, **final_kwargs)
|
||||||
final_kwargs.pop("type", None)
|
|
||||||
matcher = on_regex(pattern, flags=flags, **final_kwargs, _depth=1)
|
|
||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
@ -844,9 +830,7 @@ class MatcherGroup:
|
|||||||
block: 是否阻止事件向更低优先级传递
|
block: 是否阻止事件向更低优先级传递
|
||||||
state: 默认 state
|
state: 默认 state
|
||||||
"""
|
"""
|
||||||
final_kwargs = self.base_kwargs.copy()
|
final_kwargs = self._get_final_kwargs(kwargs, exclude={"type"})
|
||||||
final_kwargs.update(kwargs)
|
matcher = on_type(types, **final_kwargs)
|
||||||
final_kwargs.pop("type", None)
|
|
||||||
matcher = on_type(types, **final_kwargs, _depth=1)
|
|
||||||
self.matchers.append(matcher)
|
self.matchers.append(matcher)
|
||||||
return matcher
|
return matcher
|
||||||
|
Loading…
x
Reference in New Issue
Block a user