mirror of
https://github.com/nonebot/nonebot2.git
synced 2024-11-27 18:45:05 +08:00
令返回符合格式
This commit is contained in:
parent
456d333568
commit
187532930b
@ -55,8 +55,7 @@ def get_driver() -> Driver:
|
||||
"""
|
||||
获取全局 Driver 对象。可用于在计划任务的回调中获取当前 Driver 对象。
|
||||
|
||||
:返回:
|
||||
|
||||
返回:
|
||||
Driver: 全局 Driver 对象
|
||||
|
||||
:异常:
|
||||
@ -79,8 +78,7 @@ def get_app() -> Any:
|
||||
"""
|
||||
获取全局 Driver 对应 Server App 对象。
|
||||
|
||||
:返回:
|
||||
|
||||
返回:
|
||||
Any: Server App 对象
|
||||
|
||||
:异常:
|
||||
@ -105,8 +103,7 @@ def get_asgi() -> Any:
|
||||
"""
|
||||
获取全局 Driver 对应 Asgi 对象。
|
||||
|
||||
:返回:
|
||||
|
||||
返回:
|
||||
Any: Asgi 对象
|
||||
|
||||
:异常:
|
||||
@ -134,8 +131,7 @@ def get_bot(self_id: Optional[str] = None) -> Bot:
|
||||
参数:
|
||||
self_id: 用来识别 Bot 的 ID
|
||||
|
||||
:返回:
|
||||
|
||||
返回:
|
||||
Bot: Bot 对象
|
||||
|
||||
:异常:
|
||||
@ -166,8 +162,7 @@ def get_bots() -> Dict[str, Bot]:
|
||||
"""
|
||||
获取所有通过 ws 连接 NoneBot 的 Bot 对象。
|
||||
|
||||
:返回:
|
||||
|
||||
返回:
|
||||
Dict[str, Bot]: 一个以字符串 ID 为键,Bot 对象为值的字典
|
||||
|
||||
:异常:
|
||||
@ -228,10 +223,6 @@ def init(*, _env_file: Optional[str] = None, **kwargs):
|
||||
_env_file: 配置文件名,默认从 .env.{env_name} 中读取配置
|
||||
**kwargs: 任意变量,将会存储到 Config 对象里
|
||||
|
||||
:返回:
|
||||
|
||||
- `None`
|
||||
|
||||
:用法:
|
||||
|
||||
.. code-block:: python
|
||||
@ -269,10 +260,6 @@ def run(*args: Any, **kwargs: Any) -> None:
|
||||
*args: 传入 Driver.run 的位置参数
|
||||
**kwargs: 传入 Driver.run 的命名参数
|
||||
|
||||
:返回:
|
||||
|
||||
- `None`
|
||||
|
||||
:用法:
|
||||
|
||||
.. code-block:: python
|
||||
|
@ -17,11 +17,6 @@ class Event(abc.ABC, BaseModel):
|
||||
def get_type(self) -> str:
|
||||
"""
|
||||
获取事件类型的方法,类型通常为 NoneBot 内置的四种类型。
|
||||
|
||||
:返回:
|
||||
|
||||
Literal["message", "notice", "request", "meta_event"]
|
||||
* 其他自定义 `str`
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@ -29,10 +24,6 @@ class Event(abc.ABC, BaseModel):
|
||||
def get_event_name(self) -> str:
|
||||
"""
|
||||
获取事件名称的方法。
|
||||
|
||||
:返回:
|
||||
|
||||
str
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@ -40,10 +31,6 @@ class Event(abc.ABC, BaseModel):
|
||||
def get_event_description(self) -> str:
|
||||
"""
|
||||
获取事件描述的方法,通常为事件具体内容。
|
||||
|
||||
:返回:
|
||||
|
||||
str
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@ -54,10 +41,6 @@ class Event(abc.ABC, BaseModel):
|
||||
"""
|
||||
获取事件日志信息的方法,通常你不需要修改这个方法,只有当希望 NoneBot 隐藏该事件日志时,可以抛出 `NoLogException` 异常。
|
||||
|
||||
:返回:
|
||||
|
||||
str
|
||||
|
||||
:异常:
|
||||
|
||||
- `NoLogException`
|
||||
@ -68,10 +51,6 @@ class Event(abc.ABC, BaseModel):
|
||||
def get_user_id(self) -> str:
|
||||
"""
|
||||
获取事件主体 id 的方法,通常是用户 id 。
|
||||
|
||||
:返回:
|
||||
|
||||
str
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@ -79,10 +58,6 @@ class Event(abc.ABC, BaseModel):
|
||||
def get_session_id(self) -> str:
|
||||
"""
|
||||
获取会话 id 的方法,用于判断当前事件属于哪一个会话,通常是用户 id、群组 id 组合。
|
||||
|
||||
:返回:
|
||||
|
||||
str
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@ -90,20 +65,12 @@ class Event(abc.ABC, BaseModel):
|
||||
def get_message(self) -> "Message":
|
||||
"""
|
||||
获取事件消息内容的方法。
|
||||
|
||||
:返回:
|
||||
|
||||
Message
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def get_plaintext(self) -> str:
|
||||
"""
|
||||
获取消息纯文本的方法,通常不需要修改,默认通过 `get_message().extract_plain_text` 获取。
|
||||
|
||||
:返回:
|
||||
|
||||
str
|
||||
"""
|
||||
return self.get_message().extract_plain_text()
|
||||
|
||||
@ -111,9 +78,5 @@ class Event(abc.ABC, BaseModel):
|
||||
def is_tome(self) -> bool:
|
||||
"""
|
||||
获取事件是否与机器人有关的方法。
|
||||
|
||||
:返回:
|
||||
|
||||
bool
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
@ -137,9 +137,8 @@ class Message(List[TMS], abc.ABC):
|
||||
参数:
|
||||
format_string: 格式化字符串
|
||||
|
||||
:返回:
|
||||
|
||||
- `MessageFormatter[TM]`: 消息格式化器
|
||||
返回:
|
||||
MessageFormatter[TM]: 消息格式化器
|
||||
"""
|
||||
return MessageTemplate(format_string, cls)
|
||||
|
||||
|
@ -225,9 +225,8 @@ class Matcher(metaclass=MatcherMeta):
|
||||
default_state: 默认状态 `state`
|
||||
expire_time: 事件响应器最终有效时间点,过时即被删除
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`: 新的事件响应器类
|
||||
返回:
|
||||
Type[Matcher]: 新的事件响应器类
|
||||
"""
|
||||
NewMatcher = type(
|
||||
"Matcher",
|
||||
@ -281,9 +280,8 @@ class Matcher(metaclass=MatcherMeta):
|
||||
bot: Bot 对象
|
||||
event: 上报事件
|
||||
|
||||
:返回:
|
||||
|
||||
- `bool`: 是否满足权限
|
||||
返回:
|
||||
bool: 是否满足权限
|
||||
"""
|
||||
event_type = event.get_type()
|
||||
return event_type == (cls.type or event_type) and await cls.permission(
|
||||
@ -307,9 +305,8 @@ class Matcher(metaclass=MatcherMeta):
|
||||
event: 上报事件
|
||||
state: 当前状态
|
||||
|
||||
:返回:
|
||||
|
||||
- `bool`: 是否满足匹配规则
|
||||
返回:
|
||||
bool: 是否满足匹配规则
|
||||
"""
|
||||
event_type = event.get_type()
|
||||
return event_type == (cls.type or event_type) and await cls.rule(
|
||||
|
@ -89,10 +89,6 @@ class Permission:
|
||||
event: Event 对象
|
||||
stack: 异步上下文栈
|
||||
dependency_cache: 依赖缓存
|
||||
|
||||
:返回:
|
||||
|
||||
- `bool`
|
||||
"""
|
||||
if not self.checkers:
|
||||
return True
|
||||
|
@ -45,10 +45,6 @@ class Export(dict):
|
||||
def export() -> Export:
|
||||
"""
|
||||
获取插件的导出内容对象
|
||||
|
||||
:返回:
|
||||
|
||||
- `Export`
|
||||
"""
|
||||
plugin = _current_plugin.get()
|
||||
if not plugin:
|
||||
|
@ -16,10 +16,6 @@ def load_plugin(module_path: str) -> Optional[Plugin]:
|
||||
|
||||
参数:
|
||||
module_path: 插件名称 `path.to.your.plugin`
|
||||
|
||||
:返回:
|
||||
|
||||
- `Optional[Plugin]`
|
||||
"""
|
||||
|
||||
manager = PluginManager([module_path])
|
||||
@ -32,11 +28,7 @@ def load_plugins(*plugin_dir: str) -> Set[Plugin]:
|
||||
导入目录下多个插件,以 `_` 开头的插件不会被导入!
|
||||
|
||||
参数:
|
||||
- `*plugin_dir: str`: 插件路径
|
||||
|
||||
:返回:
|
||||
|
||||
- `Set[Plugin]`
|
||||
plugin_dir: 插件路径
|
||||
"""
|
||||
manager = PluginManager(search_path=plugin_dir)
|
||||
_managers.append(manager)
|
||||
@ -50,12 +42,8 @@ def load_all_plugins(
|
||||
导入指定列表中的插件以及指定目录下多个插件,以 `_` 开头的插件不会被导入!
|
||||
|
||||
参数:
|
||||
- `module_path: Iterable[str]`: 指定插件集合
|
||||
- `plugin_dir: Iterable[str]`: 指定插件路径集合
|
||||
|
||||
:返回:
|
||||
|
||||
- `Set[Plugin]`
|
||||
module_path: 指定插件集合
|
||||
plugin_dir: 指定插件路径集合
|
||||
"""
|
||||
manager = PluginManager(module_path, plugin_dir)
|
||||
_managers.append(manager)
|
||||
@ -67,13 +55,8 @@ def load_from_json(file_path: str, encoding: str = "utf-8") -> Set[Plugin]:
|
||||
导入指定 json 文件中的 `plugins` 以及 `plugin_dirs` 下多个插件,以 `_` 开头的插件不会被导入!
|
||||
|
||||
参数:
|
||||
- `file_path: str`: 指定 json 文件路径
|
||||
- `encoding: str`: 指定 json 文件编码
|
||||
|
||||
:返回:
|
||||
|
||||
- `Set[Plugin]`
|
||||
"""
|
||||
file_path: 指定 json 文件路径
|
||||
encoding: 指定 json 文件编码"""
|
||||
with open(file_path, "r", encoding=encoding) as f:
|
||||
data = json.load(f)
|
||||
plugins = data.get("plugins")
|
||||
@ -89,13 +72,8 @@ def load_from_toml(file_path: str, encoding: str = "utf-8") -> Set[Plugin]:
|
||||
以 `_` 开头的插件不会被导入!
|
||||
|
||||
参数:
|
||||
- `file_path: str`: 指定 toml 文件路径
|
||||
- `encoding: str`: 指定 toml 文件编码
|
||||
|
||||
:返回:
|
||||
|
||||
- `Set[Plugin]`
|
||||
"""
|
||||
file_path: 指定 toml 文件路径
|
||||
encoding: 指定 toml 文件编码"""
|
||||
with open(file_path, "r", encoding=encoding) as f:
|
||||
data = tomlkit.parse(f.read()) # type: ignore
|
||||
|
||||
@ -119,10 +97,6 @@ def load_from_toml(file_path: str, encoding: str = "utf-8") -> Set[Plugin]:
|
||||
def load_builtin_plugin(name: str) -> Optional[Plugin]:
|
||||
"""
|
||||
导入 NoneBot 内置插件
|
||||
|
||||
:返回:
|
||||
|
||||
- `Plugin`
|
||||
"""
|
||||
return load_plugin(f"nonebot.plugins.{name}")
|
||||
|
||||
@ -130,10 +104,6 @@ def load_builtin_plugin(name: str) -> Optional[Plugin]:
|
||||
def load_builtin_plugins(*plugins) -> Set[Plugin]:
|
||||
"""
|
||||
导入多个 NoneBot 内置插件
|
||||
|
||||
:返回:
|
||||
|
||||
- `Set[Plugin]`
|
||||
"""
|
||||
return load_all_plugins([f"nonebot.plugins.{p}" for p in plugins], [])
|
||||
|
||||
@ -145,10 +115,6 @@ def require(name: str) -> Export:
|
||||
参数:
|
||||
name: 插件名,与 `load_plugin` 参数一致。如果为 `load_plugins` 导入的插件,则为文件(夹)名。
|
||||
|
||||
:返回:
|
||||
|
||||
- `Export`
|
||||
|
||||
:异常:
|
||||
- `RuntimeError`: 插件无法加载
|
||||
"""
|
||||
|
@ -66,10 +66,6 @@ def on(
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
matcher = Matcher.new(
|
||||
type,
|
||||
@ -107,10 +103,6 @@ def on_metaevent(
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
matcher = Matcher.new(
|
||||
"meta_event",
|
||||
@ -150,10 +142,6 @@ def on_message(
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
matcher = Matcher.new(
|
||||
"message",
|
||||
@ -191,10 +179,6 @@ def on_notice(
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
matcher = Matcher.new(
|
||||
"notice",
|
||||
@ -232,10 +216,6 @@ def on_request(
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
matcher = Matcher.new(
|
||||
"request",
|
||||
@ -273,10 +253,6 @@ def on_startswith(
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
return on_message(startswith(msg, ignorecase) & rule, **kwargs, _depth=_depth + 1)
|
||||
|
||||
@ -301,10 +277,6 @@ def on_endswith(
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
return on_message(endswith(msg, ignorecase) & rule, **kwargs, _depth=_depth + 1)
|
||||
|
||||
@ -327,10 +299,6 @@ def on_keyword(
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
return on_message(keyword(*keywords) & rule, **kwargs, _depth=_depth + 1)
|
||||
|
||||
@ -357,10 +325,6 @@ def on_command(
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
|
||||
commands = set([cmd]) | (aliases or set())
|
||||
@ -396,10 +360,6 @@ def on_shell_command(
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
|
||||
commands = set([cmd]) | (aliases or set())
|
||||
@ -432,10 +392,6 @@ def on_regex(
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
return on_message(regex(pattern, flags) & rule, **kwargs, _depth=_depth + 1)
|
||||
|
||||
@ -467,10 +423,6 @@ class CommandGroup:
|
||||
参数:
|
||||
cmd: 命令前缀
|
||||
**kwargs`on_command` 的参数,将会覆盖命令组默认值
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
sub_cmd = (cmd,) if isinstance(cmd, str) else cmd
|
||||
cmd = self.basecmd + sub_cmd
|
||||
@ -488,10 +440,6 @@ class CommandGroup:
|
||||
参数:
|
||||
cmd: 命令前缀
|
||||
**kwargs`on_shell_command` 的参数,将会覆盖命令组默认值
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
sub_cmd = (cmd,) if isinstance(cmd, str) else cmd
|
||||
cmd = self.basecmd + sub_cmd
|
||||
@ -530,10 +478,6 @@ class MatcherGroup:
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
final_kwargs = self.base_kwargs.copy()
|
||||
final_kwargs.update(kwargs)
|
||||
@ -552,10 +496,6 @@ class MatcherGroup:
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
final_kwargs = self.base_kwargs.copy()
|
||||
final_kwargs.update(kwargs)
|
||||
@ -577,10 +517,6 @@ class MatcherGroup:
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
final_kwargs = self.base_kwargs.copy()
|
||||
final_kwargs.update(kwargs)
|
||||
@ -600,10 +536,6 @@ class MatcherGroup:
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
final_kwargs = self.base_kwargs.copy()
|
||||
final_kwargs.update(kwargs)
|
||||
@ -623,10 +555,6 @@ class MatcherGroup:
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
final_kwargs = self.base_kwargs.copy()
|
||||
final_kwargs.update(kwargs)
|
||||
@ -651,10 +579,6 @@ class MatcherGroup:
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
final_kwargs = self.base_kwargs.copy()
|
||||
final_kwargs.update(kwargs)
|
||||
@ -677,10 +601,6 @@ class MatcherGroup:
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
final_kwargs = self.base_kwargs.copy()
|
||||
final_kwargs.update(kwargs)
|
||||
@ -702,10 +622,6 @@ class MatcherGroup:
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
final_kwargs = self.base_kwargs.copy()
|
||||
final_kwargs.update(kwargs)
|
||||
@ -735,10 +651,6 @@ class MatcherGroup:
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
final_kwargs = self.base_kwargs.copy()
|
||||
final_kwargs.update(kwargs)
|
||||
@ -772,10 +684,6 @@ class MatcherGroup:
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
final_kwargs = self.base_kwargs.copy()
|
||||
final_kwargs.update(kwargs)
|
||||
@ -804,10 +712,6 @@ class MatcherGroup:
|
||||
priority: 事件响应器优先级
|
||||
block: 是否阻止事件向更低优先级传递
|
||||
state: 默认 state
|
||||
|
||||
:返回:
|
||||
|
||||
- `Type[Matcher]`
|
||||
"""
|
||||
final_kwargs = self.base_kwargs.copy()
|
||||
final_kwargs.update(kwargs)
|
||||
|
@ -58,10 +58,6 @@ def get_plugin(name: str) -> Optional[Plugin]:
|
||||
|
||||
参数:
|
||||
name: 插件名,与 `load_plugin` 参数一致。如果为 `load_plugins` 导入的插件,则为文件(夹)名。
|
||||
|
||||
:返回:
|
||||
|
||||
- `Optional[Plugin]`
|
||||
"""
|
||||
return plugins.get(name)
|
||||
|
||||
@ -69,10 +65,6 @@ def get_plugin(name: str) -> Optional[Plugin]:
|
||||
def get_loaded_plugins() -> Set[Plugin]:
|
||||
"""
|
||||
获取当前已导入的所有插件。
|
||||
|
||||
:返回:
|
||||
|
||||
- `Set[Plugin]`
|
||||
"""
|
||||
return set(plugins.values())
|
||||
|
||||
|
@ -120,10 +120,6 @@ class Rule:
|
||||
state: 当前 State
|
||||
stack: 异步上下文栈
|
||||
dependency_cache: 依赖缓存
|
||||
|
||||
:返回:
|
||||
|
||||
- `bool`
|
||||
"""
|
||||
if not self.checkers:
|
||||
return True
|
||||
|
@ -35,10 +35,6 @@ def escape_tag(s: str) -> str:
|
||||
|
||||
参数:
|
||||
s: 需要转义的字符串
|
||||
|
||||
:返回:
|
||||
|
||||
- `str`
|
||||
"""
|
||||
return re.sub(r"</?((?:[fb]g\s)?[^<>\s]*)>", r"\\\g<0>", s)
|
||||
|
||||
@ -91,10 +87,6 @@ def run_sync(call: Callable[P, R]) -> Callable[P, Awaitable[R]]:
|
||||
|
||||
参数:
|
||||
call: 被装饰的同步函数
|
||||
|
||||
:返回:
|
||||
|
||||
- `Callable[P, Awaitable[R]]`
|
||||
"""
|
||||
|
||||
@wraps(call)
|
||||
|
Loading…
Reference in New Issue
Block a user