Skip to content

Nonebot Plugin Alconna 0.26.0

Compare
Choose a tag to compare
@RF-Tar-Railt RF-Tar-Railt released this 04 Oct 14:15
· 365 commits to master since this release

破坏性改动

  • on_alconna 等删除参数 output_converter, message_provider,用 Extension 替代

新增

  • 新增对象 Extension, 用于自定义 AlconnaMatcher 的部分行为 #7
    例如 LLMExtension,可以用于将自然语言通过llm转为指令:
    from nonebot_plugin_alconna import Extension, Alconna
    
    class LLMExtension(Extension):
        @property
        def priority(self) -> int:
            return 10
    
        @property
        def id(self) -> str:
            return "LLMExt"
        
        def __init__(self, llm):
          self.llm = llm
        
        def post_init(self, alc: Alconna) -> None:
            self.llm.add_context(alc.command, alc.meta.description)
    
        async def message_provider(
            self, event, state, bot, use_origin: bool = False
        ):
            if event.get_type() != "message":
                return 
            resp = await self.llm.input(str(event.get_message()))
            return event.get_message().__class__(resp.content)
    目前 Extension 的功能有:
    • 对于此时事件的来源适配器或bot选择是否接受响应
    • 对输出信息的自定义转换方式
    • 对于事件 -> 消息 的自定义处理方式
    • 对于传入的alc对象的追加的自定义处理
    • 对于 AlconnaMatcher.send 时传入的消息对象的自定义处理方式
    • 自定义额外的matcher api
  • on_alconna 等新增参数 extensionsexclude_ext
    • extensions: 需要加载的匹配扩展, 可以是扩展类或扩展实例
    • exclude_ext: 需要排除的匹配扩展, 可以是扩展类或扩展的id, 可以用来排除预期的全局加载的拓展
  • discord 适配器增加 DiscordSlashExtension,其可自动将 Alconna 对象翻译成 slash指令并注册,且将收到的指令交互事件转为指令供命令解析
  • 新增配置项 ALCONNA_GLOBAL_EXTENSIONS,用来声明全局加载的扩展,例如
     ALCONNA_GLOBAL_EXTENSIONS=["~adapters.discord:DiscordSlashExtension"]
    其值类似于 entry_points 的格式,并且当不指定 ":" 后的属性时自动补全为 ":__extension__"

改进

  • 添加了部分log
  • 为 log与exception 添加了 i18n 支持

修复

杂项

New Contributors

Full Changelog: v0.25.1...v0.26.0