Skip to content

v5 - 正在使用

大幅度更新了API,部分旧API可兼容

0.5.3

彻底从底层改写了ayaka的状态机

现在,ayaka拥有一棵唯一的状态机树

0层 - root
1层 - 插件1 插件2 插件3 ...
2层 - 插件1.一级菜单项 ...
3层 - 插件1.一级菜单项.二级菜单项 ...

所有状态都是树中的一个结点

group.state指向树中的一个结点

不同的group.state其指向的结点不同,但是均属于这棵唯一的状态机树

每个状态结点都可以设置其进入、离开时触发的回调。举例说明其作用:

root.插件1.测试 -> root.插件2.你好

具体流程:

  • 执行root.插件1.测试的退出回调
  • 执行root.插件1的退出回调
  • 执行root.插件2的进入回调
  • 执行root.插件2.你好的进入回调

修改了ayaka注册回调的方法

现在它更具拓展性,且不再要求装饰器的书写顺序

具体原理:

所有被app.on_x系列装饰器修饰过的函数func,其修改后的结果保存在func.xxx属性上,而func本身被存入一个总列表

当所有插件的装饰器都修饰完毕后,遍历总列表,此时才依照func身上保存的属性,生成对应的触发器

随后,当bot收到消息后,找到对应的触发器执行回调

增加了AyakaInput类和ayaka.msy_type模块

提供一个简单的参数解析

增加了AyakaDB、AyakaUserDB、AyakaGroupDB类

提供sqlite数据库支持

删除了ayaka.storage

重新设计了ayaka.cache,增加了AyakaCache类

删除了ayaka.BaseConfig属性,增加了AyakaConfig、AyakaLargeConfig类

删除了ayaka.parse

兼容旧API

  • app.on.text
  • app.on.command
  • app.on.idle
  • app.on.state
  • app.on.everyday
  • app.on.interval

特殊:@app.on.state("*")兼容性一般,可能会出现错误。建议更换为

@app.on_state()
@app.on_deep_all()

暂时移除了插件的启用、禁用功能

考虑使用更加精细的控制,精确到群、插件、人、时间段

考虑分成两部分开发,一部分是核心控制逻辑,没有和用户交互的方法,

另一部分是前台交互应用,用户通过它间接调用核心控制逻辑,

从而提高核心控制逻辑的可拓展性

新增方法

  • app.set_start_cmds
  • app.set_close_cmds

新注册回调方法

  • app.on_cmd
  • app.on_text
  • app.on_idle
  • app.on_state