diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 7fea3620..5c709590 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -26,6 +26,7 @@ module.exports = { activeHeaderLinks: false, nav: [ { text: '指南', link: '/guide/' }, + { text: '事件', link: '/event/' }, { text: 'API 文档', link: '/doxy/', target: '_blank' }, { text: '炸毛框架 v2', link: 'https://docs-v2.zhamao.xin/' } ], @@ -44,6 +45,21 @@ module.exports = { ] } ], + '/event/': [ + { + title: '事件', + collapsable: false, + sidebarDepth: 1, + children: [ + '', + 'bot', + 'http', + 'middleware', + 'framework', + 'extend', + ] + } + ] } } } diff --git a/docs/event/README.md b/docs/event/README.md new file mode 100644 index 00000000..b21a1c91 --- /dev/null +++ b/docs/event/README.md @@ -0,0 +1,25 @@ +# 入门 + +## 事件是什么 + +简单来说,事件是一个底层的 Event Loop 收到消息后调用对应的方法的一个模型,比如给机器人发送消息后框架会调用你定义的方法来执行你的业务代码。 + +## 属性和注解是什么 + +属性(Attribute)是 PHP 8 最大的新变化之一,是 PHP 官方支持的、内置的注解实现,允许我们通过编程方式获取对应的元数据,可以大大方便我们对某一类代码进行处理。 + +而注解(Annotation)则是在 PHP 尚未支持属性的时代,用来代替的社区实现方案,通过解析 PHPDoc 注释来实现自己的注解机制。 + +炸毛框架同时支持注解和属性,在文档当中,有时会混用两者的字眼,在大多数情况下都可以安全地交换使用,例如 `#[BotEvent]` 和 `@BotEvent` 的行为是完全一致的。 + +## 注解和事件的关系 + +在炸毛框架中,注解是事件分发的一个重要角色,但注解本身并非事件,更恰当地说,注解代表了事件。 + +无论是机器人开发过程中场景的 `#[BotCommand]` 或是 HTTP 服务的路由 `#[RequestMapping]` 都是注解代表事件的例子。 + +## 阻断事件分发 + +在炸毛框架中,事件由一个统一的事件分发器进行分发,你可以在任意事件中阻断所有后续的分发。 + +(待考) diff --git a/docs/event/bot.md b/docs/event/bot.md new file mode 100644 index 00000000..ab48a1dd --- /dev/null +++ b/docs/event/bot.md @@ -0,0 +1,86 @@ +# 机器人事件 + + + +> 在使用注解绑定事件时,如果不存在 **必需** 参数,可一个参数都不写,效果就是此事件在任何情况下都会调用此方法,例如 `#[BotEvent()]` 会在收到任意机器人事件时调用。 +> + +## BotAction + +啊? + +| 参数名称 | 允许值 | 用途 | 默认 | +| --- | --- | --- | --- | +| action | string | 动作名称 | “” | +| need_response | string | 动作是否需要响应 | false | +| level | int | 事件优先级(越大越先执行) | 20 | + +## BotActionResponse + +啊?? + +| 参数名称 | 允许值 | 用途 | 默认 | +| --- | --- | --- | --- | +| retcode | int | 响应码 | null | +| level | int | 事件优先级(越大越先执行) | 20 | + +## BotEvent + +用于处理所有的机器人事件,具体的参数含义可以参见 [https://12.onebot.dev/connect/data-protocol/event/](https://12.onebot.dev/connect/data-protocol/event/)。 + +| 参数名称 | 允许值 | 用途 | 默认 | +| --- | --- | --- | --- | +| type | string | 对应标准中的事件类型 | null | +| detail_type | string | 对应标准中的事件详细类型 | null | +| sub_type | string | 对应标准中的事件子类型 | null | +| level | int | 事件优先级(越大越先执行) | 20 | + +## BotCommand + +对于 `BotEvent` 的封装,用于支持常用的命令式调用(如:”天气 深圳”)。 + +| 参数名称 | 允许值 | 用途 | 默认 | +| --- | --- | --- | --- | +| name | string | 命令名称,应全局唯一 | “” | +| match | string | 匹配第一个词的命令式消息,如 天气 北京 中的 天气 | “” | +| pattern | string | 根据 * 号通配符进行模式匹配用户消息,如 查询*天气 | “” | +| regex | string 合法的正则表达式 | 匹配正则表达式匹配到的用户消息 | “” | +| start_with | string | 匹配消息开头相匹配的消息,如 我叫炸毛,这里写 我叫 | “” | +| end_with | string | 匹配消息结尾相匹配的消息,以 start_with 类推 | “” | +| keyword | string | 匹配消息中有相关关键词的消息 | “” | +| alias | string | match 匹配到命令的别名,数组形式 | [] | +| detail_type | string | 限定消息事件的详细类型,见 BotEvent | “” | +| prefix | string | | | +| level | int | 事件优先级(越大越先执行) | 20 | + +> 机器人命令注册的实例可参见【一堆例子链接】 +> + +## CommandArgument + +与 BotCommand 搭配使用,可以自动识别参数及生成帮助。 + +| 参数名称 | 允许值 | 用途 | 默认 | +| --- | --- | --- | --- | +| name | string | 参数名称 | “” | +| description | string | 参数描述 | “” | +| required | bool | 参数是否必需 | false | +| prompt | string | 当参数缺失时请求用户输入时提示的消息(需要参数设为必需) | “请输入{$name}” | +| default | mixed | 当参数非必需且未填入时的默认值 | null | +| timeout | int 单位秒 | 请求输入超时时间 | 60 | + +## CommandHelp + +与 BotCommand 搭配使用,可以补充生成的帮助信息。 + +| 参数名称 | 允许值 | 用途 | 默认 | +| --- | --- | --- | --- | +| description | string | 命令描述 | “” | +| usage | string | 命令用法 | “” | +| example | string | 命令示例 | “” | + +> 关于自动帮助生成的更多信息,请参见 【这里链接】 +> diff --git a/docs/event/extend.md b/docs/event/extend.md new file mode 100644 index 00000000..e6b10116 --- /dev/null +++ b/docs/event/extend.md @@ -0,0 +1,3 @@ +# 扩展事件分发器 + +TODO diff --git a/docs/event/framework.md b/docs/event/framework.md new file mode 100644 index 00000000..d27b5a27 --- /dev/null +++ b/docs/event/framework.md @@ -0,0 +1,31 @@ +# 框架事件 + + + +## BindEvent + +相对底层的事件绑定,支持绑定所有透过框架分发的事件。 + +| 参数名称 | 允许值 | 用途 | 默认 | +| --- | --- | --- | --- | +| event_class | string | 时间名 | 必填 | +| level | int | 事件优先级(越大越先执行) | 800 | + +## Init + +在 Worker 进程初始化时触发,用于进行 Worker 初始化。 + +| 参数名称 | 允许值 | 用途 | 默认 | +| --- | --- | --- | --- | +| worker | int 由 0 至 (最大Worker数-1) | 限定执行的 Worker 进程,-1 为在所有 Worker 执行 | 0 | + +## Setup + +在框架初始化时触发,在主进程执行,不可使用协程相关功能。 + +可用于改变所有进程的设置,相关更改会随着进程创建应用到所有 Worker 和 Manager 进程。 + +*没有参数* diff --git a/docs/event/http.md b/docs/event/http.md new file mode 100644 index 00000000..c8b5000d --- /dev/null +++ b/docs/event/http.md @@ -0,0 +1,25 @@ +# 路由事件 + + + +## Controller + +对同一类下的路由进行修饰,只可在类上使用。 + +| 参数名称 | 允许值 | 用途 | 默认 | +| --- | --- | --- | --- | +| prefix | string | 路由前缀,应用到类下的所有路由 | 必填 | + +## Route + +路由事件,当对应的路由收到请求时触发。 + +| 参数名称 | 允许值 | 用途 | 默认 | +| --- | --- | --- | --- | +| route | string | 路由 | 必填 | +| name | string | 路由名称 | “” | +| request_method | array | 允许的请求方法 | [’GET’, ‘POST’] | +| params | array | 路由参数 | [] | diff --git a/docs/event/middleware.md b/docs/event/middleware.md new file mode 100644 index 00000000..a84761fb --- /dev/null +++ b/docs/event/middleware.md @@ -0,0 +1,18 @@ +# 中间件事件 + + + +## Middleware + +当绑定了此中间件的方法被触发时触发。 + +| 参数名称 | 允许值 | 用途 | 默认 | +| --- | --- | --- | --- | +| name | string | 中间件名称 | 必填 | +| params | array | 中间件参数 | [] | + +> 关于中间件的具体用法,请参见【再来链接】 +>