mirror of
https://github.com/nonebot/nonebot2.git
synced 2026-07-24 01:03:16 +00:00
📝 replace deprecated caution/important admonitions
This commit is contained in:
+1
-1
@@ -603,7 +603,7 @@ def shell_command(
|
||||
通过 {ref}`nonebot.params.ShellCommandArgs` 获取解析后的参数字典
|
||||
(例: `{"arg": "arg", "h": True}`)。
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
如果参数解析失败,则通过 {ref}`nonebot.params.ShellCommandArgs`
|
||||
获取的将是 {ref}`nonebot.exception.ParserExit` 异常。
|
||||
:::
|
||||
|
||||
@@ -558,7 +558,7 @@ async def _(x: httpx.AsyncClient = Depends(get_client)):
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
生成器作为依赖时,其中只能进行一次 `yield`,否则将会触发异常。如果对此有疑问并想探究原因,可以参考 [contextmanager](https://docs.python.org/zh-cn/3/library/contextlib.html#contextlib.contextmanager) 和 [asynccontextmanager](https://docs.python.org/zh-cn/3/library/contextlib.html#contextlib.asynccontextmanager) 文档。事实上,NoneBot 内部就使用了这两个装饰器。
|
||||
:::
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ options:
|
||||
|
||||
驱动器 (Driver) 是机器人运行的基石,它是机器人初始化的第一步,主要负责数据收发。
|
||||
|
||||
:::important 提示
|
||||
:::info 提示
|
||||
驱动器的选择通常与机器人所使用的协议适配器相关,如果不知道该选择哪个驱动器,可以先阅读相关协议适配器文档说明。
|
||||
:::
|
||||
|
||||
@@ -118,7 +118,7 @@ DRIVER=~fastapi
|
||||
|
||||
##### `fastapi_reload`
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
不推荐开启该配置项,在 Windows 平台上开启该功能有可能会造成预料之外的影响!替代方案:使用 `nb-cli` 命令行工具以及参数 `--reload` 启动 NoneBot。
|
||||
|
||||
```bash
|
||||
@@ -200,7 +200,7 @@ DRIVER=~quart
|
||||
|
||||
##### `quart_reload`
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
不推荐开启该配置项,在 Windows 平台上开启该功能有可能会造成预料之外的影响!替代方案:使用 `nb-cli` 命令行工具以及参数 `--reload` 启动 NoneBot。
|
||||
|
||||
```bash
|
||||
@@ -252,7 +252,7 @@ nonebot.run(app="bot:app")
|
||||
|
||||
**类型:**HTTP 客户端驱动器
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
本驱动器仅支持 HTTP 请求,不支持 WebSocket 连接请求。
|
||||
:::
|
||||
|
||||
@@ -266,7 +266,7 @@ DRIVER=~httpx
|
||||
|
||||
**类型:**WebSocket 客户端驱动器
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
本驱动器仅支持 WebSocket 连接请求,不支持 HTTP 请求。
|
||||
:::
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ import Messenger from "@/components/Messenger";
|
||||
|
||||
在之前的章节中,我们介绍了如何向用户发送文本消息以及[如何处理平台消息](../tutorial/message.md),现在我们来向用户发送平台特殊消息。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
在以下的示例中,我们将使用 `Console` 协议适配器来演示如何发送平台消息。在实际使用中,你需要确保你使用的**消息序列类型**与你所要发送的**平台类型**一致。
|
||||
:::
|
||||
|
||||
@@ -103,7 +103,7 @@ result = await bot.get_user_info(user_id=12345678)
|
||||
result = await bot.call_api("get_user_info", user_id=12345678)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
实际可以使用的 API 以及参数取决于平台提供的接口以及协议适配器的实现,请参考协议适配器以及平台文档。
|
||||
:::
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ NoneBot 使用 [`pydantic`](https://docs.pydantic.dev/) 以及 [`python-dotenv`]
|
||||
|
||||
NoneBot 内置的配置项列表及含义可以在[内置配置项](#内置配置项)中查看。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
|
||||
NoneBot 自 2.2.0 起兼容了 Pydantic v1 与 v2 版本,以下文档中 Pydantic 相关示例均采用 v2 版本用法。
|
||||
|
||||
@@ -83,7 +83,7 @@ export CUSTOM_CONFIG='config in environment variables'
|
||||
|
||||
那最终 NoneBot 所读取的内容为环境变量中的内容,即 `config in environment variables`。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
如果一个环境变量既不是 NoneBot 的[**内置配置项**](#内置配置项),也不是任何插件所定义的[**插件配置**](#插件配置),那么 NoneBot 不会自发读取该环境变量,需要在 dotenv 配置文件中先行声明。
|
||||
:::
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ async def got_location(event: MessageEvent, location: str = ArgPlainText()):
|
||||
|
||||
在上面的代码中,我们获取了 `Console` 协议适配器的消息事件提供的发送时间 `time` 属性。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
如果**基类**就能满足你的需求,那么就**不要修改**事件参数类型注解,这样可以使你的代码更加**通用**,可以在更多平台上运行。如何根据不同平台事件类型进行不同的处理,我们将在[重载](#重载)一节中介绍。
|
||||
:::
|
||||
|
||||
@@ -63,7 +63,7 @@ async def handle_onebot(bot: OneBot):
|
||||
await bot.send_group_message(group_id=123123, message="OneBot")
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
重载机制对所有的参数类型注解都有效,因此,依赖注入也可以使用这个特性来对不同的返回值进行处理。
|
||||
|
||||
但 Bot、Event 和 Matcher 三者的参数类型注解具有最高检查优先级,如果三者任一类型注解不匹配,那么其他依赖注入将不会执行(如:`Depends`)。
|
||||
|
||||
@@ -322,7 +322,7 @@ async def _(matcher: Matcher):
|
||||
matcher.stop_propagation()
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
`stop_propagation` 操作是实例方法,需要先通过依赖注入获取事件响应器实例再进行调用。
|
||||
:::
|
||||
|
||||
|
||||
@@ -534,7 +534,7 @@ async def message_provider(
|
||||
|
||||
该方法可能会调用多次,即对于多个 Extension,选择优先级靠前且实现了该方法的 Extension,若调用的返回值不为 `None` 则作为结果。
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
该方法的默认实现对结果 (UniMessage) 会进行缓存。`Extension` 的实现也应尽量实现缓存机制。
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@ async def on_startup():
|
||||
await UniMessage("Hello!").send(target=target)
|
||||
```
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
在响应器以外的地方,除非启用了 `alconna_apply_fetch_targets` 配置项,否则 `bot` 参数必须手动传入。
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ asycn def _(bot: Bot, event: Event):
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
该方法获取的消息事件 ID 不推荐直接用于各适配器的 API 调用中,可能会操作失败。
|
||||
|
||||
@@ -231,7 +231,7 @@ async def message_edit(
|
||||
|
||||
## 表态消息
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
该方法属于实验性功能。其接口可能会在未来的版本中发生变化。
|
||||
|
||||
|
||||
@@ -178,7 +178,7 @@ op.drop_table("weather_weather") # DROP TABLE weather_weather;
|
||||
对了,不要忘记还有一段注释:`commands auto generated by Alembic - please adjust!`。
|
||||
它在提醒我们,这些代码是由 Alembic 自动生成的,我们应该检查它们,并且根据需要进行调整。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
迁移脚本冗长且繁琐,我们一般不会手写它们,而是由 Alembic 自动生成。
|
||||
一般情况下,Alembic 足够智能,可以正确地生成迁移脚本。
|
||||
但是,在复杂或有歧义的情况下,我们可能需要手动调整迁移脚本。
|
||||
@@ -235,7 +235,7 @@ async def _(session: async_scoped_session, args: Message = CommandArg()):
|
||||
`async_scoped_session` 是一个有作用域限制的会话,作用域为当前事件、当前事件响应器。
|
||||
会话产生的模型实例(例如此处的 `wea := await session.get(Weather, location)`)作用域与会话相同。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
此处提到的“会话”指的是 ORM 会话,而非 [NoneBot 会话](../../../appendices/session-control),两者的生命周期也是不同的(NoneBot 会话的生命周期中可能包含多个事件,不同的事件也会有不同的事件响应器)。
|
||||
具体而言,就是不要将 ORM 会话和模型实例存储在 NoneBot 会话状态中:
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ description: 用户指南
|
||||
`nonebot-plugin-orm` 功能强大且复杂,使用上有一定难度。
|
||||
不过,对于用户而言,只需要掌握部分功能即可。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
请注意区分插件的项目名(如:`nonebot-plugin-wordcloud`)和模块名(如:`nonebot_plugin_wordcloud`)。`nonebot-plugin-orm` 中统一使用插件模块名。参见 [插件命名规范](../../developer/plugin-publishing#插件命名规范)。
|
||||
:::
|
||||
|
||||
@@ -152,7 +152,7 @@ SQLALCHEMY_ENGINE_OPTIONS='{
|
||||
SQLALCHEMY_ECHO=true
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
以上配置之间有覆盖关系,遵循特殊优先于一般的原则,具体为 [`sqlalchemy_database_url`](#sqlalchemy_database_url) > [`sqlalchemy_bind`](#sqlalchemy_bind) > [`sqlalchemy_echo`](#sqlalchemy_echo) > [`sqlalchemy_engine_options`](#sqlalchemy_engine_options)。
|
||||
但覆盖顺序并非显而易见,出于清晰考虑,请只配置必要的选项。
|
||||
:::
|
||||
|
||||
@@ -27,7 +27,7 @@ nb plugin install nonebot-plugin-sentry
|
||||
|
||||
### 配置插件
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
错误跟踪通常在生产环境中使用,因此开发环境中 `sentry_dsn` 留空即会停用插件。
|
||||
:::
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ nb plugin install nonebot-plugin-htmlkit
|
||||
- Linux x64 (非 Alpine 等 musl 系发行版)
|
||||
- Linux arm64 (非 Alpine 等 musl 系发行版)
|
||||
|
||||
:::caution 访问网络内容
|
||||
:::warning 访问网络内容
|
||||
|
||||
如果需要访问网络资源(如 http(s) 网页内容),NoneBot 需要客户端型驱动器(Forward)。内置的驱动器有 `~httpx` 与 `~aiohttp`。
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ scheduler.add_job(
|
||||
)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
由于 APScheduler 的定时任务并不是**由事件响应器所触发的事件**,因此其任务函数无法同[事件处理函数](../tutorial/handler.mdx#事件处理函数)一样通过[依赖注入](../tutorial/event-data.mdx#认识依赖注入)获取上下文信息,也无法通过事件响应器对象的方法进行任何操作,因此我们需要使用[调用平台 API](../appendices/api-calling.mdx#调用平台-api)的方式来获取信息或收发消息。
|
||||
|
||||
相对于事件处理依赖而言,编写定时任务更像是编写普通的函数,需要我们自行获取信息以及发送信息,请**不要**将事件处理依赖的特殊语法用于定时任务!
|
||||
|
||||
@@ -422,7 +422,7 @@ __plugin_meta__ = PluginMetadata(
|
||||
)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
`__plugin_meta__` 变量**必须**处于插件最外层(如 `__init__.py` 中),否则无法正常识别。
|
||||
|
||||
一般做法是在 `__init__.py` 中定义 `__plugin_meta__`。
|
||||
|
||||
@@ -51,7 +51,7 @@ description: 配置编辑器以获得最佳体验
|
||||
|
||||
如果您是高级用户,希望尝试 Pylance 的替代方案,或遇到 Pylance 在特定环境下的兼容性问题,可以考虑使用 BasedPyright。
|
||||
|
||||
:::caution 提示
|
||||
:::warning 提示
|
||||
为避免 `Pylance` 和 `BasedPyright` 相互冲突导致配置混乱甚至异常,脚手架默认不允许在创建项目时同时配置这两者。
|
||||
|
||||
如果确实需要同时使用,请在创建项目时选择 Pylance/Pyright 并根据[相关文档](https://docs.basedpyright.com/latest/installation/ides/#vscode-vscodium)进行手动配置。
|
||||
|
||||
@@ -13,7 +13,7 @@ import Messenger from "@site/src/components/Messenger";
|
||||
|
||||
# 快速上手
|
||||
|
||||
:::caution 前提条件
|
||||
:::warning 前提条件
|
||||
|
||||
- 请确保你的 Python 版本 >= 3.9
|
||||
- **我们强烈建议使用虚拟环境进行开发**,如果没有使用虚拟环境,请确保已经卸载可能存在的 NoneBot v1!!!
|
||||
|
||||
@@ -15,7 +15,7 @@ import TabItem from "@theme/TabItem";
|
||||
|
||||
在[快速上手](../quick-start.mdx)中,我们已经介绍了如何安装和使用 `nb-cli` 创建一个项目。在本章节中,我们将简要介绍如何在不使用 `nb-cli` 的方式创建一个机器人项目的**最小实例**并启动。如果你想要了解 NoneBot 的启动流程,也可以阅读本章节。
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
我们十分不推荐直接创建机器人项目,请优先考虑使用 nb-cli 进行项目创建。
|
||||
:::
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ options:
|
||||
|
||||
## 创建插件
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
如果在之前的[快速上手](../quick-start.mdx)章节中已经使用 `bootstrap` 模板创建了项目,那么你需要做出如下修改:
|
||||
|
||||
1. 在项目目录中创建一个两层文件夹 `awesome_bot/plugins`
|
||||
@@ -65,7 +65,7 @@ options:
|
||||
|
||||
:::
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
如果在之前的[创建项目](./application.mdx)章节中手动创建了相关文件,那么你需要做出如下修改:
|
||||
|
||||
1. 在项目目录中创建一个两层文件夹 `awesome_bot/plugins`
|
||||
@@ -148,7 +148,7 @@ nonebot.load_plugin("path.to.your.plugin") # 加载第三方插件
|
||||
nonebot.load_plugin(Path("./path/to/your/plugin.py")) # 加载项目插件
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
请注意,本地插件的路径应该为相对机器人 **入口文件(通常为 bot.py)** 可导入的,例如在项目 `plugins` 目录下。
|
||||
:::
|
||||
|
||||
@@ -160,7 +160,7 @@ nonebot.load_plugin(Path("./path/to/your/plugin.py")) # 加载项目插件
|
||||
nonebot.load_plugins("src/plugins", "path/to/your/plugins")
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
请注意,插件目录应该为相对机器人 **入口文件(通常为 bot.py)** 可导入的,例如在项目 `plugins` 目录下。
|
||||
:::
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ options:
|
||||
|
||||
顾名思义,消息段 `MessageSegment` 是一段消息。由于消息序列的本质是由若干消息段所组成的序列,消息段可以被认为是构成消息序列的最小单位。简单来说,消息序列类似于一个自然段,而消息段则是组成自然段的一句话。同时,作为特殊消息载体的存在,绝大多数的平台都有着**独特的消息类型**,这些独特的内容均需要由对应的**协议适配器**所提供,以适应不同平台中的消息模式。**这也意味着,你需要导入对应的协议适配器中的消息序列和消息段后才能使用其特殊的工厂方法。**
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
消息段的类型是由协议适配器提供的,因此你需要参考协议适配器的文档并导入对应的消息段后才能使用其特殊的消息类型。
|
||||
|
||||
在上一节的[使用依赖注入](./event-data.mdx#使用依赖注入)中,我们导入的为 `nonebot.adapters.Message` 抽象基类,因此我们无法使用平台特有的消息类型。仅能使用 `str` 作为纯文本消息回复。
|
||||
@@ -34,7 +34,7 @@ options:
|
||||
|
||||
## 使用消息序列
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
在以下的示例中,为了更好的理解多种类型的消息组成方式,我们将使用 `Console` 协议适配器来演示消息序列的使用方法。在实际使用中,你需要确保你使用的**消息序列类型**与你所要发送的**平台类型**一致。
|
||||
:::
|
||||
|
||||
@@ -296,7 +296,7 @@ msg == Message(
|
||||
|
||||
如果 `Message.template` 构建消息模板,那么消息模板将采用消息序列形式的格式化,此时的消息将会是平台特定的:
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
使用 `Message.template` 构建消息模板时,应注意消息序列为平台适配器提供的类型,不能使用 `nonebot.adapters.Message` 基类作为模板构建。使用基类构建模板与使用 `str` 构建模板的效果是一样的,因此请使用上述的 `MessageTemplate` 类直接构建模板。:
|
||||
:::
|
||||
|
||||
@@ -336,7 +336,7 @@ Message(
|
||||
)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
只有消息序列中的文本类型消息段才能被格式化,其他类型的消息段将会原样添加。
|
||||
:::
|
||||
|
||||
|
||||
@@ -558,7 +558,7 @@ async def _(x: httpx.AsyncClient = Depends(get_client)):
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
生成器作为依赖时,其中只能进行一次 `yield`,否则将会触发异常。如果对此有疑问并想探究原因,可以参考 [contextmanager](https://docs.python.org/zh-cn/3/library/contextlib.html#contextlib.contextmanager) 和 [asynccontextmanager](https://docs.python.org/zh-cn/3/library/contextlib.html#contextlib.asynccontextmanager) 文档。事实上,NoneBot 内部就使用了这两个装饰器。
|
||||
:::
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ options:
|
||||
|
||||
驱动器 (Driver) 是机器人运行的基石,它是机器人初始化的第一步,主要负责数据收发。
|
||||
|
||||
:::important 提示
|
||||
:::info 提示
|
||||
驱动器的选择通常与机器人所使用的协议适配器相关,如果不知道该选择哪个驱动器,可以先阅读相关协议适配器文档说明。
|
||||
:::
|
||||
|
||||
@@ -118,7 +118,7 @@ DRIVER=~fastapi
|
||||
|
||||
##### `fastapi_reload`
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
不推荐开启该配置项,在 Windows 平台上开启该功能有可能会造成预料之外的影响!替代方案:使用 `nb-cli` 命令行工具以及参数 `--reload` 启动 NoneBot。
|
||||
|
||||
```bash
|
||||
@@ -200,7 +200,7 @@ DRIVER=~quart
|
||||
|
||||
##### `quart_reload`
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
不推荐开启该配置项,在 Windows 平台上开启该功能有可能会造成预料之外的影响!替代方案:使用 `nb-cli` 命令行工具以及参数 `--reload` 启动 NoneBot。
|
||||
|
||||
```bash
|
||||
@@ -252,7 +252,7 @@ nonebot.run(app="bot:app")
|
||||
|
||||
**类型:**HTTP 客户端驱动器
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
本驱动器仅支持 HTTP 请求,不支持 WebSocket 连接请求。
|
||||
:::
|
||||
|
||||
@@ -266,7 +266,7 @@ DRIVER=~httpx
|
||||
|
||||
**类型:**WebSocket 客户端驱动器
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
本驱动器仅支持 WebSocket 连接请求,不支持 HTTP 请求。
|
||||
:::
|
||||
|
||||
|
||||
@@ -264,7 +264,7 @@ description: nonebot.rule 模块
|
||||
通过 [ShellCommandArgs](params.md#ShellCommandArgs) 获取解析后的参数字典
|
||||
(例: `{"arg": "arg", "h": True}`)。
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
如果参数解析失败,则通过 [ShellCommandArgs](params.md#ShellCommandArgs)
|
||||
获取的将是 [ParserExit](exception.md#ParserExit) 异常。
|
||||
:::
|
||||
|
||||
@@ -18,7 +18,7 @@ import Messenger from "@/components/Messenger";
|
||||
|
||||
在之前的章节中,我们介绍了如何向用户发送文本消息以及[如何处理平台消息](../tutorial/message.md),现在我们来向用户发送平台特殊消息。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
在以下的示例中,我们将使用 `Console` 协议适配器来演示如何发送平台消息。在实际使用中,你需要确保你使用的**消息序列类型**与你所要发送的**平台类型**一致。
|
||||
:::
|
||||
|
||||
@@ -103,7 +103,7 @@ result = await bot.get_user_info(user_id=12345678)
|
||||
result = await bot.call_api("get_user_info", user_id=12345678)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
实际可以使用的 API 以及参数取决于平台提供的接口以及协议适配器的实现,请参考协议适配器以及平台文档。
|
||||
:::
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ NoneBot 使用 [`pydantic`](https://docs.pydantic.dev/) 以及 [`python-dotenv`]
|
||||
|
||||
NoneBot 内置的配置项列表及含义可以在[内置配置项](#内置配置项)中查看。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
|
||||
NoneBot 自 2.2.0 起兼容了 Pydantic v1 与 v2 版本,以下文档中 Pydantic 相关示例均采用 v2 版本用法。
|
||||
|
||||
@@ -83,7 +83,7 @@ export CUSTOM_CONFIG='config in environment variables'
|
||||
|
||||
那最终 NoneBot 所读取的内容为环境变量中的内容,即 `config in environment variables`。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
NoneBot 不会自发读取未被定义的配置项的环境变量,如果需要读取某一环境变量需要在 dotenv 配置文件中进行声明。
|
||||
:::
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ async def got_location(event: MessageEvent, location: str = ArgPlainText()):
|
||||
|
||||
在上面的代码中,我们获取了 `Console` 协议适配器的消息事件提供的发送时间 `time` 属性。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
如果**基类**就能满足你的需求,那么就**不要修改**事件参数类型注解,这样可以使你的代码更加**通用**,可以在更多平台上运行。如何根据不同平台事件类型进行不同的处理,我们将在[重载](#重载)一节中介绍。
|
||||
:::
|
||||
|
||||
@@ -63,7 +63,7 @@ async def handle_onebot(bot: OneBot):
|
||||
await bot.send_group_message(group_id=123123, message="OneBot")
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
重载机制对所有的参数类型注解都有效,因此,依赖注入也可以使用这个特性来对不同的返回值进行处理。
|
||||
|
||||
但 Bot、Event 和 Matcher 三者的参数类型注解具有最高检查优先级,如果三者任一类型注解不匹配,那么其他依赖注入将不会执行(如:`Depends`)。
|
||||
|
||||
@@ -322,7 +322,7 @@ async def _(matcher: Matcher):
|
||||
matcher.stop_propagation()
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
`stop_propagation` 操作是实例方法,需要先通过依赖注入获取事件响应器实例再进行调用。
|
||||
:::
|
||||
|
||||
|
||||
@@ -534,7 +534,7 @@ async def message_provider(
|
||||
|
||||
该方法可能会调用多次,即对于多个 Extension,选择优先级靠前且实现了该方法的 Extension,若调用的返回值不为 `None` 则作为结果。
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
该方法的默认实现对结果 (UniMessage) 会进行缓存。`Extension` 的实现也应尽量实现缓存机制。
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@ async def on_startup():
|
||||
await UniMessage("Hello!").send(target=target)
|
||||
```
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
在响应器以外的地方,除非启用了 `alconna_apply_fetch_targets` 配置项,否则 `bot` 参数必须手动传入。
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ asycn def _(bot: Bot, event: Event):
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
该方法获取的消息事件 ID 不推荐直接用于各适配器的 API 调用中,可能会操作失败。
|
||||
|
||||
@@ -231,7 +231,7 @@ async def message_edit(
|
||||
|
||||
## 表态消息
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
该方法属于实验性功能。其接口可能会在未来的版本中发生变化。
|
||||
|
||||
|
||||
@@ -178,7 +178,7 @@ op.drop_table("weather_weather") # DROP TABLE weather_weather;
|
||||
对了,不要忘记还有一段注释:`commands auto generated by Alembic - please adjust!`。
|
||||
它在提醒我们,这些代码是由 Alembic 自动生成的,我们应该检查它们,并且根据需要进行调整。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
迁移脚本冗长且繁琐,我们一般不会手写它们,而是由 Alembic 自动生成。
|
||||
一般情况下,Alembic 足够智能,可以正确地生成迁移脚本。
|
||||
但是,在复杂或有歧义的情况下,我们可能需要手动调整迁移脚本。
|
||||
@@ -235,7 +235,7 @@ async def _(session: async_scoped_session, args: Message = CommandArg()):
|
||||
`async_scoped_session` 是一个有作用域限制的会话,作用域为当前事件、当前事件响应器。
|
||||
会话产生的模型实例(例如此处的 `wea := await session.get(Weather, location)`)作用域与会话相同。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
此处提到的“会话”指的是 ORM 会话,而非 [NoneBot 会话](../../../appendices/session-control),两者的生命周期也是不同的(NoneBot 会话的生命周期中可能包含多个事件,不同的事件也会有不同的事件响应器)。
|
||||
具体而言,就是不要将 ORM 会话和模型实例存储在 NoneBot 会话状态中:
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ description: 用户指南
|
||||
`nonebot-plugin-orm` 功能强大且复杂,使用上有一定难度。
|
||||
不过,对于用户而言,只需要掌握部分功能即可。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
请注意区分插件的项目名(如:`nonebot-plugin-wordcloud`)和模块名(如:`nonebot_plugin_wordcloud`)。`nonebot-plugin-orm` 中统一使用插件模块名。参见 [插件命名规范](../../developer/plugin-publishing#插件命名规范)。
|
||||
:::
|
||||
|
||||
@@ -152,7 +152,7 @@ SQLALCHEMY_ENGINE_OPTIONS='{
|
||||
SQLALCHEMY_ECHO=true
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
以上配置之间有覆盖关系,遵循特殊优先于一般的原则,具体为 [`sqlalchemy_database_url`](#sqlalchemy_database_url) > [`sqlalchemy_bind`](#sqlalchemy_bind) > [`sqlalchemy_echo`](#sqlalchemy_echo) > [`sqlalchemy_engine_options`](#sqlalchemy_engine_options)。
|
||||
但覆盖顺序并非显而易见,出于清晰考虑,请只配置必要的选项。
|
||||
:::
|
||||
|
||||
@@ -27,7 +27,7 @@ nb plugin install nonebot-plugin-sentry
|
||||
|
||||
### 配置插件
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
错误跟踪通常在生产环境中使用,因此开发环境中 `sentry_dsn` 留空即会停用插件。
|
||||
:::
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ nb plugin install nonebot-plugin-htmlkit
|
||||
- Linux x64 (非 Alpine 等 musl 系发行版)
|
||||
- Linux arm64 (非 Alpine 等 musl 系发行版)
|
||||
|
||||
:::caution 访问网络内容
|
||||
:::warning 访问网络内容
|
||||
|
||||
如果需要访问网络资源(如 http(s) 网页内容),NoneBot 需要客户端型驱动器(Forward)。内置的驱动器有 `~httpx` 与 `~aiohttp`。
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ scheduler.add_job(
|
||||
)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
由于 APScheduler 的定时任务并不是**由事件响应器所触发的事件**,因此其任务函数无法同[事件处理函数](../tutorial/handler.mdx#事件处理函数)一样通过[依赖注入](../tutorial/event-data.mdx#认识依赖注入)获取上下文信息,也无法通过事件响应器对象的方法进行任何操作,因此我们需要使用[调用平台 API](../appendices/api-calling.mdx#调用平台-api)的方式来获取信息或收发消息。
|
||||
|
||||
相对于事件处理依赖而言,编写定时任务更像是编写普通的函数,需要我们自行获取信息以及发送信息,请**不要**将事件处理依赖的特殊语法用于定时任务!
|
||||
|
||||
@@ -422,7 +422,7 @@ __plugin_meta__ = PluginMetadata(
|
||||
)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
`__plugin_meta__` 变量**必须**处于插件最外层(如 `__init__.py` 中),否则无法正常识别。
|
||||
|
||||
一般做法是在 `__init__.py` 中定义 `__plugin_meta__`。
|
||||
|
||||
@@ -13,7 +13,7 @@ import Messenger from "@site/src/components/Messenger";
|
||||
|
||||
# 快速上手
|
||||
|
||||
:::caution 前提条件
|
||||
:::warning 前提条件
|
||||
|
||||
- 请确保你的 Python 版本 >= 3.9
|
||||
- **我们强烈建议使用虚拟环境进行开发**,如果没有使用虚拟环境,请确保已经卸载可能存在的 NoneBot v1!!!
|
||||
|
||||
@@ -12,7 +12,7 @@ options:
|
||||
|
||||
在[快速上手](../quick-start.mdx)中,我们已经介绍了如何安装和使用 `nb-cli` 创建一个项目。在本章节中,我们将简要介绍如何在不使用 `nb-cli` 的方式创建一个机器人项目的**最小实例**并启动。如果你想要了解 NoneBot 的启动流程,也可以阅读本章节。
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
我们十分不推荐直接创建机器人项目,请优先考虑使用 nb-cli 进行项目创建。
|
||||
:::
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ options:
|
||||
|
||||
## 创建插件
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
如果在之前的[快速上手](../quick-start.mdx)章节中已经使用 `bootstrap` 模板创建了项目,那么你需要做出如下修改:
|
||||
|
||||
1. 在项目目录中创建一个两层文件夹 `awesome_bot/plugins`
|
||||
@@ -65,7 +65,7 @@ options:
|
||||
|
||||
:::
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
如果在之前的[创建项目](./application.md)章节中手动创建了相关文件,那么你需要做出如下修改:
|
||||
|
||||
1. 在项目目录中创建一个两层文件夹 `awesome_bot/plugins`
|
||||
@@ -148,7 +148,7 @@ nonebot.load_plugin("path.to.your.plugin") # 加载第三方插件
|
||||
nonebot.load_plugin(Path("./path/to/your/plugin.py")) # 加载项目插件
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
请注意,本地插件的路径应该为相对机器人 **入口文件(通常为 bot.py)** 可导入的,例如在项目 `plugins` 目录下。
|
||||
:::
|
||||
|
||||
@@ -160,7 +160,7 @@ nonebot.load_plugin(Path("./path/to/your/plugin.py")) # 加载项目插件
|
||||
nonebot.load_plugins("src/plugins", "path/to/your/plugins")
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
请注意,插件目录应该为相对机器人 **入口文件(通常为 bot.py)** 可导入的,例如在项目 `plugins` 目录下。
|
||||
:::
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ options:
|
||||
|
||||
顾名思义,消息段 `MessageSegment` 是一段消息。由于消息序列的本质是由若干消息段所组成的序列,消息段可以被认为是构成消息序列的最小单位。简单来说,消息序列类似于一个自然段,而消息段则是组成自然段的一句话。同时,作为特殊消息载体的存在,绝大多数的平台都有着**独特的消息类型**,这些独特的内容均需要由对应的**协议适配器**所提供,以适应不同平台中的消息模式。**这也意味着,你需要导入对应的协议适配器中的消息序列和消息段后才能使用其特殊的工厂方法。**
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
消息段的类型是由协议适配器提供的,因此你需要参考协议适配器的文档并导入对应的消息段后才能使用其特殊的消息类型。
|
||||
|
||||
在上一节的[使用依赖注入](./event-data.mdx#使用依赖注入)中,我们导入的为 `nonebot.adapters.Message` 抽象基类,因此我们无法使用平台特有的消息类型。仅能使用 `str` 作为纯文本消息回复。
|
||||
@@ -34,7 +34,7 @@ options:
|
||||
|
||||
## 使用消息序列
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
在以下的示例中,为了更好的理解多种类型的消息组成方式,我们将使用 `Console` 协议适配器来演示消息序列的使用方法。在实际使用中,你需要确保你使用的**消息序列类型**与你所要发送的**平台类型**一致。
|
||||
:::
|
||||
|
||||
@@ -296,7 +296,7 @@ msg == Message(
|
||||
|
||||
如果 `Message.template` 构建消息模板,那么消息模板将采用消息序列形式的格式化,此时的消息将会是平台特定的:
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
使用 `Message.template` 构建消息模板时,应注意消息序列为平台适配器提供的类型,不能使用 `nonebot.adapters.Message` 基类作为模板构建。使用基类构建模板与使用 `str` 构建模板的效果是一样的,因此请使用上述的 `MessageTemplate` 类直接构建模板。:
|
||||
:::
|
||||
|
||||
@@ -336,7 +336,7 @@ Message(
|
||||
)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
只有消息序列中的文本类型消息段才能被格式化,其他类型的消息段将会原样添加。
|
||||
:::
|
||||
|
||||
|
||||
@@ -558,7 +558,7 @@ async def _(x: httpx.AsyncClient = Depends(get_client)):
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
生成器作为依赖时,其中只能进行一次 `yield`,否则将会触发异常。如果对此有疑问并想探究原因,可以参考 [contextmanager](https://docs.python.org/zh-cn/3/library/contextlib.html#contextlib.contextmanager) 和 [asynccontextmanager](https://docs.python.org/zh-cn/3/library/contextlib.html#contextlib.asynccontextmanager) 文档。事实上,NoneBot 内部就使用了这两个装饰器。
|
||||
:::
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ options:
|
||||
|
||||
驱动器 (Driver) 是机器人运行的基石,它是机器人初始化的第一步,主要负责数据收发。
|
||||
|
||||
:::important 提示
|
||||
:::info 提示
|
||||
驱动器的选择通常与机器人所使用的协议适配器相关,如果不知道该选择哪个驱动器,可以先阅读相关协议适配器文档说明。
|
||||
:::
|
||||
|
||||
@@ -118,7 +118,7 @@ DRIVER=~fastapi
|
||||
|
||||
##### `fastapi_reload`
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
不推荐开启该配置项,在 Windows 平台上开启该功能有可能会造成预料之外的影响!替代方案:使用 `nb-cli` 命令行工具以及参数 `--reload` 启动 NoneBot。
|
||||
|
||||
```bash
|
||||
@@ -200,7 +200,7 @@ DRIVER=~quart
|
||||
|
||||
##### `quart_reload`
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
不推荐开启该配置项,在 Windows 平台上开启该功能有可能会造成预料之外的影响!替代方案:使用 `nb-cli` 命令行工具以及参数 `--reload` 启动 NoneBot。
|
||||
|
||||
```bash
|
||||
@@ -252,7 +252,7 @@ nonebot.run(app="bot:app")
|
||||
|
||||
**类型:**HTTP 客户端驱动器
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
本驱动器仅支持 HTTP 请求,不支持 WebSocket 连接请求。
|
||||
:::
|
||||
|
||||
@@ -266,7 +266,7 @@ DRIVER=~httpx
|
||||
|
||||
**类型:**WebSocket 客户端驱动器
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
本驱动器仅支持 WebSocket 连接请求,不支持 HTTP 请求。
|
||||
:::
|
||||
|
||||
|
||||
@@ -264,7 +264,7 @@ description: nonebot.rule 模块
|
||||
通过 [ShellCommandArgs](params.md#ShellCommandArgs) 获取解析后的参数字典
|
||||
(例: `{"arg": "arg", "h": True}`)。
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
如果参数解析失败,则通过 [ShellCommandArgs](params.md#ShellCommandArgs)
|
||||
获取的将是 [ParserExit](exception.md#ParserExit) 异常。
|
||||
:::
|
||||
|
||||
@@ -18,7 +18,7 @@ import Messenger from "@/components/Messenger";
|
||||
|
||||
在之前的章节中,我们介绍了如何向用户发送文本消息以及[如何处理平台消息](../tutorial/message.md),现在我们来向用户发送平台特殊消息。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
在以下的示例中,我们将使用 `Console` 协议适配器来演示如何发送平台消息。在实际使用中,你需要确保你使用的**消息序列类型**与你所要发送的**平台类型**一致。
|
||||
:::
|
||||
|
||||
@@ -103,7 +103,7 @@ result = await bot.get_user_info(user_id=12345678)
|
||||
result = await bot.call_api("get_user_info", user_id=12345678)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
实际可以使用的 API 以及参数取决于平台提供的接口以及协议适配器的实现,请参考协议适配器以及平台文档。
|
||||
:::
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ NoneBot 使用 [`pydantic`](https://docs.pydantic.dev/) 以及 [`python-dotenv`]
|
||||
|
||||
NoneBot 内置的配置项列表及含义可以在[内置配置项](#内置配置项)中查看。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
|
||||
NoneBot 自 2.2.0 起兼容了 Pydantic v1 与 v2 版本,以下文档中 Pydantic 相关示例均采用 v2 版本用法。
|
||||
|
||||
@@ -83,7 +83,7 @@ export CUSTOM_CONFIG='config in environment variables'
|
||||
|
||||
那最终 NoneBot 所读取的内容为环境变量中的内容,即 `config in environment variables`。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
如果一个环境变量既不是 NoneBot 的[**内置配置项**](#内置配置项),也不是任何插件所定义的[**插件配置**](#插件配置),那么 NoneBot 不会自发读取该环境变量,需要在 dotenv 配置文件中先行声明。
|
||||
:::
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ async def got_location(event: MessageEvent, location: str = ArgPlainText()):
|
||||
|
||||
在上面的代码中,我们获取了 `Console` 协议适配器的消息事件提供的发送时间 `time` 属性。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
如果**基类**就能满足你的需求,那么就**不要修改**事件参数类型注解,这样可以使你的代码更加**通用**,可以在更多平台上运行。如何根据不同平台事件类型进行不同的处理,我们将在[重载](#重载)一节中介绍。
|
||||
:::
|
||||
|
||||
@@ -63,7 +63,7 @@ async def handle_onebot(bot: OneBot):
|
||||
await bot.send_group_message(group_id=123123, message="OneBot")
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
重载机制对所有的参数类型注解都有效,因此,依赖注入也可以使用这个特性来对不同的返回值进行处理。
|
||||
|
||||
但 Bot、Event 和 Matcher 三者的参数类型注解具有最高检查优先级,如果三者任一类型注解不匹配,那么其他依赖注入将不会执行(如:`Depends`)。
|
||||
|
||||
@@ -322,7 +322,7 @@ async def _(matcher: Matcher):
|
||||
matcher.stop_propagation()
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
`stop_propagation` 操作是实例方法,需要先通过依赖注入获取事件响应器实例再进行调用。
|
||||
:::
|
||||
|
||||
|
||||
@@ -534,7 +534,7 @@ async def message_provider(
|
||||
|
||||
该方法可能会调用多次,即对于多个 Extension,选择优先级靠前且实现了该方法的 Extension,若调用的返回值不为 `None` 则作为结果。
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
该方法的默认实现对结果 (UniMessage) 会进行缓存。`Extension` 的实现也应尽量实现缓存机制。
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@ async def on_startup():
|
||||
await UniMessage("Hello!").send(target=target)
|
||||
```
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
在响应器以外的地方,除非启用了 `alconna_apply_fetch_targets` 配置项,否则 `bot` 参数必须手动传入。
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ asycn def _(bot: Bot, event: Event):
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
该方法获取的消息事件 ID 不推荐直接用于各适配器的 API 调用中,可能会操作失败。
|
||||
|
||||
@@ -231,7 +231,7 @@ async def message_edit(
|
||||
|
||||
## 表态消息
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
该方法属于实验性功能。其接口可能会在未来的版本中发生变化。
|
||||
|
||||
|
||||
@@ -178,7 +178,7 @@ op.drop_table("weather_weather") # DROP TABLE weather_weather;
|
||||
对了,不要忘记还有一段注释:`commands auto generated by Alembic - please adjust!`。
|
||||
它在提醒我们,这些代码是由 Alembic 自动生成的,我们应该检查它们,并且根据需要进行调整。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
迁移脚本冗长且繁琐,我们一般不会手写它们,而是由 Alembic 自动生成。
|
||||
一般情况下,Alembic 足够智能,可以正确地生成迁移脚本。
|
||||
但是,在复杂或有歧义的情况下,我们可能需要手动调整迁移脚本。
|
||||
@@ -235,7 +235,7 @@ async def _(session: async_scoped_session, args: Message = CommandArg()):
|
||||
`async_scoped_session` 是一个有作用域限制的会话,作用域为当前事件、当前事件响应器。
|
||||
会话产生的模型实例(例如此处的 `wea := await session.get(Weather, location)`)作用域与会话相同。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
此处提到的“会话”指的是 ORM 会话,而非 [NoneBot 会话](../../../appendices/session-control),两者的生命周期也是不同的(NoneBot 会话的生命周期中可能包含多个事件,不同的事件也会有不同的事件响应器)。
|
||||
具体而言,就是不要将 ORM 会话和模型实例存储在 NoneBot 会话状态中:
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ description: 用户指南
|
||||
`nonebot-plugin-orm` 功能强大且复杂,使用上有一定难度。
|
||||
不过,对于用户而言,只需要掌握部分功能即可。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
请注意区分插件的项目名(如:`nonebot-plugin-wordcloud`)和模块名(如:`nonebot_plugin_wordcloud`)。`nonebot-plugin-orm` 中统一使用插件模块名。参见 [插件命名规范](../../developer/plugin-publishing#插件命名规范)。
|
||||
:::
|
||||
|
||||
@@ -152,7 +152,7 @@ SQLALCHEMY_ENGINE_OPTIONS='{
|
||||
SQLALCHEMY_ECHO=true
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
以上配置之间有覆盖关系,遵循特殊优先于一般的原则,具体为 [`sqlalchemy_database_url`](#sqlalchemy_database_url) > [`sqlalchemy_bind`](#sqlalchemy_bind) > [`sqlalchemy_echo`](#sqlalchemy_echo) > [`sqlalchemy_engine_options`](#sqlalchemy_engine_options)。
|
||||
但覆盖顺序并非显而易见,出于清晰考虑,请只配置必要的选项。
|
||||
:::
|
||||
|
||||
@@ -27,7 +27,7 @@ nb plugin install nonebot-plugin-sentry
|
||||
|
||||
### 配置插件
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
错误跟踪通常在生产环境中使用,因此开发环境中 `sentry_dsn` 留空即会停用插件。
|
||||
:::
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ nb plugin install nonebot-plugin-htmlkit
|
||||
- Linux x64 (非 Alpine 等 musl 系发行版)
|
||||
- Linux arm64 (非 Alpine 等 musl 系发行版)
|
||||
|
||||
:::caution 访问网络内容
|
||||
:::warning 访问网络内容
|
||||
|
||||
如果需要访问网络资源(如 http(s) 网页内容),NoneBot 需要客户端型驱动器(Forward)。内置的驱动器有 `~httpx` 与 `~aiohttp`。
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ scheduler.add_job(
|
||||
)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
由于 APScheduler 的定时任务并不是**由事件响应器所触发的事件**,因此其任务函数无法同[事件处理函数](../tutorial/handler.mdx#事件处理函数)一样通过[依赖注入](../tutorial/event-data.mdx#认识依赖注入)获取上下文信息,也无法通过事件响应器对象的方法进行任何操作,因此我们需要使用[调用平台 API](../appendices/api-calling.mdx#调用平台-api)的方式来获取信息或收发消息。
|
||||
|
||||
相对于事件处理依赖而言,编写定时任务更像是编写普通的函数,需要我们自行获取信息以及发送信息,请**不要**将事件处理依赖的特殊语法用于定时任务!
|
||||
|
||||
@@ -422,7 +422,7 @@ __plugin_meta__ = PluginMetadata(
|
||||
)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
`__plugin_meta__` 变量**必须**处于插件最外层(如 `__init__.py` 中),否则无法正常识别。
|
||||
|
||||
一般做法是在 `__init__.py` 中定义 `__plugin_meta__`。
|
||||
|
||||
@@ -51,7 +51,7 @@ description: 配置编辑器以获得最佳体验
|
||||
|
||||
如果您是高级用户,希望尝试 Pylance 的替代方案,或遇到 Pylance 在特定环境下的兼容性问题,可以考虑使用 BasedPyright。
|
||||
|
||||
:::caution 提示
|
||||
:::warning 提示
|
||||
为避免 `Pylance` 和 `BasedPyright` 相互冲突导致配置混乱甚至异常,脚手架默认不允许在创建项目时同时配置这两者。
|
||||
|
||||
如果确实需要同时使用,请在创建项目时选择 Pylance/Pyright 并根据[相关文档](https://docs.basedpyright.com/latest/installation/ides/#vscode-vscodium)进行手动配置。
|
||||
|
||||
@@ -13,7 +13,7 @@ import Messenger from "@site/src/components/Messenger";
|
||||
|
||||
# 快速上手
|
||||
|
||||
:::caution 前提条件
|
||||
:::warning 前提条件
|
||||
|
||||
- 请确保你的 Python 版本 >= 3.9
|
||||
- **我们强烈建议使用虚拟环境进行开发**,如果没有使用虚拟环境,请确保已经卸载可能存在的 NoneBot v1!!!
|
||||
|
||||
@@ -15,7 +15,7 @@ import TabItem from "@theme/TabItem";
|
||||
|
||||
在[快速上手](../quick-start.mdx)中,我们已经介绍了如何安装和使用 `nb-cli` 创建一个项目。在本章节中,我们将简要介绍如何在不使用 `nb-cli` 的方式创建一个机器人项目的**最小实例**并启动。如果你想要了解 NoneBot 的启动流程,也可以阅读本章节。
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
我们十分不推荐直接创建机器人项目,请优先考虑使用 nb-cli 进行项目创建。
|
||||
:::
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ options:
|
||||
|
||||
## 创建插件
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
如果在之前的[快速上手](../quick-start.mdx)章节中已经使用 `bootstrap` 模板创建了项目,那么你需要做出如下修改:
|
||||
|
||||
1. 在项目目录中创建一个两层文件夹 `awesome_bot/plugins`
|
||||
@@ -65,7 +65,7 @@ options:
|
||||
|
||||
:::
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
如果在之前的[创建项目](./application.mdx)章节中手动创建了相关文件,那么你需要做出如下修改:
|
||||
|
||||
1. 在项目目录中创建一个两层文件夹 `awesome_bot/plugins`
|
||||
@@ -148,7 +148,7 @@ nonebot.load_plugin("path.to.your.plugin") # 加载第三方插件
|
||||
nonebot.load_plugin(Path("./path/to/your/plugin.py")) # 加载项目插件
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
请注意,本地插件的路径应该为相对机器人 **入口文件(通常为 bot.py)** 可导入的,例如在项目 `plugins` 目录下。
|
||||
:::
|
||||
|
||||
@@ -160,7 +160,7 @@ nonebot.load_plugin(Path("./path/to/your/plugin.py")) # 加载项目插件
|
||||
nonebot.load_plugins("src/plugins", "path/to/your/plugins")
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
请注意,插件目录应该为相对机器人 **入口文件(通常为 bot.py)** 可导入的,例如在项目 `plugins` 目录下。
|
||||
:::
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ options:
|
||||
|
||||
顾名思义,消息段 `MessageSegment` 是一段消息。由于消息序列的本质是由若干消息段所组成的序列,消息段可以被认为是构成消息序列的最小单位。简单来说,消息序列类似于一个自然段,而消息段则是组成自然段的一句话。同时,作为特殊消息载体的存在,绝大多数的平台都有着**独特的消息类型**,这些独特的内容均需要由对应的**协议适配器**所提供,以适应不同平台中的消息模式。**这也意味着,你需要导入对应的协议适配器中的消息序列和消息段后才能使用其特殊的工厂方法。**
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
消息段的类型是由协议适配器提供的,因此你需要参考协议适配器的文档并导入对应的消息段后才能使用其特殊的消息类型。
|
||||
|
||||
在上一节的[使用依赖注入](./event-data.mdx#使用依赖注入)中,我们导入的为 `nonebot.adapters.Message` 抽象基类,因此我们无法使用平台特有的消息类型。仅能使用 `str` 作为纯文本消息回复。
|
||||
@@ -34,7 +34,7 @@ options:
|
||||
|
||||
## 使用消息序列
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
在以下的示例中,为了更好的理解多种类型的消息组成方式,我们将使用 `Console` 协议适配器来演示消息序列的使用方法。在实际使用中,你需要确保你使用的**消息序列类型**与你所要发送的**平台类型**一致。
|
||||
:::
|
||||
|
||||
@@ -296,7 +296,7 @@ msg == Message(
|
||||
|
||||
如果 `Message.template` 构建消息模板,那么消息模板将采用消息序列形式的格式化,此时的消息将会是平台特定的:
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
使用 `Message.template` 构建消息模板时,应注意消息序列为平台适配器提供的类型,不能使用 `nonebot.adapters.Message` 基类作为模板构建。使用基类构建模板与使用 `str` 构建模板的效果是一样的,因此请使用上述的 `MessageTemplate` 类直接构建模板。:
|
||||
:::
|
||||
|
||||
@@ -336,7 +336,7 @@ Message(
|
||||
)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
只有消息序列中的文本类型消息段才能被格式化,其他类型的消息段将会原样添加。
|
||||
:::
|
||||
|
||||
|
||||
@@ -558,7 +558,7 @@ async def _(x: httpx.AsyncClient = Depends(get_client)):
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
生成器作为依赖时,其中只能进行一次 `yield`,否则将会触发异常。如果对此有疑问并想探究原因,可以参考 [contextmanager](https://docs.python.org/zh-cn/3/library/contextlib.html#contextlib.contextmanager) 和 [asynccontextmanager](https://docs.python.org/zh-cn/3/library/contextlib.html#contextlib.asynccontextmanager) 文档。事实上,NoneBot 内部就使用了这两个装饰器。
|
||||
:::
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ options:
|
||||
|
||||
驱动器 (Driver) 是机器人运行的基石,它是机器人初始化的第一步,主要负责数据收发。
|
||||
|
||||
:::important 提示
|
||||
:::info 提示
|
||||
驱动器的选择通常与机器人所使用的协议适配器相关,如果不知道该选择哪个驱动器,可以先阅读相关协议适配器文档说明。
|
||||
:::
|
||||
|
||||
@@ -118,7 +118,7 @@ DRIVER=~fastapi
|
||||
|
||||
##### `fastapi_reload`
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
不推荐开启该配置项,在 Windows 平台上开启该功能有可能会造成预料之外的影响!替代方案:使用 `nb-cli` 命令行工具以及参数 `--reload` 启动 NoneBot。
|
||||
|
||||
```bash
|
||||
@@ -200,7 +200,7 @@ DRIVER=~quart
|
||||
|
||||
##### `quart_reload`
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
不推荐开启该配置项,在 Windows 平台上开启该功能有可能会造成预料之外的影响!替代方案:使用 `nb-cli` 命令行工具以及参数 `--reload` 启动 NoneBot。
|
||||
|
||||
```bash
|
||||
@@ -252,7 +252,7 @@ nonebot.run(app="bot:app")
|
||||
|
||||
**类型:**HTTP 客户端驱动器
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
本驱动器仅支持 HTTP 请求,不支持 WebSocket 连接请求。
|
||||
:::
|
||||
|
||||
@@ -266,7 +266,7 @@ DRIVER=~httpx
|
||||
|
||||
**类型:**WebSocket 客户端驱动器
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
本驱动器仅支持 WebSocket 连接请求,不支持 HTTP 请求。
|
||||
:::
|
||||
|
||||
|
||||
@@ -264,7 +264,7 @@ description: nonebot.rule 模块
|
||||
通过 [ShellCommandArgs](params.md#ShellCommandArgs) 获取解析后的参数字典
|
||||
(例: `{"arg": "arg", "h": True}`)。
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
如果参数解析失败,则通过 [ShellCommandArgs](params.md#ShellCommandArgs)
|
||||
获取的将是 [ParserExit](exception.md#ParserExit) 异常。
|
||||
:::
|
||||
|
||||
@@ -18,7 +18,7 @@ import Messenger from "@/components/Messenger";
|
||||
|
||||
在之前的章节中,我们介绍了如何向用户发送文本消息以及[如何处理平台消息](../tutorial/message.md),现在我们来向用户发送平台特殊消息。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
在以下的示例中,我们将使用 `Console` 协议适配器来演示如何发送平台消息。在实际使用中,你需要确保你使用的**消息序列类型**与你所要发送的**平台类型**一致。
|
||||
:::
|
||||
|
||||
@@ -103,7 +103,7 @@ result = await bot.get_user_info(user_id=12345678)
|
||||
result = await bot.call_api("get_user_info", user_id=12345678)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
实际可以使用的 API 以及参数取决于平台提供的接口以及协议适配器的实现,请参考协议适配器以及平台文档。
|
||||
:::
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ NoneBot 使用 [`pydantic`](https://docs.pydantic.dev/) 以及 [`python-dotenv`]
|
||||
|
||||
NoneBot 内置的配置项列表及含义可以在[内置配置项](#内置配置项)中查看。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
|
||||
NoneBot 自 2.2.0 起兼容了 Pydantic v1 与 v2 版本,以下文档中 Pydantic 相关示例均采用 v2 版本用法。
|
||||
|
||||
@@ -83,7 +83,7 @@ export CUSTOM_CONFIG='config in environment variables'
|
||||
|
||||
那最终 NoneBot 所读取的内容为环境变量中的内容,即 `config in environment variables`。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
如果一个环境变量既不是 NoneBot 的[**内置配置项**](#内置配置项),也不是任何插件所定义的[**插件配置**](#插件配置),那么 NoneBot 不会自发读取该环境变量,需要在 dotenv 配置文件中先行声明。
|
||||
:::
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ async def got_location(event: MessageEvent, location: str = ArgPlainText()):
|
||||
|
||||
在上面的代码中,我们获取了 `Console` 协议适配器的消息事件提供的发送时间 `time` 属性。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
如果**基类**就能满足你的需求,那么就**不要修改**事件参数类型注解,这样可以使你的代码更加**通用**,可以在更多平台上运行。如何根据不同平台事件类型进行不同的处理,我们将在[重载](#重载)一节中介绍。
|
||||
:::
|
||||
|
||||
@@ -63,7 +63,7 @@ async def handle_onebot(bot: OneBot):
|
||||
await bot.send_group_message(group_id=123123, message="OneBot")
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
重载机制对所有的参数类型注解都有效,因此,依赖注入也可以使用这个特性来对不同的返回值进行处理。
|
||||
|
||||
但 Bot、Event 和 Matcher 三者的参数类型注解具有最高检查优先级,如果三者任一类型注解不匹配,那么其他依赖注入将不会执行(如:`Depends`)。
|
||||
|
||||
@@ -322,7 +322,7 @@ async def _(matcher: Matcher):
|
||||
matcher.stop_propagation()
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
`stop_propagation` 操作是实例方法,需要先通过依赖注入获取事件响应器实例再进行调用。
|
||||
:::
|
||||
|
||||
|
||||
@@ -534,7 +534,7 @@ async def message_provider(
|
||||
|
||||
该方法可能会调用多次,即对于多个 Extension,选择优先级靠前且实现了该方法的 Extension,若调用的返回值不为 `None` 则作为结果。
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
该方法的默认实现对结果 (UniMessage) 会进行缓存。`Extension` 的实现也应尽量实现缓存机制。
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@ async def on_startup():
|
||||
await UniMessage("Hello!").send(target=target)
|
||||
```
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
在响应器以外的地方,除非启用了 `alconna_apply_fetch_targets` 配置项,否则 `bot` 参数必须手动传入。
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ asycn def _(bot: Bot, event: Event):
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
该方法获取的消息事件 ID 不推荐直接用于各适配器的 API 调用中,可能会操作失败。
|
||||
|
||||
@@ -231,7 +231,7 @@ async def message_edit(
|
||||
|
||||
## 表态消息
|
||||
|
||||
:::caution
|
||||
:::warning
|
||||
|
||||
该方法属于实验性功能。其接口可能会在未来的版本中发生变化。
|
||||
|
||||
|
||||
@@ -178,7 +178,7 @@ op.drop_table("weather_weather") # DROP TABLE weather_weather;
|
||||
对了,不要忘记还有一段注释:`commands auto generated by Alembic - please adjust!`。
|
||||
它在提醒我们,这些代码是由 Alembic 自动生成的,我们应该检查它们,并且根据需要进行调整。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
迁移脚本冗长且繁琐,我们一般不会手写它们,而是由 Alembic 自动生成。
|
||||
一般情况下,Alembic 足够智能,可以正确地生成迁移脚本。
|
||||
但是,在复杂或有歧义的情况下,我们可能需要手动调整迁移脚本。
|
||||
@@ -235,7 +235,7 @@ async def _(session: async_scoped_session, args: Message = CommandArg()):
|
||||
`async_scoped_session` 是一个有作用域限制的会话,作用域为当前事件、当前事件响应器。
|
||||
会话产生的模型实例(例如此处的 `wea := await session.get(Weather, location)`)作用域与会话相同。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
此处提到的“会话”指的是 ORM 会话,而非 [NoneBot 会话](../../../appendices/session-control),两者的生命周期也是不同的(NoneBot 会话的生命周期中可能包含多个事件,不同的事件也会有不同的事件响应器)。
|
||||
具体而言,就是不要将 ORM 会话和模型实例存储在 NoneBot 会话状态中:
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ description: 用户指南
|
||||
`nonebot-plugin-orm` 功能强大且复杂,使用上有一定难度。
|
||||
不过,对于用户而言,只需要掌握部分功能即可。
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
请注意区分插件的项目名(如:`nonebot-plugin-wordcloud`)和模块名(如:`nonebot_plugin_wordcloud`)。`nonebot-plugin-orm` 中统一使用插件模块名。参见 [插件命名规范](../../developer/plugin-publishing#插件命名规范)。
|
||||
:::
|
||||
|
||||
@@ -152,7 +152,7 @@ SQLALCHEMY_ENGINE_OPTIONS='{
|
||||
SQLALCHEMY_ECHO=true
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
以上配置之间有覆盖关系,遵循特殊优先于一般的原则,具体为 [`sqlalchemy_database_url`](#sqlalchemy_database_url) > [`sqlalchemy_bind`](#sqlalchemy_bind) > [`sqlalchemy_echo`](#sqlalchemy_echo) > [`sqlalchemy_engine_options`](#sqlalchemy_engine_options)。
|
||||
但覆盖顺序并非显而易见,出于清晰考虑,请只配置必要的选项。
|
||||
:::
|
||||
|
||||
@@ -27,7 +27,7 @@ nb plugin install nonebot-plugin-sentry
|
||||
|
||||
### 配置插件
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
错误跟踪通常在生产环境中使用,因此开发环境中 `sentry_dsn` 留空即会停用插件。
|
||||
:::
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ nb plugin install nonebot-plugin-htmlkit
|
||||
- Linux x64 (非 Alpine 等 musl 系发行版)
|
||||
- Linux arm64 (非 Alpine 等 musl 系发行版)
|
||||
|
||||
:::caution 访问网络内容
|
||||
:::warning 访问网络内容
|
||||
|
||||
如果需要访问网络资源(如 http(s) 网页内容),NoneBot 需要客户端型驱动器(Forward)。内置的驱动器有 `~httpx` 与 `~aiohttp`。
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ scheduler.add_job(
|
||||
)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
由于 APScheduler 的定时任务并不是**由事件响应器所触发的事件**,因此其任务函数无法同[事件处理函数](../tutorial/handler.mdx#事件处理函数)一样通过[依赖注入](../tutorial/event-data.mdx#认识依赖注入)获取上下文信息,也无法通过事件响应器对象的方法进行任何操作,因此我们需要使用[调用平台 API](../appendices/api-calling.mdx#调用平台-api)的方式来获取信息或收发消息。
|
||||
|
||||
相对于事件处理依赖而言,编写定时任务更像是编写普通的函数,需要我们自行获取信息以及发送信息,请**不要**将事件处理依赖的特殊语法用于定时任务!
|
||||
|
||||
@@ -422,7 +422,7 @@ __plugin_meta__ = PluginMetadata(
|
||||
)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
`__plugin_meta__` 变量**必须**处于插件最外层(如 `__init__.py` 中),否则无法正常识别。
|
||||
|
||||
一般做法是在 `__init__.py` 中定义 `__plugin_meta__`。
|
||||
|
||||
@@ -51,7 +51,7 @@ description: 配置编辑器以获得最佳体验
|
||||
|
||||
如果您是高级用户,希望尝试 Pylance 的替代方案,或遇到 Pylance 在特定环境下的兼容性问题,可以考虑使用 BasedPyright。
|
||||
|
||||
:::caution 提示
|
||||
:::warning 提示
|
||||
为避免 `Pylance` 和 `BasedPyright` 相互冲突导致配置混乱甚至异常,脚手架默认不允许在创建项目时同时配置这两者。
|
||||
|
||||
如果确实需要同时使用,请在创建项目时选择 Pylance/Pyright 并根据[相关文档](https://docs.basedpyright.com/latest/installation/ides/#vscode-vscodium)进行手动配置。
|
||||
|
||||
@@ -13,7 +13,7 @@ import Messenger from "@site/src/components/Messenger";
|
||||
|
||||
# 快速上手
|
||||
|
||||
:::caution 前提条件
|
||||
:::warning 前提条件
|
||||
|
||||
- 请确保你的 Python 版本 >= 3.9
|
||||
- **我们强烈建议使用虚拟环境进行开发**,如果没有使用虚拟环境,请确保已经卸载可能存在的 NoneBot v1!!!
|
||||
|
||||
@@ -15,7 +15,7 @@ import TabItem from "@theme/TabItem";
|
||||
|
||||
在[快速上手](../quick-start.mdx)中,我们已经介绍了如何安装和使用 `nb-cli` 创建一个项目。在本章节中,我们将简要介绍如何在不使用 `nb-cli` 的方式创建一个机器人项目的**最小实例**并启动。如果你想要了解 NoneBot 的启动流程,也可以阅读本章节。
|
||||
|
||||
:::caution 警告
|
||||
:::warning 警告
|
||||
我们十分不推荐直接创建机器人项目,请优先考虑使用 nb-cli 进行项目创建。
|
||||
:::
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ options:
|
||||
|
||||
## 创建插件
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
如果在之前的[快速上手](../quick-start.mdx)章节中已经使用 `bootstrap` 模板创建了项目,那么你需要做出如下修改:
|
||||
|
||||
1. 在项目目录中创建一个两层文件夹 `awesome_bot/plugins`
|
||||
@@ -65,7 +65,7 @@ options:
|
||||
|
||||
:::
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
如果在之前的[创建项目](./application.mdx)章节中手动创建了相关文件,那么你需要做出如下修改:
|
||||
|
||||
1. 在项目目录中创建一个两层文件夹 `awesome_bot/plugins`
|
||||
@@ -148,7 +148,7 @@ nonebot.load_plugin("path.to.your.plugin") # 加载第三方插件
|
||||
nonebot.load_plugin(Path("./path/to/your/plugin.py")) # 加载项目插件
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
请注意,本地插件的路径应该为相对机器人 **入口文件(通常为 bot.py)** 可导入的,例如在项目 `plugins` 目录下。
|
||||
:::
|
||||
|
||||
@@ -160,7 +160,7 @@ nonebot.load_plugin(Path("./path/to/your/plugin.py")) # 加载项目插件
|
||||
nonebot.load_plugins("src/plugins", "path/to/your/plugins")
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
请注意,插件目录应该为相对机器人 **入口文件(通常为 bot.py)** 可导入的,例如在项目 `plugins` 目录下。
|
||||
:::
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ options:
|
||||
|
||||
顾名思义,消息段 `MessageSegment` 是一段消息。由于消息序列的本质是由若干消息段所组成的序列,消息段可以被认为是构成消息序列的最小单位。简单来说,消息序列类似于一个自然段,而消息段则是组成自然段的一句话。同时,作为特殊消息载体的存在,绝大多数的平台都有着**独特的消息类型**,这些独特的内容均需要由对应的**协议适配器**所提供,以适应不同平台中的消息模式。**这也意味着,你需要导入对应的协议适配器中的消息序列和消息段后才能使用其特殊的工厂方法。**
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
消息段的类型是由协议适配器提供的,因此你需要参考协议适配器的文档并导入对应的消息段后才能使用其特殊的消息类型。
|
||||
|
||||
在上一节的[使用依赖注入](./event-data.mdx#使用依赖注入)中,我们导入的为 `nonebot.adapters.Message` 抽象基类,因此我们无法使用平台特有的消息类型。仅能使用 `str` 作为纯文本消息回复。
|
||||
@@ -34,7 +34,7 @@ options:
|
||||
|
||||
## 使用消息序列
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
在以下的示例中,为了更好的理解多种类型的消息组成方式,我们将使用 `Console` 协议适配器来演示消息序列的使用方法。在实际使用中,你需要确保你使用的**消息序列类型**与你所要发送的**平台类型**一致。
|
||||
:::
|
||||
|
||||
@@ -296,7 +296,7 @@ msg == Message(
|
||||
|
||||
如果 `Message.template` 构建消息模板,那么消息模板将采用消息序列形式的格式化,此时的消息将会是平台特定的:
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
使用 `Message.template` 构建消息模板时,应注意消息序列为平台适配器提供的类型,不能使用 `nonebot.adapters.Message` 基类作为模板构建。使用基类构建模板与使用 `str` 构建模板的效果是一样的,因此请使用上述的 `MessageTemplate` 类直接构建模板。:
|
||||
:::
|
||||
|
||||
@@ -336,7 +336,7 @@ Message(
|
||||
)
|
||||
```
|
||||
|
||||
:::caution 注意
|
||||
:::warning 注意
|
||||
只有消息序列中的文本类型消息段才能被格式化,其他类型的消息段将会原样添加。
|
||||
:::
|
||||
|
||||
|
||||
Reference in New Issue
Block a user