🔖 Release 2.0.0-beta.1

This commit is contained in:
github-actions
2022-01-08 09:34:38 +00:00
parent ff330e1536
commit b0536edab3
60 changed files with 6091 additions and 1 deletions

View File

@ -0,0 +1,213 @@
---
sidebar_position: 1
id: index
slug: /api
---
# NoneBot 模块
## 快捷导入
为方便使用,`nonebot` 模块从子模块导入了部分内容
- `on_message` => `nonebot.plugin.on_message`
- `on_notice` => `nonebot.plugin.on_notice`
- `on_request` => `nonebot.plugin.on_request`
- `on_metaevent` => `nonebot.plugin.on_metaevent`
- `on_startswith` => `nonebot.plugin.on_startswith`
- `on_endswith` => `nonebot.plugin.on_endswith`
- `on_keyword` => `nonebot.plugin.on_keyword`
- `on_command` => `nonebot.plugin.on_command`
- `on_shell_command` => `nonebot.plugin.on_shell_command`
- `on_regex` => `nonebot.plugin.on_regex`
- `CommandGroup` => `nonebot.plugin.CommandGroup`
- `Matchergroup` => `nonebot.plugin.MatcherGroup`
- `load_plugin` => `nonebot.plugin.load_plugin`
- `load_plugins` => `nonebot.plugin.load_plugins`
- `load_all_plugins` => `nonebot.plugin.load_all_plugins`
- `load_from_json` => `nonebot.plugin.load_from_json`
- `load_from_toml` => `nonebot.plugin.load_from_toml`
- `load_builtin_plugins` => `nonebot.plugin.load_builtin_plugins`
- `get_plugin` => `nonebot.plugin.get_plugin`
- `get_loaded_plugins` => `nonebot.plugin.get_loaded_plugins`
- `export` => `nonebot.plugin.export`
- `require` => `nonebot.plugin.require`
## `get_driver()`
- **说明**
获取全局 Driver 对象。可用于在计划任务的回调中获取当前 Driver 对象。
- **返回**
- `Driver`: 全局 Driver 对象
- **异常**
- `ValueError`: 全局 Driver 对象尚未初始化 (nonebot.init 尚未调用)
- **用法**
```python
driver = nonebot.get_driver()
```
## `get_app()`
- **说明**
获取全局 Driver 对应 Server App 对象。
- **返回**
- `Any`: Server App 对象
- **异常**
- `ValueError`: 全局 Driver 对象尚未初始化 (nonebot.init 尚未调用)
- **用法**
```python
app = nonebot.get_app()
```
## `get_asgi()`
- **说明**
获取全局 Driver 对应 Asgi 对象。
- **返回**
- `Any`: Asgi 对象
- **异常**
- `ValueError`: 全局 Driver 对象尚未初始化 (nonebot.init 尚未调用)
- **用法**
```python
asgi = nonebot.get_asgi()
```
## `get_bot(self_id=None)`
- **说明**
当提供 self_id 时,此函数是 get_bots()[self_id] 的简写;当不提供时,返回一个 Bot。
- **参数**
- `self_id: Optional[str]`: 用来识别 Bot 的 ID
- **返回**
- `Bot`: Bot 对象
- **异常**
- `KeyError`: 对应 ID 的 Bot 不存在
- `ValueError`: 全局 Driver 对象尚未初始化 (nonebot.init 尚未调用)
- `ValueError`: 没有传入 ID 且没有 Bot 可用
- **用法**
```python
assert nonebot.get_bot('12345') == nonebot.get_bots()['12345']
another_unspecified_bot = nonebot.get_bot()
```
## `get_bots()`
- **说明**
获取所有通过 ws 连接 NoneBot 的 Bot 对象。
- **返回**
- `Dict[str, Bot]`: 一个以字符串 ID 为键Bot 对象为值的字典
- **异常**
- `ValueError`: 全局 Driver 对象尚未初始化 (nonebot.init 尚未调用)
- **用法**
```python
bots = nonebot.get_bots()
```
## `init(*, _env_file=None, **kwargs)`
- **说明**
初始化 NoneBot 以及 全局 Driver 对象。
NoneBot 将会从 .env 文件中读取环境信息,并使用相应的 env 文件配置。
你也可以传入自定义的 \_env_file 来指定 NoneBot 从该文件读取配置。
- **参数**
- `_env_file: Optional[str]`: 配置文件名,默认从 .env.{env_name} 中读取配置
- `**kwargs`: 任意变量,将会存储到 Config 对象里
- **返回**
- `None`
- **用法**
```python
nonebot.init(database=Database(...))
```
## `run(*args, **kwargs)`
- **说明**
启动 NoneBot即运行全局 Driver 对象。
- **参数**
- `*args`: 传入 Driver.run 的位置参数
- `**kwargs`: 传入 Driver.run 的命名参数
- **返回**
- `None`
- **用法**
```python
nonebot.run(host="127.0.0.1", port=8080)
```

View File

@ -0,0 +1,327 @@
---
id: index
slug: /api/adapters/
---
# NoneBot.adapters 模块
## 协议适配基类
各协议请继承以下基类,并使用 `driver.register_adapter` 注册适配器
## _class_ `Bot`
基类:`abc.ABC`
Bot 基类。用于处理上报消息,并提供 API 调用接口。
### `_calling_api_hook`
- **类型**
`Set[T_CallingAPIHook]`
- **说明**
call_api 时执行的函数
### `_called_api_hook`
- **类型**
`Set[T_CalledAPIHook]`
- **说明**
call_api 后执行的函数
### `__init__(adapter, self_id)`
- **参数**
- `self_id: str`: 机器人 ID
- `request: HTTPConnection`: request 连接对象
### `self_id`
机器人 ID
### _async_ `call_api(api, **data)`
- **说明**
调用机器人 API 接口,可以通过该函数或直接通过 bot 属性进行调用
- **参数**
- `api: str`: API 名称
- `**data`: API 数据
- **示例**
```python
await bot.call_api("send_msg", message="hello world")
await bot.send_msg(message="hello world")
```
### _abstract async_ `send(event, message, **kwargs)`
- **说明**
调用机器人基础发送消息接口
- **参数**
- `event: Event`: 上报事件
- `message: Union[str, Message, MessageSegment]`: 要发送的消息
- `**kwargs`
### _classmethod_ `on_calling_api(func)`
- **说明**
调用 api 预处理。
- **参数**
- `bot: Bot`: 当前 bot 对象
- `api: str`: 调用的 api 名称
- `data: Dict[str, Any]`: api 调用的参数字典
### _classmethod_ `on_called_api(func)`
- **说明**
调用 api 后处理。
- **参数**
- `bot: Bot`: 当前 bot 对象
- `exception: Optional[Exception]`: 调用 api 时发生的错误
- `api: str`: 调用的 api 名称
- `data: Dict[str, Any]`: api 调用的参数字典
- `result: Any`: api 调用的返回
## _class_ `MessageSegment`
基类:`Mapping`, `abc.ABC`, `Generic`[`nonebot.adapters._message.TM`]
消息段基类
### `type`
- 类型: `str`
- 说明: 消息段类型
### `data`
- 类型: `Dict[str, Union[str, list]]`
- 说明: 消息段数据
## _class_ `Message`
基类:`List`[`nonebot.adapters._message.TMS`], `abc.ABC`
消息数组
### `__init__(message=None, *args, **kwargs)`
- **参数**
- `message: Union[str, list, dict, MessageSegment, Message, Any]`: 消息内容
### _classmethod_ `template(format_string)`
- **说明**
根据创建消息模板, 用法和 `str.format` 大致相同, 但是可以输出消息对象, 并且支持以 `Message` 对象作为消息模板
并且提供了拓展的格式化控制符, 可以用适用于该消息类型的 `MessageSegment` 的工厂方法创建消息
- **示例**
```python
>>> Message.template("{} {}").format("hello", "world") # 基础演示
Message(MessageSegment(type='text', data={'text': 'hello world'}))
>>> Message.template("{} {}").format(MessageSegment.image("file///..."), "world") # 支持消息段等对象
Message(MessageSegment(type='image', data={'file': 'file///...'}), MessageSegment(type='text', data={'text': 'world'}))
>>> Message.template( # 支持以Message对象作为消息模板
... MessageSegment.text('test {event.user_id}') + MessageSegment.face(233) +
... MessageSegment.text('test {event.message}')).format(event={'user_id':123456, 'message':'hello world'})
Message(MessageSegment(type='text', data={'text': 'test 123456'}),
MessageSegment(type='face', data={'face': 233}),
MessageSegment(type='text', data={'text': 'test hello world'}))
>>> Message.template("{link:image}").format(link='https://...') # 支持拓展格式化控制符
Message(MessageSegment(type='image', data={'file': 'https://...'}))
```
- **参数**
- `format_string: str`: 格式化字符串
- **返回**
- `MessageFormatter[TM]`: 消息格式化器
### `append(obj)`
- **说明**
添加一个消息段到消息数组末尾
- **参数**
- `obj: Union[str, MessageSegment]`: 要添加的消息段
### `extend(obj)`
- **说明**
拼接一个消息数组或多个消息段到消息数组末尾
- **参数**
- `obj: Union[Message, Iterable[MessageSegment]]`: 要添加的消息数组
### `extract_plain_text()`
- **说明**
提取消息内纯文本消息
## _class_ `Event`
基类:`abc.ABC`, `pydantic.main.BaseModel`
Event 基类。提供获取关键信息的方法,其余信息可直接获取。
### _abstract_ `get_type()`
- **说明**
获取事件类型的方法,类型通常为 NoneBot 内置的四种类型。
- **返回**
- `Literal["message", "notice", "request", "meta_event"]`
- 其他自定义 `str`
### _abstract_ `get_event_name()`
- **说明**
获取事件名称的方法。
- **返回**
- `str`
### _abstract_ `get_event_description()`
- **说明**
获取事件描述的方法,通常为事件具体内容。
- **返回**
- `str`
### `get_log_string()`
- **说明**
获取事件日志信息的方法,通常你不需要修改这个方法,只有当希望 NoneBot 隐藏该事件日志时,可以抛出 `NoLogException` 异常。
- **返回**
- `str`
- **异常**
- `NoLogException`
### _abstract_ `get_user_id()`
- **说明**
获取事件主体 id 的方法,通常是用户 id 。
- **返回**
- `str`
### _abstract_ `get_session_id()`
- **说明**
获取会话 id 的方法,用于判断当前事件属于哪一个会话,通常是用户 id、群组 id 组合。
- **返回**
- `str`
### _abstract_ `get_message()`
- **说明**
获取事件消息内容的方法。
- **返回**
- `Message`
### `get_plaintext()`
- **说明**
获取消息纯文本的方法,通常不需要修改,默认通过 `get_message().extract_plain_text` 获取。
- **返回**
- `str`
### _abstract_ `is_tome()`
- **说明**
获取事件是否与机器人有关的方法。
- **返回**
- `bool`
## _class_ `MessageTemplate`
基类:`string.Formatter`, `Generic`[`nonebot.adapters._template.TF`]
消息模板格式化实现类
### `__init__(template, factory=<class 'str'>)`
- **说明**
创建一个模板
- **参数**
- `template: Union[str, Message]`: 模板
- `factory: Union[str, Message]`: 消息构造类型,默认为 str
### `format(*args, **kwargs)`
- **说明**
根据模板和参数生成消息对象

View File

@ -0,0 +1,3 @@
{
"position": 14
}

View File

@ -0,0 +1,163 @@
---
sidebar_position: 2
---
# NoneBot.config 模块
## 配置
NoneBot 使用 [pydantic](https://pydantic-docs.helpmanual.io/) 以及 [python-dotenv](https://saurabh-kumar.com/python-dotenv/) 来读取配置。
配置项需符合特殊格式或 json 序列化格式。详情见 [pydantic Field Type](https://pydantic-docs.helpmanual.io/usage/types/) 文档。
## _class_ `Env`
基类:`nonebot.config.BaseConfig`
运行环境配置。大小写不敏感。
将会从 `nonebot.init 参数` > `环境变量` > `.env 环境配置文件` 的优先级读取配置。
### `environment`
- **类型**: `str`
- **默认值**: `"prod"`
- **说明**
当前环境名。 NoneBot 将从 `.env.{environment}` 文件中加载配置。
## _class_ `Config`
基类:`nonebot.config.BaseConfig`
NoneBot 主要配置。大小写不敏感。
除了 NoneBot 的配置项外,还可以自行添加配置项到 `.env.{environment}` 文件中。
这些配置将会在 json 反序列化后一起带入 `Config` 类中。
### `driver`
- **类型**: `str`
- **默认值**: `"~fastapi"`
- **说明**
NoneBot 运行所使用的 `Driver` 。继承自 `nonebot.drivers.Driver`
配置格式为 `<module>[:<Driver>][+<module>[:<Mixin>]]*`
`~``nonebot.drivers.` 的缩写。
### `host`
- **类型**: `IPvAnyAddress`
- **默认值**: `127.0.0.1`
- **说明**
NoneBot 的 HTTP 和 WebSocket 服务端监听的 IP/主机名。
### `port`
- **类型**: `int`
- **默认值**: `8080`
- **说明**
NoneBot 的 HTTP 和 WebSocket 服务端监听的端口。
### `log_level`
- **类型**: `Union[int, str]`
- **默认值**: `INFO`
- **说明**
配置 NoneBot 日志输出等级,可以为 `int` 类型等级或等级名称,参考 [loguru 日志等级](https://loguru.readthedocs.io/en/stable/api/logger.html#levels)。
- **示例**
```default
LOG_LEVEL=25
LOG_LEVEL=INFO
```
### `api_timeout`
- **类型**: `Optional[float]`
- **默认值**: `30.`
- **说明**
API 请求超时时间,单位: 秒。
### `superusers`
- **类型**: `Set[str]`
- **默认值**: `set()`
- **说明**
机器人超级用户。
- **示例**
```default
SUPERUSERS=["12345789"]
```
### `nickname`
- **类型**: `Set[str]`
- **默认值**: `set()`
- **说明**
机器人昵称。
### `command_start`
- **类型**: `Set[str]`
- **默认值**: `{"/"}`
- **说明**
命令的起始标记,用于判断一条消息是不是命令。
### `command_sep`
- **类型**: `Set[str]`
- **默认值**: `{"."}`
- **说明**
命令的分隔标记,用于将文本形式的命令切分为元组(实际的命令名)。
### `session_expire_timeout`
- **类型**: `timedelta`
- **默认值**: `timedelta(minutes=2)`
- **说明**
等待用户回复的超时时间。
- **示例**
```default
SESSION_EXPIRE_TIMEOUT=120 # 单位: 秒
SESSION_EXPIRE_TIMEOUT=[DD ][HH:MM]SS[.ffffff]
SESSION_EXPIRE_TIMEOUT=P[DD]DT[HH]H[MM]M[SS]S # ISO 8601
```

View File

@ -0,0 +1,9 @@
---
sidebar_position: 8
---
# NoneBot.dependencies 模块
## 依赖注入处理模块
该模块实现了依赖注入的定义与处理。

View File

@ -0,0 +1,192 @@
---
id: index
slug: /api/drivers/
---
# NoneBot.drivers 模块
## 后端驱动适配基类
各驱动请继承以下基类
## _class_ `Driver`
基类:`abc.ABC`
Driver 基类。
### `_adapters`
- **类型**
`Dict[str, Adapter]`
- **说明**
已注册的适配器列表
### `_bot_connection_hook`
- **类型**
`Set[T_BotConnectionHook]`
- **说明**
Bot 连接建立时执行的函数
### `_bot_disconnection_hook`
- **类型**
`Set[T_BotDisconnectionHook]`
- **说明**
Bot 连接断开时执行的函数
### `__init__(env, config)`
- **参数**
- `env: Env`: 包含环境信息的 Env 对象
- `config: Config`: 包含配置信息的 Config 对象
### `env`
- **类型**
`str`
- **说明**
环境名称
### `config`
- **类型**
`Config`
- **说明**
配置对象
### `_clients`
- **类型**
`Dict[str, Bot]`
- **说明**
已连接的 Bot
### _property_ `bots`
- **类型**
`Dict[str, Bot]`
- **说明**
获取当前所有已连接的 Bot
### `register_adapter(adapter, **kwargs)`
- **说明**
注册一个协议适配器
- **参数**
- `name: str`: 适配器名称,用于在连接时进行识别
- `adapter: Type[Bot]`: 适配器 Class
- `**kwargs`: 其他传递给适配器的参数
### _abstract property_ `type`
驱动类型名称
### _abstract property_ `logger`
驱动专属 logger 日志记录器
### _abstract_ `run(*args, **kwargs)`
- **说明**
启动驱动框架
- **参数**
- `*args`
- `**kwargs`
### _abstract_ `on_startup(func)`
注册一个在驱动启动时运行的函数
### _abstract_ `on_shutdown(func)`
注册一个在驱动停止时运行的函数
### `on_bot_connect(func)`
- **说明**
装饰一个函数使他在 bot 通过 WebSocket 连接成功时执行。
- **函数参数**
- `bot: Bot`: 当前连接上的 Bot 对象
### `on_bot_disconnect(func)`
- **说明**
装饰一个函数使他在 bot 通过 WebSocket 连接断开时执行。
- **函数参数**
- `bot: Bot`: 当前连接上的 Bot 对象
### `_bot_connect(bot)`
在 WebSocket 连接成功后,调用该函数来注册 bot 对象
### `_bot_disconnect(bot)`
在 WebSocket 连接断开后,调用该函数来注销 bot 对象
## _class_ `ForwardDriver`
基类:`nonebot.drivers.Driver`, `nonebot.drivers.ForwardMixin`
Forward Driver 基类。将客户端框架封装,以满足适配器使用。
## _class_ `ReverseDriver`
基类:`nonebot.drivers.Driver`
Reverse Driver 基类。将后端框架封装,以满足适配器使用。
### _abstract property_ `server_app`
驱动 APP 对象
### _abstract property_ `asgi`
驱动 ASGI 对象
## _class_ `HTTPServerSetup`
基类:`object`
## _class_ `WebSocketServerSetup`
基类:`object`

View File

@ -0,0 +1,3 @@
{
"position": 13
}

View File

@ -0,0 +1,5 @@
# NoneBot.drivers.aiohttp 模块
## AIOHTTP 驱动适配
本驱动仅支持客户端连接

View File

@ -0,0 +1,127 @@
# NoneBot.drivers.fastapi 模块
## FastAPI 驱动适配
本驱动同时支持服务端以及客户端连接
后端使用方法请参考: [FastAPI 文档](https://fastapi.tiangolo.com/)
## _class_ `Config`
基类:`pydantic.env_settings.BaseSettings`
FastAPI 驱动框架设置,详情参考 FastAPI 文档
### `fastapi_openapi_url`
- **类型**
`Optional[str]`
- **说明**
`openapi.json` 地址,默认为 `None` 即关闭
### `fastapi_docs_url`
- **类型**
`Optional[str]`
- **说明**
`swagger` 地址,默认为 `None` 即关闭
### `fastapi_redoc_url`
- **类型**
`Optional[str]`
- **说明**
`redoc` 地址,默认为 `None` 即关闭
### `fastapi_reload`
- **类型**
`bool`
- **说明**
开启/关闭冷重载
### `fastapi_reload_dirs`
- **类型**
`Optional[List[str]]`
- **说明**
重载监控文件夹列表,默认为 uvicorn 默认值
### `fastapi_reload_delay`
- **类型**
`Optional[float]`
- **说明**
重载延迟,默认为 uvicorn 默认值
### `fastapi_reload_includes`
- **类型**
`Optional[List[str]]`
- **说明**
要监听的文件列表,支持 glob pattern默认为 uvicorn 默认值
### `fastapi_reload_excludes`
- **类型**
`Optional[List[str]]`
- **说明**
不要监听的文件列表,支持 glob pattern默认为 uvicorn 默认值
## _class_ `Driver`
基类:[`nonebot.drivers.ReverseDriver`](README.md#nonebot.drivers.ReverseDriver)
FastAPI 驱动框架。包含反向 Server 功能。
### _property_ `type`
驱动名称: `fastapi`
### _property_ `server_app`
`FastAPI APP` 对象
### _property_ `asgi`
`FastAPI APP` 对象
### _property_ `logger`
fastapi 使用的 logger
### `on_startup(func)`
参考文档: [Events](https://fastapi.tiangolo.com/advanced/events/#startup-event)
### `on_shutdown(func)`
参考文档: [Events](https://fastapi.tiangolo.com/advanced/events/#startup-event)
### `run(host=None, port=None, *, app=None, **kwargs)`
使用 `uvicorn` 启动 FastAPI

View File

@ -0,0 +1 @@
# NoneBot.drivers.httpx 模块

View File

@ -0,0 +1,95 @@
# NoneBot.drivers.quart 模块
## Quart 驱动适配
后端使用方法请参考: [Quart 文档](https://pgjones.gitlab.io/quart/index.html)
## _class_ `Config`
基类:`pydantic.env_settings.BaseSettings`
Quart 驱动框架设置
### `quart_reload`
- **类型**
`bool`
- **说明**
开启/关闭冷重载
### `quart_reload_dirs`
- **类型**
`Optional[List[str]]`
- **说明**
重载监控文件夹列表,默认为 uvicorn 默认值
### `quart_reload_delay`
- **类型**
`Optional[float]`
- **说明**
重载延迟,默认为 uvicorn 默认值
### `quart_reload_includes`
- **类型**
`Optional[List[str]]`
- **说明**
要监听的文件列表,支持 glob pattern默认为 uvicorn 默认值
### `quart_reload_excludes`
- **类型**
`Optional[List[str]]`
- **说明**
不要监听的文件列表,支持 glob pattern默认为 uvicorn 默认值
## _class_ `Driver`
基类:[`nonebot.drivers.ReverseDriver`](README.md#nonebot.drivers.ReverseDriver)
Quart 驱动框架
### _property_ `type`
驱动名称: `quart`
### _property_ `server_app`
`Quart` 对象
### _property_ `asgi`
`Quart` 对象
### _property_ `logger`
Quart 使用的 logger
### `on_startup(func)`
参考文档: [Startup and Shutdown](https://pgjones.gitlab.io/quart/how_to_guides/startup_shutdown.html)
### `on_shutdown(func)`
参考文档: [Startup and Shutdown](https://pgjones.gitlab.io/quart/how_to_guides/startup_shutdown.html)
### `run(host=None, port=None, *, app=None, **kwargs)`
使用 `uvicorn` 启动 Quart

View File

@ -0,0 +1 @@
# NoneBot.drivers.websockets 模块

View File

@ -0,0 +1,203 @@
---
sidebar_position: 12
---
# NoneBot.exception 模块
## 异常
下列文档中的异常是所有 NoneBot 运行时可能会抛出的。
这些异常并非所有需要用户处理,在 NoneBot 内部运行时被捕获,并进行对应操作。
## _exception_ `NoneBotException`
基类:`Exception`
- **说明**
所有 NoneBot 发生的异常基类。
## _exception_ `ParserExit`
基类:`nonebot.exception.NoneBotException`
- **说明**
`shell command` 处理消息失败时返回的异常
- **参数**
- `status`
- `message`
## _exception_ `ProcessException`
基类:`nonebot.exception.NoneBotException`
- **说明**
事件处理过程中发生的异常基类。
## _exception_ `IgnoredException`
基类:`nonebot.exception.ProcessException`
- **说明**
指示 NoneBot 应该忽略该事件。可由 PreProcessor 抛出。
- **参数**
- `reason`: 忽略事件的原因
## _exception_ `MockApiException`
基类:`nonebot.exception.ProcessException`
- **说明**
指示 NoneBot 阻止本次 API 调用或修改本次调用返回值,并返回自定义内容。可由 api hook 抛出。
- **参数**
- `result`: 返回的内容
## _exception_ `StopPropagation`
基类:`nonebot.exception.ProcessException`
- **说明**
指示 NoneBot 终止事件向下层传播。
- **用法**
`Matcher.block == True` 时抛出。
## _exception_ `MatcherException`
基类:`nonebot.exception.NoneBotException`
- **说明**
所有 Matcher 发生的异常基类。
## _exception_ `SkippedException`
基类:`nonebot.exception.MatcherException`
- **说明**
指示 NoneBot 立即结束当前 `Handler` 的处理,继续处理下一个 `Handler`
- **用法**
可以在 `Handler` 中通过 `Matcher.skip()` 抛出。
## _exception_ `TypeMisMatch`
基类:`nonebot.exception.SkippedException`
- **说明**
当前 `Handler` 的参数类型不匹配。
## _exception_ `PausedException`
基类:`nonebot.exception.MatcherException`
- **说明**
指示 NoneBot 结束当前 `Handler` 并等待下一条消息后继续下一个 `Handler`
可用于用户输入新信息。
- **用法**
可以在 `Handler` 中通过 `Matcher.pause()` 抛出。
## _exception_ `RejectedException`
基类:`nonebot.exception.MatcherException`
- **说明**
指示 NoneBot 结束当前 `Handler` 并等待下一条消息后重新运行当前 `Handler`
可用于用户重新输入。
- **用法**
可以在 `Handler` 中通过 `Matcher.reject()` 抛出。
## _exception_ `FinishedException`
基类:`nonebot.exception.MatcherException`
- **说明**
指示 NoneBot 结束当前 `Handler` 且后续 `Handler` 不再被运行。
可用于结束用户会话。
- **用法**
可以在 `Handler` 中通过 `Matcher.finish()` 抛出。
## _exception_ `AdapterException`
基类:`nonebot.exception.NoneBotException`
- **说明**
代表 `Adapter` 抛出的异常,所有的 `Adapter` 都要在内部继承自这个 `Exception`
- **参数**
- `adapter_name: str`: 标识 adapter
## _exception_ `NoLogException`
基类:`nonebot.exception.AdapterException`
- **说明**
指示 NoneBot 对当前 `Event` 进行处理但不显示 Log 信息,可在 `get_log_string` 时抛出
## _exception_ `ApiNotAvailable`
基类:`nonebot.exception.AdapterException`
- **说明**
在 API 连接不可用时抛出。
## _exception_ `NetworkError`
基类:`nonebot.exception.AdapterException`
- **说明**
在网络出现问题时抛出,如: API 请求地址不正确, API 请求无返回或返回状态非正常等。
## _exception_ `ActionFailed`
基类:`nonebot.exception.AdapterException`
- **说明**
API 请求成功返回数据,但 API 操作失败。
## _exception_ `DriverException`
基类:`nonebot.exception.NoneBotException`
- **说明**
`Driver` 抛出的异常基类
## _exception_ `WebSocketClosed`
基类:`nonebot.exception.DriverException`
- **说明**
WebSocket 连接已关闭

View File

@ -0,0 +1,31 @@
---
sidebar_position: 9
---
# NoneBot.log 模块
## 日志
NoneBot 使用 [loguru](https://github.com/Delgan/loguru) 来记录日志信息。
自定义 logger 请参考 [loguru](https://github.com/Delgan/loguru) 文档。
## `logger`
- **说明**
NoneBot 日志记录器对象。
- **默认信息**
- 格式: `[%(asctime)s %(name)s] %(levelname)s: %(message)s`
- 等级: `INFO` ,根据 `config.log_level` 配置改变
- 输出: 输出至 stdout
- **用法**
```python
from nonebot.log import logger
```

View File

@ -0,0 +1,390 @@
---
sidebar_position: 5
---
# NoneBot.matcher 模块
## 事件响应器
该模块实现事件响应器的创建与运行,并提供一些快捷方法来帮助用户更好的与机器人进行对话 。
## `matchers`
- **类型**
`Dict[int, List[Type[Matcher]]]`
- **说明**
用于存储当前所有的事件响应器
## _class_ `Matcher`
基类:`object`
事件响应器类
### `plugin`
- **类型**
`Optional[Plugin]`
- **说明**
事件响应器所在插件
### `module`
- **类型**
`Optional[ModuleType]`
- **说明**
事件响应器所在插件模块
### `plugin_name`
- **类型**
`Optional[str]`
- **说明**
事件响应器所在插件名
### `module_name`
- **类型**
`Optional[str]`
- **说明**
事件响应器所在点分割插件模块路径
### `type`
- **类型**
`str`
- **说明**
事件响应器类型
### `rule`
- **类型**
`Rule`
- **说明**
事件响应器匹配规则
### `permission`
- **类型**
`Permission`
- **说明**
事件响应器触发权限
### `priority`
- **类型**
`int`
- **说明**
事件响应器优先级
### `block`
- **类型**
`bool`
- **说明**
事件响应器是否阻止事件传播
### `temp`
- **类型**
`bool`
- **说明**
事件响应器是否为临时
### `expire_time`
- **类型**
`Optional[datetime]`
- **说明**
事件响应器过期时间点
### `_default_state`
- **类型**
`T_State`
- **说明**
事件响应器默认状态
### `_default_type_updater`
- **类型**
`Optional[Dependent]`
- **说明**
事件响应器类型更新函数
### `_default_permission_updater`
- **类型**
`Optional[Dependent]`
- **说明**
事件响应器权限更新函数
### `__init__()`
实例化 Matcher 以便运行
### `handlers`
- **类型**
`List[Handler]`
- **说明**
事件响应器拥有的事件处理函数列表
### _classmethod_ `new(type_='', rule=None, permission=None, handlers=None, temp=False, priority=1, block=False, *, plugin=None, module=None, expire_time=None, default_state=None, default_type_updater=None, default_permission_updater=None)`
- **说明**
创建一个新的事件响应器,并存储至 [matchers](#matchers)
- **参数**
- `type_: str`: 事件响应器类型,与 `event.get_type()` 一致时触发,空字符串表示任意
- `rule: Optional[Rule]`: 匹配规则
- `permission: Optional[Permission]`: 权限
- `handlers: Optional[List[T_Handler]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器,即触发一次后删除
- `priority: int`: 响应优先级
- `block: bool`: 是否阻止事件向更低优先级的响应器传播
- `plugin: Optional[Plugin]`: 事件响应器所在插件
- `module: Optional[ModuleType]`: 事件响应器所在模块
- `default_state: Optional[T_State]`: 默认状态 `state`
- `expire_time: Optional[datetime]`: 事件响应器最终有效时间点,过时即被删除
- **返回**
- `Type[Matcher]`: 新的事件响应器类
### _async classmethod_ `check_perm(bot, event, stack=None, dependency_cache=None)`
- **说明**
检查是否满足触发权限
- **参数**
- `bot: Bot`: Bot 对象
- `event: Event`: 上报事件
- **返回**
- `bool`: 是否满足权限
### _async classmethod_ `check_rule(bot, event, state, stack=None, dependency_cache=None)`
- **说明**
检查是否满足匹配规则
- **参数**
- `bot: Bot`: Bot 对象
- `event: Event`: 上报事件
- `state: T_State`: 当前状态
- **返回**
- `bool`: 是否满足匹配规则
### _classmethod_ `type_updater(func)`
- **说明**
装饰一个函数来更改当前事件响应器的默认响应事件类型更新函数
- **参数**
- `func: T_TypeUpdater`: 响应事件类型更新函数
### _classmethod_ `permission_updater(func)`
- **说明**
装饰一个函数来更改当前事件响应器的默认会话权限更新函数
- **参数**
- `func: T_PermissionUpdater`: 会话权限更新函数
### _classmethod_ `handle(parameterless=None)`
- **说明**
装饰一个函数来向事件响应器直接添加一个处理函数
- **参数**
- `parameterless: Optional[List[Any]]`: 非参数类型依赖列表
### _classmethod_ `receive(id='', parameterless=None)`
- **说明**
装饰一个函数来指示 NoneBot 在接收用户新的一条消息后继续运行该函数
- **参数**
- `id: str`: 消息 ID
- `parameterless: Optional[List[Any]]`: 非参数类型依赖列表
### _classmethod_ `got(key, prompt=None, parameterless=None)`
- **说明**
装饰一个函数来指示 NoneBot 当要获取的 `key` 不存在时接收用户新的一条消息并经过 `ArgsParser` 处理后再运行该函数,如果 `key` 已存在则直接继续运行
- **参数**
- `key: str`: 参数名
- `prompt: Optional[Union[str, Message, MessageSegment, MessageFormatter]]`: 在参数不存在时向用户发送的消息
- `args_parser: Optional[T_ArgsParser]`: 可选参数解析函数,空则使用默认解析函数
- `parameterless: Optional[List[Any]]`: 非参数类型依赖列表
### _async classmethod_ `send(message, **kwargs)`
- **说明**
发送一条消息给当前交互用户
- **参数**
- `message: Union[str, Message, MessageSegment]`: 消息内容
- `**kwargs`: 其他传递给 `bot.send` 的参数,请参考对应 adapter 的 bot 对象 api
### _async classmethod_ `finish(message=None, **kwargs)`
- **说明**
发送一条消息给当前交互用户并结束当前事件响应器
- **参数**
- `message: Union[str, Message, MessageSegment, MessageTemplate]`: 消息内容
- `**kwargs`: 其他传递给 `bot.send` 的参数,请参考对应 adapter 的 bot 对象 api
### _async classmethod_ `pause(prompt=None, **kwargs)`
- **说明**
发送一条消息给当前交互用户并暂停事件响应器,在接收用户新的一条消息后继续下一个处理函数
- **参数**
- `prompt: Union[str, Message, MessageSegment, MessageTemplate]`: 消息内容
- `**kwargs`: 其他传递给 `bot.send` 的参数,请参考对应 adapter 的 bot 对象 api
### _async classmethod_ `reject(prompt=None, **kwargs)`
- **说明**
最近使用 `got` / `receive` 接收的消息不符合预期,发送一条消息给当前交互用户并暂停事件响应器,
在接收用户新的一条消息后继续当前处理函数
- **参数**
- `prompt: Union[str, Message, MessageSegment, MessageTemplate]`: 消息内容
- `**kwargs`: 其他传递给 `bot.send` 的参数,请参考对应 adapter 的 bot 对象 api
### _async classmethod_ `reject_arg(key, prompt=None, **kwargs)`
- **说明**
最近使用 `got` 接收的消息不符合预期,发送一条消息给当前交互用户并暂停事件响应器,
在接收用户新的一条消息后继续当前处理函数
- **参数**
- `key: str`: 参数名
- `prompt: Union[str, Message, MessageSegment, MessageTemplate]`: 消息内容
- `**kwargs`: 其他传递给 `bot.send` 的参数,请参考对应 adapter 的 bot 对象 api
### _async classmethod_ `reject_receive(id='', prompt=None, **kwargs)`
- **说明**
最近使用 `got` 接收的消息不符合预期,发送一条消息给当前交互用户并暂停事件响应器,
在接收用户新的一条消息后继续当前处理函数
- **参数**
- `id: str`: 消息 id
- `prompt: Union[str, Message, MessageSegment, MessageTemplate]`: 消息内容
- `**kwargs`: 其他传递给 `bot.send` 的参数,请参考对应 adapter 的 bot 对象 api
### `stop_propagation()`
- **说明**
阻止事件传播

View File

@ -0,0 +1,52 @@
---
sidebar_position: 4
---
# NoneBot.message 模块
## 事件处理
NoneBot 内部处理并按优先级分发事件给所有事件响应器,提供了多个插槽以进行事件的预处理等。
## `event_preprocessor(func)`
- **说明**
事件预处理。装饰一个函数,使它在每次接收到事件并分发给各响应器之前执行。
## `event_postprocessor(func)`
- **说明**
事件后处理。装饰一个函数,使它在每次接收到事件并分发给各响应器之后执行。
## `run_preprocessor(func)`
- **说明**
运行预处理。装饰一个函数,使它在每次事件响应器运行前执行。
## `run_postprocessor(func)`
- **说明**
运行后处理。装饰一个函数,使它在每次事件响应器运行后执行。
## _async_ `handle_event(bot, event)`
- **说明**
处理一个事件。调用该函数以实现分发事件。
- **参数**
- `bot: Bot`: Bot 对象
- `event: Event`: Event 对象
- **示例**
```python
import asyncio
asyncio.create_task(handle_event(bot, event))
```

View File

@ -0,0 +1,98 @@
---
sidebar_position: 7
---
# NoneBot.permission 模块
## 权限
每个 `Matcher` 拥有一个 `Permission` ,其中是 `PermissionChecker` 的集合,只要有一个 `PermissionChecker` 检查结果为 `True` 时就会继续运行。
:::tip 提示
`PermissionChecker` 既可以是 async function 也可以是 sync function
:::
## _class_ `Permission`
基类:`object`
- **说明**
`Matcher` 规则类,当事件传递时,在 `Matcher` 运行前进行检查。
- **示例**
```python
Permission(async_function) | sync_function
# 等价于
from nonebot.utils import run_sync
Permission(async_function, run_sync(sync_function))
```
### `__init__(*checkers)`
- **参数**
- `*checkers: Union[T_PermissionChecker, Dependent[bool]`: PermissionChecker
### `checkers`
- **说明**
存储 `PermissionChecker`
- **类型**
- `Set[Dependent[bool]]`
### _async_ `__call__(bot, event, stack=None, dependency_cache=None)`
- **说明**
检查是否满足某个权限
- **参数**
- `bot: Bot`: Bot 对象
- `event: Event`: Event 对象
- `stack: Optional[AsyncExitStack]`: 异步上下文栈
- `dependency_cache: Optional[CacheDict[T_Handler, Any]]`: 依赖缓存
- **返回**
- `bool`
## `MESSAGE`
- **说明**: 匹配任意 `message` 类型事件,仅在需要同时捕获不同类型事件时使用。优先使用 message type 的 Matcher。
## `NOTICE`
- **说明**: 匹配任意 `notice` 类型事件,仅在需要同时捕获不同类型事件时使用。优先使用 notice type 的 Matcher。
## `REQUEST`
- **说明**: 匹配任意 `request` 类型事件,仅在需要同时捕获不同类型事件时使用。优先使用 request type 的 Matcher。
## `METAEVENT`
- **说明**: 匹配任意 `meta_event` 类型事件,仅在需要同时捕获不同类型事件时使用。优先使用 meta_event type 的 Matcher。
## `USER(*users, perm=None)`
- **说明**
`event``session_id` 在白名单内且满足 perm
- **参数**
- `*user: str`: 白名单
- `perm: Optional[Permission]`: 需要同时满足的权限
## `SUPERUSER`
- **说明**: 匹配任意超级用户消息类型事件

View File

@ -0,0 +1,953 @@
---
sidebar_position: 3
---
# NoneBot.plugin 模块
## 插件
为 NoneBot 插件开发提供便携的定义函数。
## `plugins`
- **类型**
`Dict[str, Plugin]`
- **说明**
已加载的插件
## _class_ `Plugin`
基类:`object`
存储插件信息
### `name`
- **类型**: `str`
- **说明**: 插件名称,使用 文件/文件夹 名称作为插件名
### `module`
- **类型**: `ModuleType`
- **说明**: 插件模块对象
### `module_name`
- **类型**: `str`
- **说明**: 点分割模块路径
### `manager`
- **类型**: `PluginManager`
- **说明**: 导入该插件的插件管理器
### `export`
- **类型**: `Export`
- **说明**: 插件内定义的导出内容
### `matcher`
- **类型**: `Set[Type[Matcher]]`
- **说明**: 插件内定义的 `Matcher`
### `parent_plugin`
- **类型**: `Optional[Plugin]`
- **说明**: 父插件
### `sub_plugins`
- **类型**: `Set[Plugin]`
- **说明**: 子插件集合
## `get_plugin(name)`
- **说明**
获取当前导入的某个插件。
- **参数**
- `name: str`: 插件名,与 `load_plugin` 参数一致。如果为 `load_plugins` 导入的插件,则为文件(夹)名。
- **返回**
- `Optional[Plugin]`
## `get_loaded_plugins()`
- **说明**
获取当前已导入的所有插件。
- **返回**
- `Set[Plugin]`
## `on(type='', rule=None, permission=None, *, handlers=None, temp=False, priority=1, block=False, state=None, _depth=0)`
- **说明**
注册一个基础事件响应器,可自定义类型。
- **参数**
- `type: str`: 事件响应器类型
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
## `on_metaevent(rule=None, *, handlers=None, temp=False, priority=1, block=False, state=None, _depth=0)`
- **说明**
注册一个元事件响应器。
- **参数**
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
## `on_message(rule=None, permission=None, *, handlers=None, temp=False, priority=1, block=True, state=None, _depth=0)`
- **说明**
注册一个消息事件响应器。
- **参数**
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
## `on_notice(rule=None, *, handlers=None, temp=False, priority=1, block=False, state=None, _depth=0)`
- **说明**
注册一个通知事件响应器。
- **参数**
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
## `on_request(rule=None, *, handlers=None, temp=False, priority=1, block=False, state=None, _depth=0)`
- **说明**
注册一个请求事件响应器。
- **参数**
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
## `on_startswith(msg, rule=None, ignorecase=False, _depth=0, **kwargs)`
- **说明**
注册一个消息事件响应器,并且当消息的\*\*文本部分\*\*以指定内容开头时响应。
- **参数**
- `msg: Union[str, Tuple[str, ...]]`: 指定消息开头内容
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `ignorecase: bool`: 是否忽略大小写
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
## `on_endswith(msg, rule=None, ignorecase=False, _depth=0, **kwargs)`
- **说明**
注册一个消息事件响应器,并且当消息的\*\*文本部分\*\*以指定内容结尾时响应。
- **参数**
- `msg: Union[str, Tuple[str, ...]]`: 指定消息结尾内容
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `ignorecase: bool`: 是否忽略大小写
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
## `on_keyword(keywords, rule=None, _depth=0, **kwargs)`
- **说明**
注册一个消息事件响应器,并且当消息纯文本部分包含关键词时响应。
- **参数**
- `keywords: Set[str]`: 关键词列表
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
## `on_command(cmd, rule=None, aliases=None, _depth=0, **kwargs)`
- **说明**
注册一个消息事件响应器,并且当消息以指定命令开头时响应。
命令匹配规则参考: [命令形式匹配](rule.md#command-command)
- **参数**
- `cmd: Union[str, Tuple[str, ...]]`: 指定命令内容
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `aliases: Optional[Set[Union[str, Tuple[str, ...]]]]`: 命令别名
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
## `on_shell_command(cmd, rule=None, aliases=None, parser=None, _depth=0, **kwargs)`
- **说明**
注册一个支持 `shell_like` 解析参数的命令消息事件响应器。
与普通的 `on_command` 不同的是,在添加 `parser` 参数时, 响应器会自动处理消息。
并将用户输入的原始参数列表保存在 `state["argv"]`, `parser` 处理的参数保存在 `state["args"]`
- **参数**
- `cmd: Union[str, Tuple[str, ...]]`: 指定命令内容
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `aliases: Optional[Set[Union[str, Tuple[str, ...]]]]`: 命令别名
- `parser: Optional[ArgumentParser]`: `nonebot.rule.ArgumentParser` 对象
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
## `on_regex(pattern, flags=0, rule=None, _depth=0, **kwargs)`
- **说明**
注册一个消息事件响应器,并且当消息匹配正则表达式时响应。
命令匹配规则参考: [正则匹配](rule.md#regex-regex-flags-0)
- **参数**
- `pattern: str`: 正则表达式
- `flags: Union[int, re.RegexFlag]`: 正则匹配标志
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
## _class_ `CommandGroup`
基类:`object`
命令组,用于声明一组有相同名称前缀的命令。
### `__init__(cmd, **kwargs)`
- **参数**
- `cmd: Union[str, Tuple[str, ...]]`: 命令前缀
- `**kwargs`: 其他传递给 `on_command` 的参数默认值,参考 [on_command](#on-command-cmd-rule-none-aliases-none-kwargs)
### `basecmd`
- **类型**: `Tuple[str, ...]`
- **说明**: 命令前缀
### `base_kwargs`
- **类型**: `Dict[str, Any]`
- **说明**: 其他传递给 `on_command` 的参数默认值
### `command(cmd, **kwargs)`
- **说明**
注册一个新的命令。
- **参数**
- `cmd: Union[str, Tuple[str, ...]]`: 命令前缀
- `**kwargs`: 其他传递给 `on_command` 的参数,将会覆盖命令组默认值
- **返回**
- `Type[Matcher]`
### `shell_command(cmd, **kwargs)`
- **说明**
注册一个新的命令。
- **参数**
- `cmd: Union[str, Tuple[str, ...]]`: 命令前缀
- `**kwargs`: 其他传递给 `on_shell_command` 的参数,将会覆盖命令组默认值
- **返回**
- `Type[Matcher]`
## _class_ `MatcherGroup`
基类:`object`
事件响应器组合,统一管理。为 `Matcher` 创建提供默认属性。
### `__init__(**kwargs)`
- **说明**
创建一个事件响应器组合,参数为默认值,与 `on` 一致
### `matchers`
- **类型**
`List[Type[Matcher]]`
- **说明**
组内事件响应器列表
### `base_kwargs`
- **类型**: `Dict[str, Any]`
- **说明**: 其他传递给 `on` 的参数默认值
### `on(**kwargs)`
- **说明**
注册一个基础事件响应器,可自定义类型。
- **参数**
- `type: str`: 事件响应器类型
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
### `on_metaevent(**kwargs)`
- **说明**
注册一个元事件响应器。
- **参数**
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
### `on_message(**kwargs)`
- **说明**
注册一个消息事件响应器。
- **参数**
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
### `on_notice(**kwargs)`
- **说明**
注册一个通知事件响应器。
- **参数**
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
### `on_request(**kwargs)`
- **说明**
注册一个请求事件响应器。
- **参数**
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
### `on_startswith(msg, **kwargs)`
- **说明**
注册一个消息事件响应器,并且当消息的\*\*文本部分\*\*以指定内容开头时响应。
- **参数**
- `msg: Union[str, Tuple[str, ...]]`: 指定消息开头内容
- `ignorecase: bool`: 是否忽略大小写
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
### `on_endswith(msg, **kwargs)`
- **说明**
注册一个消息事件响应器,并且当消息的\*\*文本部分\*\*以指定内容结尾时响应。
- **参数**
- `msg: Union[str, Tuple[str, ...]]`: 指定消息结尾内容
- `ignorecase: bool`: 是否忽略大小写
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
### `on_keyword(keywords, **kwargs)`
- **说明**
注册一个消息事件响应器,并且当消息纯文本部分包含关键词时响应。
- **参数**
- `keywords: Set[str]`: 关键词列表
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
### `on_command(cmd, aliases=None, **kwargs)`
- **说明**
注册一个消息事件响应器,并且当消息以指定命令开头时响应。
命令匹配规则参考: [命令形式匹配](rule.md#command-command)
- **参数**
- `cmd: Union[str, Tuple[str, ...]]`: 指定命令内容
- `aliases: Optional[Set[Union[str, Tuple[str, ...]]]]`: 命令别名
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
### `on_shell_command(cmd, aliases=None, parser=None, **kwargs)`
- **说明**
注册一个支持 `shell_like` 解析参数的命令消息事件响应器。
与普通的 `on_command` 不同的是,在添加 `parser` 参数时, 响应器会自动处理消息。
并将用户输入的原始参数列表保存在 `state["argv"]`, `parser` 处理的参数保存在 `state["args"]`
- **参数**
- `cmd: Union[str, Tuple[str, ...]]`: 指定命令内容
- `aliases: Optional[Set[Union[str, Tuple[str, ...]]]]`: 命令别名
- `parser: Optional[ArgumentParser]`: `nonebot.rule.ArgumentParser` 对象
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
### `on_regex(pattern, flags=0, **kwargs)`
- **说明**
注册一个消息事件响应器,并且当消息匹配正则表达式时响应。
命令匹配规则参考: [正则匹配](rule.md#regex-regex-flags-0)
- **参数**
- `pattern: str`: 正则表达式
- `flags: Union[int, re.RegexFlag]`: 正则匹配标志
- `rule: Optional[Union[Rule, T_RuleChecker]]`: 事件响应规则
- `permission: Optional[Union[Permission, T_PermissionChecker]] =]]`: 事件响应权限
- `handlers: Optional[List[Union[T_Handler, Dependent]]]`: 事件处理函数列表
- `temp: bool`: 是否为临时事件响应器(仅执行一次)
- `priority: int`: 事件响应器优先级
- `block: bool`: 是否阻止事件向更低优先级传递
- `state: Optional[T_State]`: 默认 state
- **返回**
- `Type[Matcher]`
## `load_plugin(module_path)`
- **说明**
使用 `PluginManager` 加载单个插件,可以是本地插件或是通过 `pip` 安装的插件。
- **参数**
- `module_path: str`: 插件名称 `path.to.your.plugin`
- **返回**
- `Optional[Plugin]`
## `load_plugins(*plugin_dir)`
- **说明**
导入目录下多个插件,以 `_` 开头的插件不会被导入!
- **参数**
- `*plugin_dir: str`: 插件路径
- **返回**
- `Set[Plugin]`
## `load_all_plugins(module_path, plugin_dir)`
- **说明**
导入指定列表中的插件以及指定目录下多个插件,以 `_` 开头的插件不会被导入!
- **参数**
- `module_path: Iterable[str]`: 指定插件集合
- `plugin_dir: Iterable[str]`: 指定插件路径集合
- **返回**
- `Set[Plugin]`
## `load_from_json(file_path, encoding='utf-8')`
- **说明**
导入指定 json 文件中的 `plugins` 以及 `plugin_dirs` 下多个插件,以 `_` 开头的插件不会被导入!
- **参数**
- `file_path: str`: 指定 json 文件路径
- `encoding: str`: 指定 json 文件编码
- **返回**
- `Set[Plugin]`
## `load_from_toml(file_path, encoding='utf-8')`
- **说明**
导入指定 toml 文件 `[tool.nonebot]` 中的 `plugins` 以及 `plugin_dirs` 下多个插件,
`_` 开头的插件不会被导入!
- **参数**
- `file_path: str`: 指定 toml 文件路径
- `encoding: str`: 指定 toml 文件编码
- **返回**
- `Set[Plugin]`
## `load_builtin_plugins(name)`
- **说明**
导入 NoneBot 内置插件
- **返回**
- `Plugin`
## `require(name)`
- **说明**
获取一个插件的导出内容
- **参数**
- `name: str`: 插件名,与 `load_plugin` 参数一致。如果为 `load_plugins` 导入的插件,则为文件(夹)名。
- **返回**
- `Export`
- **异常**
- `RuntimeError`: 插件无法加载
## _class_ `Export`
基类:`dict`
- **说明**
插件导出内容以使得其他插件可以获得。
- **示例**
```python
nonebot.export().default = "bar"
@nonebot.export()
def some_function():
pass
# this doesn't work before python 3.9
# use
# export = nonebot.export(); @export.sub
# instead
# See also PEP-614: https://www.python.org/dev/peps/pep-0614/
@nonebot.export().sub
def something_else():
pass
```
## `export()`
- **说明**
获取插件的导出内容对象
- **返回**
- `Export`

View File

@ -0,0 +1,193 @@
---
sidebar_position: 6
---
# NoneBot.rule 模块
## 规则
每个事件响应器 `Matcher` 拥有一个匹配规则 `Rule` ,其中是 `RuleChecker` 的集合,只有当所有 `RuleChecker` 检查结果为 `True` 时继续运行。
:::tip 提示
`RuleChecker` 既可以是 async function 也可以是 sync function
:::
## _class_ `Rule`
基类:`object`
- **说明**
`Matcher` 规则类,当事件传递时,在 `Matcher` 运行前进行检查。
- **示例**
```python
Rule(async_function) & sync_function
# 等价于
from nonebot.utils import run_sync
Rule(async_function, run_sync(sync_function))
```
### `__init__(*checkers)`
- **参数**
- `*checkers: Union[T_RuleChecker, Dependent[bool]]`: RuleChecker
### `checkers`
- **说明**
存储 `RuleChecker`
- **类型**
- `Set[Dependent[bool]]`
### _async_ `__call__(bot, event, state, stack=None, dependency_cache=None)`
- **说明**
检查是否符合所有规则
- **参数**
- `bot: Bot`: Bot 对象
- `event: Event`: Event 对象
- `state: T_State`: 当前 State
- `stack: Optional[AsyncExitStack]`: 异步上下文栈
- `dependency_cache: Optional[CacheDict[T_Handler, Any]]`: 依赖缓存
- **返回**
- `bool`
## `startswith(msg, ignorecase=False)`
- **说明**
匹配消息开头
- **参数**
- `msg: str`: 消息开头字符串
## `endswith(msg, ignorecase=False)`
- **说明**
匹配消息结尾
- **参数**
- `msg: str`: 消息结尾字符串
## `keyword(*keywords)`
- **说明**
匹配消息关键词
- **参数**
- `*keywords: str`: 关键词
## `command(*cmds)`
- **说明**
命令形式匹配,根据配置里提供的 `command_start`, `command_sep` 判断消息是否为命令。
可以通过 `state["_prefix"]["command"]` 获取匹配成功的命令(例:`("test",)`),通过 `state["_prefix"]["raw_command"]` 获取匹配成功的原始命令文本(例:`"/test"`)。
- **参数**
- `*cmds: Union[str, Tuple[str, ...]]`: 命令内容
- **示例**
使用默认 `command_start`, `command_sep` 配置
命令 `("test",)` 可以匹配:`/test` 开头的消息
命令 `("test", "sub")` 可以匹配”`/test.sub` 开头的消息
:::tip 提示
命令内容与后续消息间无需空格!
:::
## _class_ `ArgumentParser`
基类:`argparse.ArgumentParser`
- **说明**
`shell_like` 命令参数解析器,解析出错时不会退出程序。
## `shell_command(*cmds, parser=None)`
- **说明**
支持 `shell_like` 解析参数的命令形式匹配,根据配置里提供的 `command_start`, `command_sep` 判断消息是否为命令。
可以通过 `state["_prefix"]["command"]` 获取匹配成功的命令(例:`("test",)`),通过 `state["_prefix"]["raw_command"]` 获取匹配成功的原始命令文本(例:`"/test"`)。
可以通过 `state["argv"]` 获取用户输入的原始参数列表
添加 `parser` 参数后, 可以自动处理消息并将结果保存在 `state["args"]` 中。
- **参数**
- `*cmds: Union[str, Tuple[str, ...]]`: 命令内容
- `parser: Optional[ArgumentParser]`: `nonebot.rule.ArgumentParser` 对象
- **示例**
使用默认 `command_start`, `command_sep` 配置,更多示例参考 `argparse` 标准库文档。
```python
from nonebot.rule import ArgumentParser
parser = ArgumentParser()
parser.add_argument("-a", action="store_true")
rule = shell_command("ls", parser=parser)
```
:::tip 提示
命令内容与后续消息间无需空格!
:::
## `regex(regex, flags=0)`
- **说明**
根据正则表达式进行匹配。
可以通过 `state["_matched"]` `state["_matched_groups"]` `state["_matched_dict"]`
获取正则表达式匹配成功的文本。
- **参数**
- `regex: str`: 正则表达式
- `flags: Union[int, re.RegexFlag]`: 正则标志
:::tip 提示
正则表达式匹配使用 search 而非 match如需从头匹配请使用 `r"^xxx"` 来确保匹配开头
:::
## `to_me()`
- **说明**
通过 `event.is_tome()` 判断事件是否与机器人有关
- **参数**
-

View File

@ -0,0 +1,267 @@
---
sidebar_position: 11
---
# NoneBot.typing 模块
## 类型
下面的文档中,「类型」部分使用 Python 的 Type Hint 语法,见 [PEP 484](https://www.python.org/dev/peps/pep-0484/)、[PEP 526](https://www.python.org/dev/peps/pep-0526/) 和 [typing](https://docs.python.org/3/library/typing.html)。
除了 Python 内置的类型,下面还出现了如下 NoneBot 自定类型,实际上它们是 Python 内置类型的别名。
以下类型均可从 nonebot.typing 模块导入。
## `T_State`
- **类型**
`Dict[Any, Any]`
- **说明**
事件处理状态 State 类型
## `T_BotConnectionHook`
- **类型**
`Callable[[Bot], Awaitable[None]]`
- **说明**
Bot 连接建立时执行的函数
## `T_BotDisconnectionHook`
- **类型**
`Callable[[Bot], Awaitable[None]]`
- **说明**
Bot 连接断开时执行的函数
## `T_CallingAPIHook`
- **类型**
`Callable[[Bot, str, Dict[str, Any]], Awaitable[None]]`
- **说明**
`bot.call_api` 时执行的函数
## `T_CalledAPIHook`
- **类型**
`Callable[[Bot, Optional[Exception], str, Dict[str, Any], Any], Awaitable[None]]`
- **说明**
`bot.call_api` 后执行的函数,参数分别为 bot, exception, api, data, result
## `T_EventPreProcessor`
- **类型**
`Callable[..., Union[None, Awaitable[None]]]`
- **依赖参数**
- `DependParam`: 子依赖参数
- `BotParam`: Bot 对象
- `EventParam`: Event 对象
- `StateParam`: State 对象
- `DefaultParam`: 带有默认值的参数
- **说明**
事件预处理函数 EventPreProcessor 类型
## `T_EventPostProcessor`
- **类型**
`Callable[..., Union[None, Awaitable[None]]]`
- **依赖参数**
- `DependParam`: 子依赖参数
- `BotParam`: Bot 对象
- `EventParam`: Event 对象
- `StateParam`: State 对象
- `DefaultParam`: 带有默认值的参数
- **说明**
事件预处理函数 EventPostProcessor 类型
## `T_RunPreProcessor`
- **类型**
`Callable[..., Union[None, Awaitable[None]]]`
- **依赖参数**
- `DependParam`: 子依赖参数
- `BotParam`: Bot 对象
- `EventParam`: Event 对象
- `StateParam`: State 对象
- `MatcherParam`: Matcher 对象
- `DefaultParam`: 带有默认值的参数
- **说明**
事件响应器运行前预处理函数 RunPreProcessor 类型
## `T_RunPostProcessor`
- **类型**
`Callable[..., Union[None, Awaitable[None]]]`
- **依赖参数**
- `DependParam`: 子依赖参数
- `BotParam`: Bot 对象
- `EventParam`: Event 对象
- `StateParam`: State 对象
- `MatcherParam`: Matcher 对象
- `ExceptionParam`: 异常对象(可能为 None
- `DefaultParam`: 带有默认值的参数
- **说明**
事件响应器运行前预处理函数 RunPostProcessor 类型,第二个参数为运行时产生的错误(如果存在)
## `T_RuleChecker`
- **类型**
`Callable[..., Union[bool, Awaitable[bool]]]`
- **依赖参数**
- `DependParam`: 子依赖参数
- `BotParam`: Bot 对象
- `EventParam`: Event 对象
- `StateParam`: State 对象
- `DefaultParam`: 带有默认值的参数
- **说明**
RuleChecker 即判断是否响应事件的处理函数。
## `T_PermissionChecker`
- **类型**
`Callable[..., Union[bool, Awaitable[bool]]]`
- **依赖参数**
- `DependParam`: 子依赖参数
- `BotParam`: Bot 对象
- `EventParam`: Event 对象
- `DefaultParam`: 带有默认值的参数
- **说明**
RuleChecker 即判断是否响应消息的处理函数。
## `T_Handler`
- **类型**
`Callable[..., Any]`
- **说明**
Handler 处理函数。
## `T_TypeUpdater`
- **类型**
`Callable[..., Union[None, Awaitable[None]]]`
- **依赖参数**
- `DependParam`: 子依赖参数
- `BotParam`: Bot 对象
- `EventParam`: Event 对象
- `StateParam`: State 对象
- `MatcherParam`: Matcher 对象
- `DefaultParam`: 带有默认值的参数
- **说明**
TypeUpdater 在 Matcher.pause, Matcher.reject 时被运行,用于更新响应的事件类型。默认会更新为 `message`
## `T_PermissionUpdater`
- **类型**
`Callable[..., Union[Permission, Awaitable[Permission]]]`
- **依赖参数**
- `DependParam`: 子依赖参数
- `BotParam`: Bot 对象
- `EventParam`: Event 对象
- `StateParam`: State 对象
- `MatcherParam`: Matcher 对象
- `DefaultParam`: 带有默认值的参数
- **说明**
PermissionUpdater 在 Matcher.pause, Matcher.reject 时被运行,用于更新会话对象权限。默认会更新为当前事件的触发对象。
## `T_DependencyCache`
- **类型**
`Dict[Callable[..., Any], Task[Any]]`
- **说明**
依赖缓存, 用于存储依赖函数的返回值

View File

@ -0,0 +1,55 @@
---
sidebar_position: 10
---
# NoneBot.utils 模块
## `escape_tag(s)`
- **说明**
用于记录带颜色日志时转义 `<tag>` 类型特殊标签
- **参数**
- `s: str`: 需要转义的字符串
- **返回**
- `str`
## `run_sync(call)`
- **说明**
一个用于包装 sync function 为 async function 的装饰器
- **参数**
- `call: Callable[P, R]`: 被装饰的同步函数
- **返回**
- `Callable[P, Awaitable[R]]`
## _class_ `DataclassEncoder`
基类:`json.encoder.JSONEncoder`
- **说明**
在 JSON 序列化 `Message` (List[Dataclass]) 时使用的 `JSONEncoder`
## `logger_wrapper(logger_name)`
- **说明**
用于打印 adapter 的日志。
- **Log 参数**
- `level: Literal["CRITICAL", "WARNING", "INFO", "DEBUG", "TRACE"]`: 日志等级
- `message: str`: 日志信息
- `exception: Optional[Exception]`: 异常信息