Entari 0.15.0
破坏性改动
- 移除了内置的 cli 程序,由
entari-cli替代- 通过
arclet-entari[cli]或arclet-entari[full]将一并安装 entari-cli
- 通过
- 移除了内置插件
database, 迁移至entari-plugin-database
新增
- 插件内支持声明一个
__plugin_apply__函数,类似RootlessPlugin.apply, 允许将插件主体定义在函数体内。- 通过
__plugin_apply__,一个模块即使不处于加载插件的上下文也能使用 __plugin_apply__会在所有服务进入blocking阶段后才加载
- 通过
- 插件允许声明对服务的依赖 (仅限由插件引入的服务),当服务未加载或未准备时,插件将一直处于等待阶段。
- 全局性的服务依赖声明应在 PluginMetadata 的
depend_services字段 - 若针对局部的某一个响应器,应使用
inject装饰器 - inject 可传入表示服务 ID 的字符串,或服务类,或一个字典,包含服务ID和预期的等待阶段
from typing import Sequence from arclet.entari import Session, command, metadata from entari_plugin_record import Record metadata(name=__name__, depend_services=["database/sqlalchemy"]) @command.on("read") async def read(sess: Session, recs: Sequence[Record]): ...
- 全局性的服务依赖声明应在 PluginMetadata 的
- 配置文件中插件名称新增前缀
?, 表示仅声明该配置项,插件不加载 - 插件新增
enable和disable方法。- 禁用插件将使其本体与所有的子插件和下游插件无法再响应事件,本体引入的服务也将停止
- 启用插件将使其本体与所有的子插件和下游插件能重新响应事件,本体引入的服务也将启用
- 基础配置新增
log.save, 用于配置是否保存日志为文件
basic:
log:
save:
rotation: "00:00" # "Log rotation time, e.g., '00:00' for daily rotation"
compression: "zip" # "Compression format for log saving, e.g., 'zip'"
colorize: false # "Whether to colorize the log output"改进
session.prompt允许传入自定义 handler- Rootless 插件现在默认会加载
- 现在插件中所有的订阅者只由插件管理(例如 commands 声明的订阅者)
- 插件卸载后,下游插件将禁用,而不是一并卸载
TYPE_CHECKING内的插件导入现在将忽略- 配置文件中的插件前缀
~现在用于表示插件加载后即禁用,而非不加载 - 基础配置中
log_level与log_ignores合并为log字段与子项。
basic:
-- log_level: info
-- log_ignores: []
++ log:
++ level: info
++ ignores: []Full Changelog: v0.14.1...v0.15.0