From d67dfe46f62ad184da5f664863ea9cf913a2704b Mon Sep 17 00:00:00 2001 From: crazywhalecc Date: Fri, 9 Jul 2021 10:43:00 +0800 Subject: [PATCH] update to 2.5.0 (build 415) --- docs/component/module/module-pack.md | 113 +++++++++++++++++++++++++++ docs/guide/quickstart-robot.md | 21 +++-- mkdocs.yml | 5 +- src/Module/Example/Hello.php | 2 +- src/ZM/ConsoleApplication.php | 4 +- 5 files changed, 134 insertions(+), 11 deletions(-) create mode 100644 docs/component/module/module-pack.md diff --git a/docs/component/module/module-pack.md b/docs/component/module/module-pack.md new file mode 100644 index 00000000..cdccefc2 --- /dev/null +++ b/docs/component/module/module-pack.md @@ -0,0 +1,113 @@ +# 模块打包 + +从 2.5 版本起,炸毛框架的模块源码支持了打包和分发,开发者可以通过将自己的功能编写打包,并通过互联网进行分发,供其他人使用。此外,还提供了模块包热加载(不解包直接运行)和模块包解包功能。 + +## 构建模块包配置文件 + +炸毛框架的模块区分是根据 `src` 目录下的文件夹定义的,模块包的配置文件命名必须为 `zm.json`,此外,假设我们编写了一个最简单的模块,以脚手架生成的 Example 模块为例,文件夹结构如下: + +``` +src/ +└── Module/ +    ├── Example/ +    │   ├── Hello.php +    │   └── zm.json +    └── Middleware/ +    └── TimerMiddleware.php + +``` + +我们在 Example 目录下创建一个 `zm.json` 的文件,编写配置,即代表 `src/Module/Example/` 文件夹及里面的用户模块源码为一个模块包,也就可以被框架识别并打包处理。 + +编写的配置文件结构如下: + +``` +{ + "name": "my-first-module" +} +``` + +对!你没看错,只需要定义一个 `name` 字段,即可声明这是一个模块包! + +### 配置文件参数 + +#### - description + +- 类型:`string`。 + +- 含义:模块的描述。 + +??? note "点我查看编写实例:" + + ```json + { + "name": "my-first-module", + "description": "这个是一个示例模块打包教程" + } + ``` + +#### - version + +- 类型:string。 +- 含义:模块的版本。 + +版本处理方式和 Composer 基本一致,建议使用三段式,也就是 `大版本.小版本.补丁版本`。关于三段式版本的描述和规范,见 [到底三段式版本号是什么?](https://www.chrisyue.com/what-the-hell-are-semver-and-the-difference-between-composer-version-control-sign-tilde-and-caret.html)。 + +??? note "点我查看编写实例:" + ```json + { + "name": "my-first-module", + "description": "这个是一个示例模块打包教程" + } + ``` + +#### - depends + +- 类型:map of string(例如 `{"foo":"bar","baz":"zoo"}`)。 +- 含义:模块的依赖关系和版本依赖声明。 + +此处用作模块的依赖检测,假设模块 `foo` 依赖模块 `bar` 的 1.x 版本但是不兼容 `bar` 的 2.x 版本,可以像 Composer 的 `require` 一样编写版本依赖:`^1.0`。也可以使用 `~`、`>=`、`*` 这些与 Composer 包管理相同逻辑的版本依赖关系,详见 [Composer - 包版本](https://docs.phpcomposer.com/01-basic-usage.html#Package-Versions)。 + +??? note "点我查看编写实例:" + ```json + { + "name": "foo", + "description": "这个是一个示例模块打包教程", + "depends": { + "bar": "^1.0", + "bsr": "*" + } + } + ``` + +#### - light-cache-store + +- 类型:array of string(例如 `["foo","bar"]`)。 +- 含义:打包模块时要储存的持久化 LightCache 键名列表。 + +这里需要配合 LightCache 使用,如果你有一些需要全局缓存的数据,例如动态配置项,比如群服务状态列表,可以先使用 LightCache 存储并使用 `addPersistence()` 持久化,此后在使用模块打包时编写此配置项。 + +我们假设在项目模块中使用到了 `group-status` 这一个 LightCache,那么只需要写 `light-cache-store` 配置项,在模块打包时就会将持久化的数据也打包到 phar 模块包内。 + +??? note "点我查看编写实例:" + ```json + { + "name": "foo", + "description": "这个是一个示例模块打包教程", + "light-cache-store": [ + "group-status" + ] + } + ``` + + + +| 字段名 | 类型 | 含义 | +| ---------------------- | ---------------------------------- | ---------------------------------------- | +| description | string | 模块的描述 | +| version | string | 模块的版本(建议使用 x.y.z 三段式) | +| depends | array of string(例如`{"a":"b"}`) | 模块依赖关系声明 | +| light-cache-store | string[] | 打包模块时要储存的持久化 LightCache 键名 | +| global-config-override | string \| false | 是否需要手动编辑全局配置(`global.php`) | +| | | | + diff --git a/docs/guide/quickstart-robot.md b/docs/guide/quickstart-robot.md index 42d79a48..64b0887f 100644 --- a/docs/guide/quickstart-robot.md +++ b/docs/guide/quickstart-robot.md @@ -42,16 +42,16 @@ OneBot 机器人部分的选择详情见 [OneBot 实例](/guide/OneBot实例/) delay: 3 # 首次重连延迟, 单位秒 interval: 3 # 重连间隔 max-times: 0 # 最大重连次数, 0为无限制 - + # 是否使用服务器下发的新地址进行重连 # 注意, 此设置可能导致在海外服务器上连接情况更差 use-sso-address: true - + heartbeat: # 心跳频率, 单位秒 # -1 为关闭心跳 interval: 5 - + message: # 上报数据类型 # 可选: string,array @@ -72,13 +72,13 @@ OneBot 机器人部分的选择详情见 [OneBot 实例](/guide/OneBot实例/) remove-reply-at: false # 为Reply附加更多信息 extra-reply-data: false - + output: # 日志等级 trace,debug,info,warn,error log-level: warn # 是否启用 DEBUG debug: false # 开启调试模式 - + # 默认中间件锚点 default-middlewares: &default # 访问密钥, 强烈推荐在公网的服务器设置 @@ -94,14 +94,14 @@ OneBot 机器人部分的选择详情见 [OneBot 实例](/guide/OneBot实例/) enabled: false # 是否启用限速 frequency: 1 # 令牌回复频率, 单位秒 bucket: 1 # 令牌桶大小 - + database: # 数据库相关设置 leveldb: # 是否启用内置leveldb数据库 # 启用将会增加10-20MB的内存占用和一定的磁盘空间 # 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能 enable: true - + # 连接服务列表 servers: # 添加方式,同一连接方式可添加多个,具体配置说明请查看文档 @@ -331,3 +331,10 @@ public function repeat() { > 如果你只回复 `echo` 的话,它会先和你进入一个会话状态,并问你 `请输入你要回复的内容`,这时你再次说一些内容例如 `哦豁`,会回复你 `哦豁`。效果和直接输入 `echo 哦豁` 是一致的,这是炸毛框架内的一个封装好的命令参数对话询问功能。有关参数询问功能,请看后面的进阶模块。 + + +## 使用机器人 API 和事件 + +如果你想不只是回复消息,还要做其他复杂的动作(Action),使用 OneBot Action(又名 OneBot API)进行发送即可,见 [机器人 API](/component/bot/robot-api)。 + +如果想处理其他类型的事件,比如 QQ 群通知事件等,见 [机器人注解事件](/event/robot-annotations/)。 \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 4ebcd790..429d85c2 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -29,6 +29,7 @@ markdown_extensions: - pymdownx.superfences - pymdownx.inlinehilite - pymdownx.snippets + - pymdownx.details - abbr - pymdownx.highlight: linenums: true @@ -93,13 +94,15 @@ nav: - HTTP 服务器工具类: - HTTP 和 WebSocket 客户端: component/zmrequest.md - HTTP 路由管理: component/route-manager.md + - 模块/插件管理: + - 模块打包: component/module/module-pack.md - 协程池: component/coroutine-pool.md - 单例类: component/singleton-trait.md - ZMUtil 杂项: component/zmutil.md - 全局方法: component/global-functions.md - Console 终端: component/console.md - TaskWorker 管理: component/task-worker.md - - 远程终端: component/remote-terminal.md + - Terminal 终端: component/remote-terminal.md - 进阶开发: - 进阶开发: advanced/index.md - 框架剖析: advanced/framework-structure.md diff --git a/src/Module/Example/Hello.php b/src/Module/Example/Hello.php index 207674db..d0566273 100644 --- a/src/Module/Example/Hello.php +++ b/src/Module/Example/Hello.php @@ -190,6 +190,6 @@ class Hello */ public function closeUnknownConn() { Console::info("Unknown connection , I will close it."); - server()->close(ctx()->getConnection()->getFd()); + server()->disconnect(ctx()->getConnection()->getFd()); } } diff --git a/src/ZM/ConsoleApplication.php b/src/ZM/ConsoleApplication.php index 9e689a97..c872ca92 100644 --- a/src/ZM/ConsoleApplication.php +++ b/src/ZM/ConsoleApplication.php @@ -28,8 +28,8 @@ class ConsoleApplication extends Application { private static $obj = null; - const VERSION_ID = 414; - const VERSION = "2.5.0-b4"; + const VERSION_ID = 415; + const VERSION = "2.5.0"; /** * @throws InitException