mirror of
				https://github.com/nonebot/nonebot2.git
				synced 2025-10-31 15:06:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			241 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			241 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | ||
| sidebar_position: 1
 | ||
| description: 项目配置方式与配置项
 | ||
| 
 | ||
| options:
 | ||
|   menu:
 | ||
|     weight: 21
 | ||
|     category: guide
 | ||
| ---
 | ||
| 
 | ||
| # 配置
 | ||
| 
 | ||
| 在上一章节中,我们创建了默认的项目结构,其中 `.env` 和 `.env.*` 均为项目的配置文件,下面将介绍几种 NoneBot 配置方式以及配置项。
 | ||
| 
 | ||
| :::danger 警告
 | ||
| 请勿将敏感信息写入配置文件并提交至开源仓库!
 | ||
| :::
 | ||
| 
 | ||
| ## 配置方式
 | ||
| 
 | ||
| ### .env 文件
 | ||
| 
 | ||
| NoneBot 在启动时将会从系统环境变量或者 `.env` 文件中寻找变量 `ENVIRONMENT`(大小写不敏感),默认值为 `prod`。  
 | ||
| 这将引导 NoneBot 从系统环境变量或者 `.env.{ENVIRONMENT}` 文件中进一步加载具体配置。
 | ||
| 
 | ||
| `.env` 文件是基础环境配置文件,该文件中的配置项在不同环境下都会被加载,但会被 `.env.{ENVIRONMENT}` 文件中的配置所覆盖。
 | ||
| 
 | ||
| NoneBot 使用 [Pydantic](https://pydantic-docs.helpmanual.io/) 进行配置处理,并对 Pydantic 的行为做出了更改,详见下方说明。
 | ||
| 
 | ||
| 现在,我们在 `.env` 文件中写入当前环境信息:
 | ||
| 
 | ||
| ```bash
 | ||
| # .env
 | ||
| ENVIRONMENT=dev
 | ||
| CUSTOM_CONFIG=common config  # 这个配置项在任何环境中都会被加载
 | ||
| ```
 | ||
| 
 | ||
| 如你所想,之后 NoneBot 就会从 `.env.dev` 文件中加载环境变量。
 | ||
| 
 | ||
| :::important 参考文档
 | ||
| `.env` 相关文件的加载使用 `dotenv` 语法,请参考 [`dotenv` 文档](https://saurabh-kumar.com/python-dotenv/)
 | ||
| :::
 | ||
| 
 | ||
| :::warning 提示
 | ||
| 由于 Pydantic 使用 JSON 解析配置项,请确保配置项值为 JSON 格式的数据。如:
 | ||
| 
 | ||
| ```bash
 | ||
| list=["123456789", "987654321", 1]
 | ||
| test={"hello": "world"}
 | ||
| ```
 | ||
| 
 | ||
| 如果配置项值解析失败将作为**字符串**处理。
 | ||
| 
 | ||
| 特别的,如果配置项**为空**,则会从**系统环境变量**中获取值,如果不存在则为空字符串。
 | ||
| :::
 | ||
| 
 | ||
| ### .env.\* 文件
 | ||
| 
 | ||
| NoneBot 默认会从 `.env.{ENVIRONMENT}` 文件加载配置,但是可以在 NoneBot 初始化时指定加载某个环境配置文件:`nonebot.init(_env_file=".env.dev")`,这将忽略你在 `.env` 中设置的 `ENVIRONMENT` 。
 | ||
| 
 | ||
| 配置语法与 `.env` 文件相同。
 | ||
| 
 | ||
| 示例及说明:
 | ||
| 
 | ||
| ```bash
 | ||
| HOST=0.0.0.0  # 配置 NoneBot2 监听的 IP/主机名
 | ||
| PORT=8080  # 配置 NoneBot2 监听的端口
 | ||
| SUPERUSERS=["123456789", "987654321"]  # 配置 NoneBot 超级用户
 | ||
| NICKNAME=["awesome", "bot"]  # 配置机器人的昵称
 | ||
| COMMAND_START=["/", ""]  # 配置命令起始字符
 | ||
| COMMAND_SEP=["."]  # 配置命令分割字符
 | ||
| 
 | ||
| # Custom Configs
 | ||
| CUSTOM_CONFIG1="config in env file"
 | ||
| CUSTOM_CONFIG2=  # 留空则从系统环境变量读取,如不存在则为空字符串
 | ||
| ```
 | ||
| 
 | ||
| 详细的配置项可以参考[配置项](#详细配置项)。
 | ||
| 
 | ||
| ### 系统环境变量
 | ||
| 
 | ||
| 如果在系统环境变量中定义了配置,则一样会被读取。
 | ||
| 
 | ||
| ### bot.py 文件
 | ||
| 
 | ||
| 配置项也可以在 NoneBot 初始化时传入。此处可以传入任意合法 Python 变量。当然也可以在初始化完成后修改或新增。
 | ||
| 
 | ||
| 示例:
 | ||
| 
 | ||
| ```python
 | ||
| # bot.py
 | ||
| import nonebot
 | ||
| 
 | ||
| nonebot.init(custom_config3="config on init")
 | ||
| 
 | ||
| config = nonebot.get_driver().config
 | ||
| config.custom_config3 = "changed after init"
 | ||
| config.custom_config4 = "new config after init"
 | ||
| ```
 | ||
| 
 | ||
| ## 配置优先级
 | ||
| 
 | ||
| `bot.py` 文件(`nonebot.init`)> 系统环境变量 > `.env`、`.env.*` 文件
 | ||
| 
 | ||
| ## 读取配置项
 | ||
| 
 | ||
| 配置项可以通过三种类型的对象获取:`driver`、`adapter`、`bot`。
 | ||
| 
 | ||
| ```python
 | ||
| import nonebot
 | ||
| # driver
 | ||
| nonebot.get_driver().config.custom_config
 | ||
| # bot
 | ||
| nonebot.get_bot().config.custom_config
 | ||
| # adapter
 | ||
| nonebot.get_driver()._adapters["adapter_name"].config.custom_config
 | ||
| ```
 | ||
| 
 | ||
| ## 详细配置项
 | ||
| 
 | ||
| 配置项的 API 文档可以前往 [Class Config](../api/config.md#class-config) 查看。
 | ||
| 
 | ||
| ### Driver
 | ||
| 
 | ||
| - **类型**: `str`
 | ||
| - **默认值**: `"~fastapi"`
 | ||
| 
 | ||
| NoneBot2 运行所使用的驱动器。主要分为 `ForwardDriver`、`ReverseDriver` 即客户端和服务端两类。
 | ||
| 
 | ||
| 配置格式采用特殊语法:`<module>[:<Driver>][+<module>[:<Mixin>]]*`
 | ||
| 
 | ||
| 其中 `<module>` 为驱动器模块名,可以使用 `~` 作为 `nonebot.drivers.` 的简写;`<Driver>` 为驱动器类名,默认为 `Driver`;`<Mixin>` 为驱动器混入的类名,默认为 `Mixin`。
 | ||
| 
 | ||
| NoneBot2 内置了几个常用驱动器,包括了各类常用功能,常见驱动器配置如下:
 | ||
| 
 | ||
| ```env
 | ||
| DRIVER=~fastapi
 | ||
| DRIVER=~httpx+~websockets
 | ||
| DRIVER=~fastapi+~httpx+~websockets
 | ||
| DRIVER=~fastapi+~aiohttp
 | ||
| ```
 | ||
| 
 | ||
| 各驱动器的功能与区别请参考[选择驱动器](./choose-driver.md)。
 | ||
| 
 | ||
| ### Host
 | ||
| 
 | ||
| - **类型**: `IPvAnyAddress`
 | ||
| - **默认值**: `127.0.0.1`
 | ||
| 
 | ||
| 使用 `ReversedDriver` 时,NoneBot2 监听的 IP/主机名。
 | ||
| 
 | ||
| ```env
 | ||
| HOST=127.0.0.1
 | ||
| ```
 | ||
| 
 | ||
| ### Port
 | ||
| 
 | ||
| - **类型**: `int`
 | ||
| - **默认值**: `8080`
 | ||
| 
 | ||
| 使用 `ReversedDriver` 时,NoneBot2 监听的端口。
 | ||
| 
 | ||
| ```env
 | ||
| PORT=8080
 | ||
| ```
 | ||
| 
 | ||
| ### Log Level
 | ||
| 
 | ||
| - **类型**: `int | str`
 | ||
| - **默认值**: `INFO`
 | ||
| 
 | ||
| NoneBot2 日志输出等级,可以为 `int` 类型等级或等级名称
 | ||
| 
 | ||
| 参考 [`loguru 日志等级`](https://loguru.readthedocs.io/en/stable/api/logger.html#levels)。
 | ||
| 
 | ||
| ```env
 | ||
| LOG_LEVEL=INFO
 | ||
| ```
 | ||
| 
 | ||
| :::tip 提示
 | ||
| 日志等级名称应为大写,如 `INFO`。
 | ||
| :::
 | ||
| 
 | ||
| ### API Timeout
 | ||
| 
 | ||
| - **类型**: `Optional[float]`
 | ||
| - **默认值**: `30.0`
 | ||
| 
 | ||
| API 请求超时时间,单位为秒。
 | ||
| 
 | ||
| ```env
 | ||
| API_TIMEOUT=30.0
 | ||
| ```
 | ||
| 
 | ||
| ### SuperUsers
 | ||
| 
 | ||
| - **类型**: `Set[str]`
 | ||
| - **默认值**: `set()`
 | ||
| 
 | ||
| 机器人超级用户,可以使用权限 [`SUPERUSER`](../api/permission.md#SUPERUSER)。
 | ||
| 
 | ||
| ```env
 | ||
| SUPERUSERS=["1234567890"]
 | ||
| ```
 | ||
| 
 | ||
| ### Nickname
 | ||
| 
 | ||
| - **类型**: `Set[str]`
 | ||
| - **默认值**: `set()`
 | ||
| 
 | ||
| 机器人昵称,通常协议适配器会根据用户是否 @user 或者是否以机器人昵称开头来判断是否是向机器人发送的消息。
 | ||
| 
 | ||
| ```env
 | ||
| NICKNAME=["bot"]
 | ||
| ```
 | ||
| 
 | ||
| ### Command Start 和 Command Separator
 | ||
| 
 | ||
| - **类型**: `Set[str]`
 | ||
| - **默认值**:
 | ||
|   - Command Start: `{"/"}`
 | ||
|   - Command Separator: `{"."}`
 | ||
| 
 | ||
| 命令消息的起始符和分隔符。用于 [`command`](../api/rule.md#command) 规则。
 | ||
| 
 | ||
| ```env
 | ||
| COMMAND_START={"/", "!"}
 | ||
| COMMAND_SEP={".", "/"}
 | ||
| ```
 | ||
| 
 | ||
| ### Session Expire Timeout
 | ||
| 
 | ||
| - **类型**: `timedelta`
 | ||
| - **默认值**: `timedelta(minutes=2)`
 | ||
| 
 | ||
| 用户会话超时时间,配置格式参考 [Datetime Types](https://pydantic-docs.helpmanual.io/usage/types/#datetime-types)。
 | ||
| 
 | ||
| ```env
 | ||
| SESSION_EXPIRE_TIMEOUT=120
 | ||
| ```
 |