Skip to content

Entari 0.15.0

Choose a tag to compare

@RF-Tar-Railt RF-Tar-Railt released this 23 Aug 06:00
· 154 commits to main since this release

破坏性改动

  • 移除了内置的 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]):
          ...
  • 配置文件中插件名称新增前缀 ?, 表示仅声明该配置项,插件不加载
  • 插件新增 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