用户流程
用户注册平台适配器
- 所有平台都是一个端口
- 不同平台的 path 不一样
- 可以设置是 ws 方式还是 http 方式
用户注册路由
- 插件就是一系列行为的集合,由函数响应器或者类响应器组合而成
- 用户的也是由这两者组成
- 路由中设置转发
- 这些是多对多的关系
- 可以用 django 式的集中路由,也可以用 flask 风格的装饰器,最终解析出的 meta 都是一样的
- 哪些响应器对应哪些平台,哪些群
- 需要哪些指令,应用到哪些群和响应器上
用户其它行为
启动框架
框架流程
解析路由,缓存
- 根据注册的路由,先缓存所有的函数、类响应器,把他们映射到不同的事件上
- 缓存平台、群号、响应器、指令的对应关系
- 缓存不同平台机器人自身信息,如果协议有接口的话
有新事件时
- 根据缓存的解析出来的映射关系,调用事件对应的响应器
- 如果有 hook 的话,比如 pre、post 之类,按顺序调用即可
- 群消息事件时,调用指令(可以做到 poke 之后响应指令,也就是说,非文字消息,不过没太大必要)
定时任务
主动行为
- 获取群文件、成员列表之类比较大的文件时,缓存至 sqlite
- 可以 refresh=True,强制重新获取,而不使用缓存
跨平台实现
事件响应/转发机制
- 先看是否是 PepperBot 的通用事件
- group_message
- 通用事件,就是将不同平台的接口统一了
- 如果不是,查看是否是各个平台的对应事件
- onebot_something
- keaimao_something
- 平台独立事件,即使事件名称可能相似,但是接口一般是不一样的
- 如果都没有,报错——无效事件
api 调用/转发机制
- 通用 api,一致的接口,内部会自动转化为不同协议的格式
- 通用 api 内部,调用的其实就是平台独立 api,也可以直接调用
- 平台独立 api