mirror of
https://github.com/zhamao-robot/zhamao-framework.git
synced 2026-03-18 05:04:51 +08:00
45 lines
61 KiB
HTML
45 lines
61 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en-US">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||
<title>更新日志(v2 版本) | 炸毛框架 v3</title>
|
||
<meta name="description" content="">
|
||
<meta name="generator" content="VuePress 1.9.10">
|
||
<link rel="icon" href="/logo_trans.png">
|
||
<script>
|
||
var _hmt = _hmt || [];
|
||
(function () {
|
||
var hm = document.createElement("script");
|
||
hm.src = "https://hm.baidu.com/hm.js?f0f276cefa10aa31a20ae3815a50b795";
|
||
var s = document.getElementsByTagName("script")[0];
|
||
s.parentNode.insertBefore(hm, s);
|
||
})();
|
||
</script>
|
||
<meta name="description" content="一个高性能聊天机器人 + Web 框架">
|
||
<link rel="preload" href="/assets/css/0.styles.de075592.css" as="style"><link rel="preload" href="/assets/js/app.cf958133.js" as="script"><link rel="preload" href="/assets/js/2.4c04991c.js" as="script"><link rel="preload" href="/assets/js/1.d8755a39.js" as="script"><link rel="preload" href="/assets/js/60.f277436c.js" as="script"><link rel="prefetch" href="/assets/js/10.960912c3.js"><link rel="prefetch" href="/assets/js/11.cd171694.js"><link rel="prefetch" href="/assets/js/12.ff9ca1d1.js"><link rel="prefetch" href="/assets/js/13.a56deac8.js"><link rel="prefetch" href="/assets/js/14.b222a011.js"><link rel="prefetch" href="/assets/js/15.31489867.js"><link rel="prefetch" href="/assets/js/16.e921dbc4.js"><link rel="prefetch" href="/assets/js/17.58f730d3.js"><link rel="prefetch" href="/assets/js/18.26c46c49.js"><link rel="prefetch" href="/assets/js/19.ee0bfd3b.js"><link rel="prefetch" href="/assets/js/20.bb3578b8.js"><link rel="prefetch" href="/assets/js/21.e66f7fe5.js"><link rel="prefetch" href="/assets/js/22.cba8ca48.js"><link rel="prefetch" href="/assets/js/23.cb49f41c.js"><link rel="prefetch" href="/assets/js/24.d95b175a.js"><link rel="prefetch" href="/assets/js/25.b0d69869.js"><link rel="prefetch" href="/assets/js/26.8e7089c0.js"><link rel="prefetch" href="/assets/js/27.333a53a1.js"><link rel="prefetch" href="/assets/js/28.df4b871c.js"><link rel="prefetch" href="/assets/js/29.5427ad45.js"><link rel="prefetch" href="/assets/js/3.07fc018e.js"><link rel="prefetch" href="/assets/js/30.7cb7445a.js"><link rel="prefetch" href="/assets/js/31.5c4bb546.js"><link rel="prefetch" href="/assets/js/32.7fc05474.js"><link rel="prefetch" href="/assets/js/33.9684a4f8.js"><link rel="prefetch" href="/assets/js/34.83e32a28.js"><link rel="prefetch" href="/assets/js/35.95d03df6.js"><link rel="prefetch" href="/assets/js/36.80aace42.js"><link rel="prefetch" href="/assets/js/37.1eaed2ee.js"><link rel="prefetch" href="/assets/js/38.75fa7a1c.js"><link rel="prefetch" href="/assets/js/39.117f5802.js"><link rel="prefetch" href="/assets/js/4.6623271b.js"><link rel="prefetch" href="/assets/js/40.57eba153.js"><link rel="prefetch" href="/assets/js/41.89c4a7c8.js"><link rel="prefetch" href="/assets/js/42.d8f92f99.js"><link rel="prefetch" href="/assets/js/43.5ee83631.js"><link rel="prefetch" href="/assets/js/44.c09b5b0c.js"><link rel="prefetch" href="/assets/js/45.bd850606.js"><link rel="prefetch" href="/assets/js/46.732b1cef.js"><link rel="prefetch" href="/assets/js/47.2a872d0d.js"><link rel="prefetch" href="/assets/js/48.959e18f4.js"><link rel="prefetch" href="/assets/js/49.a9bb32f7.js"><link rel="prefetch" href="/assets/js/5.073233e8.js"><link rel="prefetch" href="/assets/js/50.ca90a854.js"><link rel="prefetch" href="/assets/js/51.79142530.js"><link rel="prefetch" href="/assets/js/52.fe63ad16.js"><link rel="prefetch" href="/assets/js/53.ed84845a.js"><link rel="prefetch" href="/assets/js/54.3ab7e492.js"><link rel="prefetch" href="/assets/js/55.9028e407.js"><link rel="prefetch" href="/assets/js/56.8173f798.js"><link rel="prefetch" href="/assets/js/57.2166b068.js"><link rel="prefetch" href="/assets/js/58.7c52b6bf.js"><link rel="prefetch" href="/assets/js/59.e9965a7b.js"><link rel="prefetch" href="/assets/js/61.3712f8fe.js"><link rel="prefetch" href="/assets/js/8.899a0731.js"><link rel="prefetch" href="/assets/js/9.e2e8da12.js"><link rel="prefetch" href="/assets/js/vendors~docsearch.303532f0.js">
|
||
<link rel="stylesheet" href="/assets/css/0.styles.de075592.css">
|
||
</head>
|
||
<body>
|
||
<div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="ant-row"><div class="nav-button"><i aria-label="icon: bars" class="anticon anticon-bars"><svg viewBox="0 0 1024 1024" focusable="false" data-icon="bars" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M912 192H328c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h584c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 284H328c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h584c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 284H328c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h584c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM104 228a56 56 0 1 0 112 0 56 56 0 1 0-112 0zm0 284a56 56 0 1 0 112 0 56 56 0 1 0-112 0zm0 284a56 56 0 1 0 112 0 56 56 0 1 0-112 0z"></path></svg></i> <span></span></div> <div class="ant-col ant-col-xs-24 ant-col-sm-24 ant-col-md-6 ant-col-lg-6 ant-col-xl-5 ant-col-xxl-4"><a href="/" class="router-link-active home-link"><img src="/logo_trans.png" alt="炸毛框架 v3" class="logo"> <span class="site-name">炸毛框架 v3</span></a> <div class="search-box mobile-search"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div></div> <div class="nav-space-between ant-col ant-col-xs-0 ant-col-sm-0 ant-col-md-18 ant-col-lg-18 ant-col-xl-19 ant-col-xxl-20"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><ul role="menu" id="nav" class="ant-menu ant-menu-horizontal ant-menu-root ant-menu-light"><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="/guide/">
|
||
指南
|
||
</a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="/event/">
|
||
事件
|
||
</a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="/components/bot/bot-context.html">
|
||
组件
|
||
</a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="/plugins/management.html">
|
||
插件
|
||
</a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="/advanced/">
|
||
进阶
|
||
</a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="/update/v3.html">
|
||
更新日志
|
||
</a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="/doxy/" target="_blank">
|
||
API 文档
|
||
<i aria-label="icon: link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 0 0-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 0 0-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 0 0 0 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 0 0 0 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 0 0-11.3 0L372.3 598.7a8.03 8.03 0 0 0 0 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></i></a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="https://docs-v2.zhamao.xin/" target="_blank">
|
||
炸毛框架 v2
|
||
<i aria-label="icon: link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 0 0-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 0 0-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 0 0 0 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 0 0 0 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 0 0-11.3 0L372.3 598.7a8.03 8.03 0 0 0 0 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></i></a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="visibility:hidden;position:absolute;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li></ul> <ul class="extra-group"><li><a href="https://github.com/zhamao-robot/zhamao-framework" target="_blank" rel="noopener noreferrer" class="repo-link"><i aria-label="icon: github" class="anticon anticon-github"><svg viewBox="64 64 896 896" focusable="false" data-icon="github" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M511.6 76.3C264.3 76.2 64 276.4 64 523.5 64 718.9 189.3 885 363.8 946c23.5 5.9 19.9-10.8 19.9-22.2v-77.5c-135.7 15.9-141.2-73.9-150.3-88.9C215 726 171.5 718 184.5 703c30.9-15.9 62.4 4 98.9 57.9 26.4 39.1 77.9 32.5 104 26 5.7-23.5 17.9-44.5 34.7-60.8-140.6-25.2-199.2-111-199.2-213 0-49.5 16.3-95 48.3-131.7-20.4-60.5 1.9-112.3 4.9-120 58.1-5.2 118.5 41.6 123.2 45.3 33-8.9 70.7-13.6 112.9-13.6 42.4 0 80.2 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.3-43.9 2.9 7.7 24.7 58.3 5.5 118 32.4 36.8 48.9 82.7 48.9 132.3 0 102.2-59 188.1-200 212.9a127.5 127.5 0 0 1 38.1 91v112.5c.8 9 0 17.9 15 17.9 177.1-59.7 304.6-227 304.6-424.1 0-247.2-200.4-447.3-447.5-447.3z"></path></svg></i></a></li> <!----></ul></nav></div></div> <!----></header> <aside class="sidebar"><!----> <ul class="sidebar-links"><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading open"><span>更新日志</span> <span class="arrow down"><i aria-label="icon: down" class="anticon anticon-down"><svg viewBox="64 64 896 896" focusable="false" data-icon="down" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"></path></svg></i></span></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/update/v3.html" title="更新日志" class="sidebar-link">更新日志</a></li><li><a href="/update/v2.html" aria-current="page" title="更新日志(v2 版本)" class="active sidebar-link">更新日志(v2 版本)</a></li></ul></section></li></ul> </aside> <main class="page has-page-anchor"> <div class="theme-antdocs-content content__default"><h1 id="更新日志-v2-版本"><a href="#更新日志-v2-版本" class="header-anchor">#</a> 更新日志(v2 版本)</h1> <h2 id="v2-8-6-build-480"><a href="#v2-8-6-build-480" class="header-anchor">#</a> v2.8.6(build 480)</h2> <blockquote><p>更新时间:2022.1.26</p></blockquote> <ul><li>为task进程注册mysql和redis以便在task任务处理中使用相关组件 by @YiwanGi in https://github.com/zhamao-robot/zhamao-framework/pull/271</li></ul> <h2 id="v2-8-5-build-479"><a href="#v2-8-5-build-479" class="header-anchor">#</a> v2.8.5(build 479)</h2> <blockquote><p>更新时间:2022.12.24</p></blockquote> <ul><li>解决explode_msg中,传入参数为0时,参数0消失的BUG by @FishZe in https://github.com/zhamao-robot/zhamao-framework/pull/143</li> <li>fix route-annotations.md static file server demo by @sunxyw in https://github.com/zhamao-robot/zhamao-framework/pull/166</li> <li>修复 getClassesPsr4 中默认过滤方法的路径 Bug by @crazywhalecc in https://github.com/zhamao-robot/zhamao-framework/pull/196</li></ul> <h2 id="v2-8-4-build-478"><a href="#v2-8-4-build-478" class="header-anchor">#</a> v2.8.4(build 478)</h2> <blockquote><p>更新时间:2022.8.7</p></blockquote> <ul><li>修复 <code>zm_sleep()</code> 无法传入小数的 Bug (#141)</li></ul> <h2 id="v2-8-3-build-477"><a href="#v2-8-3-build-477" class="header-anchor">#</a> v2.8.3(build 477)</h2> <blockquote><p>更新时间:2022.8.5</p></blockquote> <ul><li>修复了 <code>@CQNotice</code>、<code>@CQRequest</code> 注解无法正常激活的 Bug (#140)</li></ul> <h2 id="v2-8-2-build-476"><a href="#v2-8-2-build-476" class="header-anchor">#</a> v2.8.2(build 476)</h2> <blockquote><p>更新时间:2022.8.3</p></blockquote> <ul><li><code>DataProvider::scanDirFiles()</code> 新增参数 <code>$include_dir</code>,用于控制非递归模式下是否包含目录</li></ul> <h2 id="v2-8-1-build-475"><a href="#v2-8-1-build-475" class="header-anchor">#</a> v2.8.1(build 475)</h2> <blockquote><p>更新时间:2022.7.3</p></blockquote> <ul><li>修复 WebSocket 连接时报错的 Bug</li> <li>修复 <code>match_args</code> 全局方法对于 <code>0</code> 字符串处理的 Bug(#136)</li></ul> <h2 id="v2-8-0-build-473"><a href="#v2-8-0-build-473" class="header-anchor">#</a> v2.8.0(build 473)</h2> <blockquote><p>更新时间:2022.5.7</p></blockquote> <ul><li>新增 AllBotsProxy、AllGroupsProxy 代理类,支持批量发送机器人动作</li> <li>新增全局函数 <code>implode_when_necessary()</code>,用于将可能为数组的参数转换为字符串</li> <li>新增依赖注入、容器支持,目前对 Swoole 事件、机器人事件均支持使用依赖注入</li> <li>新增全局容器方法 <code>container()</code>、<code>resolve()</code>、<code>app()</code>,用于获取容器参数等</li> <li>新增相关容器测试</li> <li>新增链式调用全局方法 <code>chain()</code></li> <li>新增函数执行时间工具全局函数 <code>stopwatch()</code></li> <li>新增 <code>@CommandArgument</code> 注解,可直接通过注解添加聊天机器人命令参数</li> <li>(内部)新增 <code>EventManager::$event_map</code>,用于补充对事件对象遍历的方式</li> <li>新增 <code>EventMapIterator</code> 类,用于遍历注解事件对象</li> <li>新增 <code>MessageUtil::checkArguments()</code> 方法,用于检查 <code>@CommandArgument</code> 注解</li> <li>新增启动命令参数 <code>--audit-mode</code>,用于单次审计模式</li> <li>新增部分不可执行脚本的防呆退出功能</li> <li>重构全局方法 <code>match_pattern()</code>,优化性能以及解决部分字符串不能匹配的 Bug</li> <li>优化容器支持无名顺序参数的调用</li> <li>优化静态路由,支持 64 以上长度的路由</li> <li>优化 <code>@RequestMapping</code> 注解事件的方法返回值处理,支持数组和字符串(数组自动转为 JSON 格式)</li> <li>优化单元测试流程</li> <li>优化上下文对象,在非协程环境下不再会抛出异常或返回 null</li> <li>修改默认 Hello 模块下随机数功能为采用 <code>@CommandArgument</code> 注解模式</li> <li>重构帮助生成器,将帮助生成器重构为 <code>CommandInfoUtil</code> 类</li> <li>修复 <code>CQ::encode()</code> 无法传入 <code>int</code> 的强类型解析问题(#113)</li> <li>(内部)重构 CQ 类</li> <li>修复 <code>EventMapIterator</code> 对 PHP 8.1 的兼容性问题</li> <li>修复 #95 中提到的无输入流时报错的问题</li> <li>修复 <code>ZMServer</code> 中的 typo</li> <li>修复 Container 环境继承全局变量的问题</li> <li>修复 <code>server:stop</code> 命令下部分情况报错的问题</li></ul> <h2 id="v2-7-6-build-460"><a href="#v2-7-6-build-460" class="header-anchor">#</a> v2.7.6(build 460)</h2> <blockquote><p>更新时间:2022.4.3</p></blockquote> <ul><li>重构 phpunit-swoole,使其可以正常使用</li> <li>新增 <code>--private-mode</code> 参数,用于隐藏启动前的 MOTD 及敏感信息</li> <li>修复 Composer extra 配置项 <code>zm.exclude-annotation-path</code> 不能正常工作的 Bug</li> <li>优化注解事件加载器,防止 Master 进程中添加的事件在 Worker 中被覆盖的问题</li> <li>修复 <code>DataProvider::isRelativePath()</code> 方法判断有误的 Bug</li> <li>新增退出框架时支持以非 0 exit code 退出的功能</li> <li>优化 <code>ZMUtil::getClassesPsr4()</code> 方法,排除不含类的文件</li> <li>优化 <code>module:xxx</code> 类命令的有关实现代码</li> <li>优化代码到 phpstan-level-4</li></ul> <h2 id="v2-7-5-build-455"><a href="#v2-7-5-build-455" class="header-anchor">#</a> v2.7.5(build 455)</h2> <blockquote><p>更新时间:2022.3.27</p></blockquote> <ul><li>修复前几个小版本无法收发消息的 Bug</li> <li>新增 API Document 自动生成脚本</li></ul> <h2 id="v2-7-4-build-454"><a href="#v2-7-4-build-454" class="header-anchor">#</a> v2.7.4(build 454)</h2> <blockquote><p>更新时间:2022.3.27</p></blockquote> <ul><li>修复部分命令下无法杀掉进程的 Bug</li> <li>新增 <code>@Cron</code> 注解</li> <li>修复全局函数 <code>match_pattern</code> 无法正常工作的 Bug</li></ul> <h2 id="v2-7-3-build-453"><a href="#v2-7-3-build-453" class="header-anchor">#</a> v2.7.3(build 453)</h2> <blockquote><p>更新时间:2022.3.25</p></blockquote> <ul><li>新增命令帮助生成器</li> <li>重构全局函数,统一函数命名,并补全注释</li> <li>修复 OnSetup 注解无法使用 Attribute 解析的 Bug</li> <li>修复 HelpGenerator 的 Alias 不工作的 Bug</li> <li>新增 property 注解用于 IDE 识别</li></ul> <h2 id="v2-7-2-build-449"><a href="#v2-7-2-build-449" class="header-anchor">#</a> v2.7.2(build 449)</h2> <blockquote><p>更新时间:2022.3.21</p></blockquote> <ul><li>新增 Composer 模块加载和分发模式</li></ul> <h2 id="v2-7-1-build-448"><a href="#v2-7-1-build-448" class="header-anchor">#</a> v2.7.1(build 448)</h2> <blockquote><p>更新时间:2022.3.20</p></blockquote> <ul><li>加快 build 命令的执行速度,取消进度条和提升性能</li></ul> <h2 id="v2-7-0-build-447"><a href="#v2-7-0-build-447" class="header-anchor">#</a> v2.7.0(build 447)</h2> <blockquote><p>更新时间:2022.3.20</p></blockquote> <ul><li>优化分离 WorkerManager 与 ProcessManager 的职责</li> <li>新增 Ctrl+C 一次无法停止框架时多次 Ctrl+C 后可强行杀掉所有进程的功能</li> <li><code>./zhamao server:stop</code> 新增参数 <code>--force</code>,使用 <code>SIGKILL</code> 强行杀掉所有进程</li> <li>新增 AnnotationParser 对 <code>autoload-dev</code> 项中的 <code>psr-4</code> 默认检索条件</li> <li>新增框架启动状态检测功能,如果已经启动了同样目录的框架,则会报错</li> <li>新增“强制启用轮询模式启动热更新”功能(参数 <code>--polling-watch</code>)</li> <li>修复与 PHP 8.1 的兼容性</li> <li>对 DaemonCommand 进行优化,与 ServerCommand 效果相同</li> <li>修复 <code>autoload</code>.<code>psr-4</code> 不存在时报错的 Bug</li> <li>新增框架停止时 Worker 退出回显状态码</li> <li>新增 inotify 判断模式,如果使用 <code>--watch</code> 检测到没有安装 inotify,则自动使用轮询模式</li> <li>新增 PHPStan 和 PHP CS Fixer 并优化全局代码</li> <li>修复 <code>ctx()</code> 可能会返回 null 的 Bug</li> <li>修复 Response 类在 PHP 8.1 环境下的报错</li> <li>新增 PHP 8 Attribute 与注解同时支持的特性</li> <li>新增方法宏(Macroable)</li> <li>修复打包模块时命名空间与实际不一致的 Bug</li> <li>修复打包模块后 <code>files</code> 的 autoload 项不能被解压和引入的 Bug</li> <li>修复注释空格的样式</li> <li>更改 <code>extra</code>.<code>exclude_annotate</code> 为 <code>zm</code>.<code>exclude-annotation-path</code> 项</li> <li>新增配置项 <code>runtime</code>.<code>annotation_reader_ignore</code>:支持注解解析器忽略注解的自定义</li> <li>新增 <code>./zhamao server</code> 下的 <code>--no-state-check</code> 参数,关闭“启动框架前的运行状态检查”功能</li></ul> <h2 id="v2-6-6-build-434"><a href="#v2-6-6-build-434" class="header-anchor">#</a> v2.6.6(build 434)</h2> <blockquote><p>更新时间:2022.1.8</p></blockquote> <ul><li>修复框架在 PHP 8.1 下运行时的一些问题</li> <li>新增 Console 日志输出到文件的功能</li></ul> <h2 id="v2-6-5-build-433"><a href="#v2-6-5-build-433" class="header-anchor">#</a> v2.6.5(build 433)</h2> <blockquote><p>更新时间:2021.12.28</p></blockquote> <ul><li>修复 OneBotV11 因 IDE 自动优化导致 API 接口发生变化的问题</li></ul> <h2 id="v2-6-4-build-432"><a href="#v2-6-4-build-432" class="header-anchor">#</a> v2.6.4(build 432)</h2> <blockquote><p>更新时间:2021.12.25</p></blockquote> <ul><li>新增 GoCqhttpAPI 包,用于支持额外的 OneBot Action(API)</li> <li>修复 MySQL 查询器中 <code>fetchOne()</code> 方法无法正确返回值的 Bug</li> <li>修复 Swoole Hook 因配置不当无法正确使用的 Bug</li> <li>修复 Issue #50</li> <li>新增 PhpStorm IDE 直接运行框架的脚本</li></ul> <h2 id="v2-6-3-build-430"><a href="#v2-6-3-build-430" class="header-anchor">#</a> v2.6.3 (build 430)</h2> <blockquote><p>更新时间:2021.12.8</p></blockquote> <ul><li>删除调试信息</li> <li>修复 #56 中关于数据库组件的 Bug</li></ul> <h2 id="v2-6-2-build-429"><a href="#v2-6-2-build-429" class="header-anchor">#</a> v2.6.2 (build 429)</h2> <blockquote><p>更新时间:2021.12.7</p></blockquote> <ul><li>新增配置项 <code>onebot</code>.<code>message_command_policy</code></li> <li>新增 CQCommand 阻断策略的自定义配置功能</li> <li>修复 CQAfter 无法正常使用的 bug #53</li></ul> <h2 id="v2-6-1-build-428"><a href="#v2-6-1-build-428" class="header-anchor">#</a> v2.6.1 (build 428)</h2> <blockquote><p>更新时间:2021.11.16</p></blockquote> <ul><li>修复 ctx()->waitMessage() 在 array 消息模式下无法正确返回消息字符串的问题</li> <li>新增 ctx()->getArrayMessage() 和 ctx()->getStringMessage() 两个方法</li> <li>修复注解事件 CQCommand 和 CQMessage 在 array 消息模式下无法正确解析的 Bug</li></ul> <h2 id="v2-6-0-build-427"><a href="#v2-6-0-build-427" class="header-anchor">#</a> v2.6.0 (build 427)</h2> <blockquote><p>更新时间:2021.11.16</p></blockquote> <ul><li>新增全局中间件,可在全局配置文件中设置</li> <li>修复部分 Typo</li> <li>新增指令 <code>server:status</code>、<code>server:reload</code>、<code>server:stop</code> 可用在新开终端中查看框架运行状态、重启和退出</li> <li>新增支持 <code>array</code> 格式的消息</li> <li>上下文 Context 对象新增 <code>getOriginMessage()</code> 用于获取原消息,<code>getMessage()</code> 如果在设置了转换后,将默认转换消息为字符串格式保持与旧模块兼容</li> <li>OneBot API 新增全局过滤器,可用作 Action 过滤重写等操作</li> <li>配置文件新增 <code>runtime.reload_delay_time</code>,用于可配置重载 Worker 等待的时间(毫秒)</li> <li>配置文件新增 <code>runtime.global_middleware_binding</code>,用于配置全局中间件</li> <li>配置文件新增 <code>onebot.message_convert_string</code>,用于配置是否转换数组格式为字符串,保证与前版本的兼容性(默认为 true)</li> <li>MessageUtil 消息工具类新增方法:<code>strToArray($msg, bool $ignore_space = true, bool $trim_text = false)</code></li> <li>MessageUtil 消息工具类新增方法:<code>arrayToStr(array $array)</code></li> <li>新增框架启动多次监测功能,无法使用同一个框架项目同时启动两个框架</li></ul> <h2 id="v2-5-8-build-426"><a href="#v2-5-8-build-426" class="header-anchor">#</a> v2.5.8 (build 426)</h2> <blockquote><p>更新时间:2021.11.10</p></blockquote> <ul><li>修复 CQ 码的解析函数 Bug(#52)</li></ul> <h2 id="v2-5-7-build-425"><a href="#v2-5-7-build-425" class="header-anchor">#</a> v2.5.7 (build 425)</h2> <blockquote><p>更新时间:2021.11.3</p></blockquote> <ul><li>调低 OneBot 相关事件在 Swoole 的优先级</li> <li>修复部分情况下闭包事件函数分发时引发的崩溃 bug</li> <li>修复 reload 时会断开 WebSocket 连接且导致进程崩溃的 bug</li></ul> <h2 id="v2-5-6-build-423"><a href="#v2-5-6-build-423" class="header-anchor">#</a> v2.5.6 (build 423)</h2> <blockquote><p>更新时间:2021.10.17</p></blockquote> <ul><li>修复 PHP 7.2 ~ 7.3 下无法使用新版 MySQL 组件的 bug</li></ul> <h2 id="v2-5-5-build-422"><a href="#v2-5-5-build-422" class="header-anchor">#</a> v2.5.5 (build 422)</h2> <blockquote><p>更新时间:2021.10.6</p></blockquote> <ul><li>修复 <code>script_</code> 前缀无法被排除加载模块的 bug</li> <li>修复 MySQL 组件的依赖问题</li></ul> <h2 id="v2-5-4-buidl-421"><a href="#v2-5-4-buidl-421" class="header-anchor">#</a> v2.5.4 (buidl 421)</h2> <blockquote><p>更新时间:2021.9.11</p></blockquote> <ul><li>删除多余的调试信息</li></ul> <h2 id="v2-5-3-build-420"><a href="#v2-5-3-build-420" class="header-anchor">#</a> v2.5.3 (build 420)</h2> <blockquote><p>更新时间:2021.9.11</p></blockquote> <ul><li>修复 DB 模块在未连接数据库的时候抛出未知异常</li> <li>修复部分情况下打包模块出现的错误</li> <li>修复 OneBot 事件无法响应的 bug</li> <li>新增部分 EventDispatcher 触发的事件 debug 日志</li></ul> <h2 id="v2-5-2-build-418"><a href="#v2-5-2-build-418" class="header-anchor">#</a> v2.5.2 (build 418)</h2> <blockquote><p>更新时间:2021.9.10</p></blockquote> <ul><li>新增 AnnotationException,统一框架内部的抛出异常的类型</li> <li>新增 AnnotationParser 下的 <code>verifyMiddlewares()</code> 方法</li> <li>私有化 CQAPI 类下的内部方法</li> <li>将 WebSocket API 响应超时时间从 60 秒缩短为 30 秒</li> <li>修复 DB 类不能使用旧查询器的 bug</li> <li>统一 DB 类下抛出 Exception 的类型为 ZMException 的子类</li> <li>EventDispatcher 新增对 <code>middleware_error_policy</code> 的处理段</li> <li>配置文件下 <code>runtime</code> 新增 <code>middleware_error_policy</code> 字段</li> <li>将 LightCache 组件抛出的异常改为 LightCacheException</li> <li>ModuleManager 修复改配置的 <code>load_path</code> 不生效的 bug</li> <li>修复打包时生成的 Phar Autoload 列表出错的 bug</li> <li>将配置的 override 改为 overwrite</li> <li>新增解包时忽略依赖的选项(<code>--ignore-depends</code>)</li> <li>删除众多调试日志,修改部分调试日志为 debug 级别的输出</li> <li>修改 <code>ZM\MySQL\MySQLManager</code> 下的 <code>getConnection()</code> 为 <code>getWrapper()</code></li> <li>MySQLPool 对象新增 <code>getCount()</code> 方法</li> <li>新增 MySQLQueryBuilder 类(<code>doctrine/dbal</code> 的 wrapper 类)</li> <li>修复 MySQLStatement 封装原 dbal 组件时与连接池不兼容的 bug</li> <li>新增 MySQLStatementWrapper 类</li> <li>完善 MySQLWrapper 类,用作主要的查询对象控制类</li> <li>编写外部插件加载方式(Phar 热加载功能)</li> <li>修复 <code>ZMUtil::getClassesPsr4()</code> 方法在遇到空扩展名文件时的报错</li></ul> <h2 id="v2-5-1-build-416"><a href="#v2-5-1-build-416" class="header-anchor">#</a> v2.5.1 (build 416)</h2> <blockquote><p>更新时间:2021.7.9</p></blockquote> <ul><li>修复:脚手架无法正常使用 <code>init</code> 命令的 bug。</li></ul> <h2 id="v2-5-0-build-415"><a href="#v2-5-0-build-415" class="header-anchor">#</a> v2.5.0(build 415)</h2> <blockquote><p>更新时间:2021.7.9</p></blockquote> <p>以下是版本<strong>新增内容</strong>:</p> <ul><li>新增全新的模块系统,可打包模块(src 目录下的子目录用户逻辑代码)为 phar 格式进行分发和版本备份。</li> <li>全局配置文件新增 <code>module_loader</code> 项,用于配置外部模块加载的一些设置。</li> <li>全局配置文件新增 <code>runtime</code> 配置项,可自定义配置 Swoole 的一些运行时参数,目前可配置一键协程化的 Hook 参数和 Swoole Server 的启动模式。</li> <li>新增 <code>module:list</code> 命令,用于查看未打包和已打包的模块列表。</li> <li>新增 <code>module:pack</code> 命令,用于打包现有 src 目录下的模块。</li> <li>新增 <code>module:unpack</code> 命令,用于解包现有的 phar 模块包。</li> <li>新增打包框架功能,支持将用户的整个项目连同炸毛框架打包为一个 phar 便携运行,使用命令 <code>build</code>。</li> <li>新增快捷脚本 <code>./zhamao</code>,效果同 <code>vendor/bin/start</code> 或 <code>bin/start</code>。</li> <li>新增启动参数 <code>--interact</code>:又重新支持交互终端了,但还是有点问题,不推荐使用。</li> <li>新增启动参数 <code>--disable-safe-exit</code>:如果你的项目在 Ctrl+C 时总是卡住且项目内没有什么使用 LightCache 等缓存在内存的数据可开启防止关不掉框架。</li> <li>新增启动参数 <code>--preview</code>:只显示参数,不启动炸毛框架的服务器。</li> <li>新增启动参数 <code>--force-load-module</code>:强制打包状态下加载的模块(使用英文逗号分隔多个模块名称)。</li> <li><code>CoroutinePool</code> 协程池新增 <code>getRunningCoroutineCount</code> 方法,用于查看协程池中的协程数量。</li> <li><code>DataProvider</code> 新增 <code>getFrameworkRootDir()</code>、<code>getSourceRootDir()</code>,分别代表获取框架的根目录和用户源码根目录。(详见下方对目录的定义解释)</li> <li><code>DataProvider</code> 中 <code>getDataFolder</code> 新增参数 <code>$second = ''</code>,如果给定,则自动创建子目录 <code>$second</code> 并返回。</li> <li><code>DataProvider</code> 新增 <code>scanDirFiles()</code> 方法,用于扫描目录,可选择是否递归、是否返回相对路径,也支持扫描 Phar 文件内的路径,非常好用。</li> <li><code>DataProvider</code> 新增 <code>isRelativePath()</code> 方法,检查路径是否为相对路径(根据第一个字符是否是 '/' 来判断)。</li> <li><code>ZMUtil</code> 新增 <code>getClassesPsr4()</code> 方法,用于根据 Psr-4 标准来获取目录下的所有类文件。</li> <li>新增全局错误码,可以根据错误码在文档内快速定位和解决问题。</li> <li>中间件和注解事件支持回溯,可以快速查看调用栈(比如中间件可以知道自己是在哪个注解事件中被调用)。</li> <li>使用 <code>./zhamao build</code> 来构建框架的 phar 包时增加显示进度条。</li> <li>EventDispatcher 新增方法 <code>getEid()</code> 和 <code>getClass()</code>,分别用于获取事件分发 ID 和注解事件的注解类名称。</li> <li>新增 EventTracer,用于追踪事件的调用栈。</li> <li>中间件支持传参。</li> <li>MySQL 数据库查询器改为使用 <code>doctrine/dbal</code> 组件,更灵活和稳定。</li> <li>新增对 <code>SWOOLE_BASE</code> 模式的支持(支持只启动一个进程的 Server)。</li></ul> <p>以下是版本<strong>修改内容</strong>:</p> <ul><li>启动文件 <code>vendor/bin/start</code> 修改为 shell 脚本,可自动寻找 PHP 环境。</li> <li>全局强制依赖 <code>league/climate</code> 组件。</li> <li>修复框架启动时的信息显示换行问题。</li> <li>修复框架使用 Phar 方式启动时导致的报错。</li> <li>修复使用 Ctrl+C 结束时一部分用户卡住的 bug。</li> <li>远程和本地终端去掉 stop 命令,建议直接使用发 SIGTERM 方式结束框架。</li> <li>全局配置文件的 <code>zm_data</code> 根目录默认修改为 <code>WORKING_DIR</code>。</li> <li>命令 <code>systemd:generate</code> 修改为 <code>generate:systemd</code>。</li> <li>全局配置文件删除 <code>server_event_handler_class</code> 项,此项废弃。</li> <li>修复部分 CQ 码解析过程中没有转义的问题。</li> <li>将 <code>ZMRobot</code> 类转移为 <code>OneBotV11</code> 类,但提供兼容。</li> <li>修复在守护进程模式下使用 <code>daemon:reload</code> 和 <code>daemon:stop</code> 命令可能失效的问题。</li> <li>修复 systemd 生成时脚本目录错误的 bug。</li> <li>修复 PipeMessage 等事件未捕获错误导致崩溃的问题。</li> <li><code>ZM\Http\RouteManager</code> 移动到 <code>ZM\Utils\Manager\RouteManager</code>,但原地址兼容。</li> <li>修复 <code>Terminal</code> 类使用的一些问题。</li> <li>对 <code>pcntl</code> 扩展改为可选依赖,当 Swoole 版本大于等于 4.6.7 时不需要安装 <code>pcntl</code> 扩展。</li> <li>修正启动时框架对缺省配置项的一些默认参数。</li> <li>注解 <code>@OnSetup</code> 和 <code>@SwooleHandler</code> 可直接使用,无需设置 <code>server_event_handler_class</code> 即可。</li> <li>修复框架在一些非正常终端中运行时导致错误的问题。</li> <li>使用 <code>--debug-mode</code> 参数时,自动开启热更新。</li> <li>修复脚手架在使用 composer 更新后检查全局配置功能的 bug。</li> <li>修复重启和关闭框架时造成的非正常连接断开。</li> <li>改用独立进程监听文件变化和终端输入。</li> <li>修复有协程中断的任务时停止服务器会报 Swoole 警告的 bug。</li> <li>修复连接被反复断开的问题。</li></ul> <p><strong>对目录的定义解释</strong>:</p> <p>在 2.4.4 版本之前,使用炸毛框架中,只含有两种目录,<code>getWorkingDir</code> 和 <code>getDataFolder</code>,分别代表获取工作目录和数据目录。在 2.5 版本中,又新增了 <code>getFrameworkRootDir</code> 代表获取框架的根目录,<code>getSourceRootDir</code> 代表获取源码的根目录。</p> <p>以 Composer 运行模式举例,如果你使用 <code>composer create-project zhamao/framework-starter</code> 命令新建的框架,那么假设我们从 <code>/app</code> 目录下运行此命令,然后使用 <code>cd framework-starter/</code> 进入项目目录,此时我们使用 <code>vendor/bin/start server</code> 命令运行服务器,对应的目录为:</p> <ul><li><code>WorkingDir</code>:<code>/app/framework-starter/</code></li> <li><code>SourceRootDir</code>:<code>/app/framework-starter/</code></li> <li><code>FrameworkRootDir</code>:<code>/app/framework-starter/vendor/zhamao/framework/</code></li></ul> <p>如果以源码模式(直接克隆 <code>zhamao-framework.git</code> 仓库),启动框架,那么使用命令 <code>bin/start server</code> 启动框架后,以上三个返回的目录则完全相同。</p> <p>如果以 2.5 版本新的项目归档模式(build)启动框架,假设我们的项目代码打包为 <code>server.phar</code>,在 <code>/app/</code> 目录,我们使用命令 <code>php server.phar server</code> 启动炸毛框架,那么它对应的目录为:</p> <ul><li><code>WorkingDir</code>:<code>/app/</code></li> <li><code>SourceRootDir</code>:<code>phar:///app/server.phar/</code></li> <li><code>FrameworkRootDir</code>:<code>phar:///app/server.phar/vendor/zhamao/framework/</code></li></ul> <p>如果最后一种归档方式启动的框架是从源码模式打包而来,那么 <code>FrameworkRootDir</code> 就与 <code>SourceRootDir</code> 相同。</p> <p><strong>版本部分兼容问题变化</strong>:</p> <p>理论上如果不使用框架内部未开放的接口方法的话,从 2.4 升级到 2.5 是非常自然的,但是也有一部分可能会造成不兼容的问题。</p> <ul><li>生成 systemd 配置文件的命令 <code>systemd:generate</code> 变成 <code>generate:systemd</code>。</li> <li>全局配置文件中的 <code>zm_data</code> 的父目录由 <code>__DIR__ . "/../"</code> 改为 <code>WORKING_DIR</code>。</li> <li>2.5 版本将 ZMRobot 类中的所有函数方法都移动到了 <code>OneBotV11</code> 类中,但原先的 ZMRobot 还可以使用。</li></ul> <h2 id="v2-4-4-build-405"><a href="#v2-4-4-build-405" class="header-anchor">#</a> v2.4.4 (build 405)</h2> <blockquote><p>更新时间:2021.3.29</p></blockquote> <p>以下是可能不兼容的变更:</p> <ul><li>新增依赖:框架需要 PHP 安装 pcntl 扩展以及开启 <code>pcntl_signal</code> 函数(一般情况下编译安装的都会有,宝塔面板请手动解除函数禁用)</li></ul> <h2 id="v2-4-3-build-403"><a href="#v2-4-3-build-403" class="header-anchor">#</a> v2.4.3 (build 403)</h2> <blockquote><p>更新时间:2021.3.29</p></blockquote> <ul><li>新增:swoole 设置配置新增 <code>max_wait_time</code> 项,设置等待进程关闭流程最大时间(秒)</li> <li>新增:常量 <code>MAIN_WORKER</code>,值等同于 <code>worker_cache</code> 项中的 <code>worker</code> 参数(WorkerCache 所在的进程)</li> <li>新增:<code>LightCache</code> 新增 <code>getExpireTS()</code> 方法,用于返回项目过期的时间戳</li> <li>修复:<code>savePersistence()</code> 的部分丢失数据的 bug</li> <li>新增:全局方法 <code>zm_go()</code></li> <li>修复:2.4.2 版本下的刷屏报错</li> <li>优化:Ctrl+C 响应机制,启用异步 重启/关闭 措施,防止残留僵尸进程和丢失数据</li></ul> <h2 id="v2-4-2-build-402"><a href="#v2-4-2-build-402" class="header-anchor">#</a> v2.4.2 (build 402)</h2> <blockquote><p>更新时间:2021.3.27</p></blockquote> <ul><li>更改:<code>WORKING_DIR</code> 常量的含义</li> <li>修复:未指定 <code>--remote-terminal</code> 参数时还依旧开启远程终端的 bug</li> <li>删除:<code>phar_classloader()</code> 全局方法</li> <li>更改:持久化存储 LightCache 的逻辑,修复一个愚蠢的容易造成误用的方式</li> <li>新增:LightCache 方法 <code>addPersistence()</code> 和 <code>removePersistence()</code></li> <li>新增:框架启动短指令 <code>./zhamao</code> 或 <code>php zhamao</code></li></ul> <h2 id="v2-4-1-build-401"><a href="#v2-4-1-build-401" class="header-anchor">#</a> v2.4.1 (build 401)</h2> <blockquote><p>更新时间:2021.3.25</p></blockquote> <ul><li>修复:开启框架时导致的报错</li></ul> <h2 id="v2-4-0-build-400"><a href="#v2-4-0-build-400" class="header-anchor">#</a> v2.4.0(build 400)</h2> <blockquote><p>更新时间:2021.3.25</p></blockquote> <ul><li>新增:检查全局配置文件的命令</li> <li>新增:全局配置文件更新记录</li> <li>依赖变更:<strong>Swoole 最低版本需要 4.5.0</strong></li> <li>优化:reload 和 stop 命令重载和停止框架的逻辑</li> <li>新增:<code>$_running_annotation</code> 变量,可在注解事件中的类使用</li> <li>新增:远程终端(Remote Terminal),弥补原来删掉的本地终端,通过 nc 命令连接即可</li> <li>新增:启动参数 <code>--worker-num</code>,<code>--task-worker-num</code>,<code>--remote-terminal</code></li> <li>更新:全局配置文件结构</li> <li>新增:Swoole 计时器报错处理</li> <li>新增:全局方法(<code>zm_dump()</code>,<code>zm_error()</code>,<code>zm_warning()</code>,<code>zm_info()</code>,<code>zm_success()</code>,<code>zm_verbose()</code>,<code>zm_debug()</code>,<code>zm_config()</code>)</li> <li>新增:示例模块的图灵机器人和 at 机器人的处理函数</li> <li>新增:MessageUtil 工具类新增 <code>isAtMe(), splitCommand(), matchCommand()</code> 方法</li> <li>新增:ProcessManager 进程管理类新增 <code>workerAction(), sendActionToWorker(), resumeAllWorkerCoroutines()</code> 方法</li> <li>优化:CQCommand 的匹配逻辑</li> <li>新增:支持添加自定义远程终端指令的 <code>@TerminalCommand</code> 注解</li> <li>新增:图灵机器人 API 封装函数</li> <li>新增:ZMUtil 工具杂项类 <code>getReloadableFiles()</code> 函数</li> <li>新增:<code>vendor/bin/start systemd:generate</code> 生成 systemd 配置文件的功能</li> <li>新增:<code>vendor/bin/start check:config</code> 检查配置文件更新的命令</li> <li>新增:<code>vendor/bin/start init</code> 新增 <code>--force</code> 参数,覆盖现有文件重新生成</li> <li>新增:MessageUtil 新增方法:<code>addShortCommand()</code>,用于快速添加静态文本问答回复的</li></ul> <p>以下是需要<strong>手动更新</strong>或<strong>更换新写法</strong>的部分:</p> <ul><li>配置文件 <code>global.php</code> 中的 <code>modules</code> 字段展开,内置模块的配置一律平铺到外面。详见 <a href="/update/config">更新日志 - 配置文件变更</a>。</li></ul> <p>以下是默认机器人直接连接产生的变更:</p> <ul><li>2.4.0 新增了默认回复其他人 at 的消息,如果不需要,请将 <code>Hello.php</code> 中的 <code>changeAt()</code> 和 <code>turingAPI()</code> 方法删除。</li></ul> <h2 id="v2-3-5-build-398"><a href="#v2-3-5-build-398" class="header-anchor">#</a> v2.3.5 (build 398)</h2> <blockquote><p>更新时间:2021.3.23</p></blockquote> <ul><li>修复:MySQL 数据库查询导致的一系列问题</li> <li>修复:内存泄露问题</li></ul> <blockquote><p>2.3.2-2.3.4 版本由于操作失误导致代码不完整,请直接使用 2.3.5 即可。</p></blockquote> <h2 id="v2-3-1"><a href="#v2-3-1" class="header-anchor">#</a> v2.3.1</h2> <blockquote><p>更新时间:2021.3.18</p></blockquote> <ul><li>规范代码,修复一个小报错的 bug</li></ul> <h2 id="v2-3-0"><a href="#v2-3-0" class="header-anchor">#</a> v2.3.0</h2> <blockquote><p>更新时间:2021.3.16</p></blockquote> <ul><li>新增:MessageUtil 消息处理工具类</li> <li>新增:TaskManager,封装了 TaskWorker 进程的应用</li> <li>新增:CQObject,使用 <code>CQ::getCQ()</code> 可获取对象形式的 CQ 码解析结果</li> <li>新增:<code>@OnTask</code> 注解,绑定任务函数</li> <li>新增:RouteManager 路由管理类,可快速添加路由</li> <li>修复:<code>ZM_DATA</code> 和 <code>DataProvider::getDataFolder()</code> 返回 false 的问题</li> <li>优化:关闭显示停止框架后多余的输出信息</li></ul> <p>注:本次升级建议升级后合并全局配置文件,有一些新加的内容。</p> <h2 id="v2-2-11"><a href="#v2-2-11" class="header-anchor">#</a> v2.2.11</h2> <blockquote><p>更新时间:2021.3.13</p></blockquote> <ul><li>新增:内部 ID 版本号(ZM_VERSION_ID)</li> <li>优化:启动时 log 的等级</li> <li>移除:终端输入命令</li> <li>修复:纯 HTTP 服务器的启动 bug</li> <li>新增:<code>zm_timer</code> 的报错处理,防止服务器直接崩掉</li></ul> <h2 id="v2-2-10"><a href="#v2-2-10" class="header-anchor">#</a> v2.2.10</h2> <blockquote><p>更新时间:2021.3.8</p></blockquote> <ul><li>新增:用户态 php 编译脚本 <code>build-runtime.sh</code></li> <li>移除:无用的调试信息</li> <li>新增:<code>--show-php-ver</code> 启动参数</li></ul> <h2 id="v2-2-9"><a href="#v2-2-9" class="header-anchor">#</a> v2.2.9</h2> <blockquote><p>更新时间:2021.3.6</p></blockquote> <ul><li>更新:<code>reply()</code> 方法传入数组则变为快速相应的 API 操作</li> <li>修复:在 Worker 进程下调用 <code>ZMUtil::reload()</code> 会导致一些奇怪的 bug</li> <li>修复:<code>reply()</code> 时会 at 私聊成员的 bug(由 go-cqhttp 导致)</li></ul> <h2 id="v2-2-8"><a href="#v2-2-8" class="header-anchor">#</a> v2.2.8</h2> <blockquote><p>更新时间:2021.3.2</p></blockquote> <ul><li>更新:MOTD 显示的方式,更加直观和炫酷</li></ul> <h2 id="v2-2-7"><a href="#v2-2-7" class="header-anchor">#</a> v2.2.7</h2> <blockquote><p>更新时间:2021.2.27</p></blockquote> <ul><li>修复:2.2.6 版本下 <code>reply()</code> 方法在群里调用会 at 成员的 bug</li> <li>修复:空 <code>access_token</code> 的情况下会无法连入的 bug</li> <li>修复:使用 Closure 闭包函数自行编写逻辑的判断返回 false 无法阻断连接的 bug</li></ul> <h2 id="v2-2-6"><a href="#v2-2-6" class="header-anchor">#</a> v2.2.6</h2> <blockquote><p>更新时间:2021.2.26</p></blockquote> <ul><li>新增:<code>uuidgen()</code> 全局函数,快速生成 uuid</li> <li>修复:MySQL <code>rawQuery()</code> 在参数为非数组时会报 Warning 的 bug</li> <li>新增:示例模块的 API 示例:一言查询</li> <li>优化:删减部分无用代码</li> <li>更改:<code>ctx()->reply()</code> 方法改为调用隐藏方法:<code>.handle_quick_operation</code></li> <li>修复:<code>ctx()->finalReply()</code> 一直以来的 bug(未阻断事件)</li> <li>新增:<code>access_token</code> 配置项支持闭包函数自行设计判断方式和逻辑</li> <li>新增:全局函数 <code>working_dir()</code></li></ul> <h2 id="v2-2-5"><a href="#v2-2-5" class="header-anchor">#</a> v2.2.5</h2> <blockquote><p>更新时间:2021.2.20</p></blockquote> <ul><li>新增:<code>saveToJson()</code> 和 <code>loadFromJson()</code> 方法(DataProvider 类)</li> <li>修复:<code>@OnSave</code> 注解事件无法工作的 bug</li> <li>调整:自定义计时器创建时的性能调优</li> <li>新增:WorkerCache 方法:<code>hasKey()</code></li> <li>新增:SpinLock 方法:<code>transaction()</code>(直接在事务中上锁)</li> <li>新增:CQ 方法:<code>getAllCQ()</code>,<code>_custom()</code>(获取消息中的所有 CQ 码)</li> <li>修复:CQ 类中的部分 bug</li></ul> <h2 id="v2-2-4"><a href="#v2-2-4" class="header-anchor">#</a> v2.2.4</h2> <blockquote><p>更新时间:2021.2.7</p></blockquote> <ul><li>修复:终端交互导致的 ssh 断掉后 CPU 占用过高的问题</li> <li>修复:WorkerCache 在缺少配置文件下工作异常的问题</li> <li>新增:全局函数:<code>zm_atomic()</code></li></ul> <h2 id="v2-2-3"><a href="#v2-2-3" class="header-anchor">#</a> v2.2.3</h2> <blockquote><p>更新时间:2021.1.30</p></blockquote> <ul><li>修复:waitMessage() 在 v2.2.2 版本中不可用的 bug</li> <li>修复:access_token 无效的问题</li></ul> <h2 id="v2-2-2"><a href="#v2-2-2" class="header-anchor">#</a> v2.2.2</h2> <blockquote><p>更新时间:2021.1.29</p></blockquote> <ul><li>修复:模块文件错误时避免循环报错</li> <li>优化:代码结构</li> <li>修复:在不同进程时调用机器人 API 无法返回且报错的 bug</li> <li><strong>修复:机器人无法连接的问题(2.1.6 ~ 2.2.1 受影响)</strong></li></ul> <h2 id="v2-2-1"><a href="#v2-2-1" class="header-anchor">#</a> v2.2.1</h2> <blockquote><p>更新时间:2021.1.29</p></blockquote> <ul><li>修复:配置文件兼容性问题</li></ul> <h2 id="v2-2-0"><a href="#v2-2-0" class="header-anchor">#</a> v2.2.0</h2> <blockquote><p>更新时间:2021.1.29</p></blockquote> <ul><li>新增:<code>@OnPipeMessageEvent</code> 注解</li> <li>新增:进程管理器</li> <li>新增:<code>--daemon</code> 守护进程化后查看状态以及一系列操作的命令行</li> <li>新增:WorkerCache</li> <li>修复:路由问题</li> <li>修复:<code>http_header</code> 配置项不生效的 bug</li> <li>优化:框架内部所有异常全部基于 <code>ZMException</code></li> <li>优化:SingletonTrait 支持扩展</li></ul> <h2 id="v2-1-6"><a href="#v2-1-6" class="header-anchor">#</a> v2.1.6</h2> <blockquote><p>更新时间:2021.1.18</p></blockquote> <ul><li>优化:代码结构</li> <li>增加:更多提示语</li> <li>修复:处理空格消息时的报错</li> <li>修复:上下文的bug</li></ul> <h2 id="v2-1-5"><a href="#v2-1-5" class="header-anchor">#</a> v2.1.5</h2> <blockquote><p>更新时间:2021.1.13</p></blockquote> <ul><li>优化:终端对 PHP Warning 和 PHP Notice 的报错信息显示,统一格式</li> <li>新增:<code>ctx()->getNumArg()</code> 上下文中快速获取数字类型的参数的方法</li> <li>优化:删除不必要的调试信息</li> <li>优化:路由组件全面替换为 <code>symfony/routing</code>,兼容性和稳定性 up!</li></ul> <h2 id="v2-1-4"><a href="#v2-1-4" class="header-anchor">#</a> v2.1.4</h2> <blockquote><p>更新时间:2021.1.3</p></blockquote> <ul><li>修复:启动时会提示丢失类的 bug</li> <li>优化:HTTP 响应类如果被使用了则一律返回 false</li> <li>优化:PHP Warning 等报错统一样式</li></ul> <h2 id="v2-1-3"><a href="#v2-1-3" class="header-anchor">#</a> v2.1.3</h2> <blockquote><p>更新时间:2021.1.2</p></blockquote> <ul><li>修复:注解解析器在某种特殊情况下导致的 bug</li></ul> <h2 id="v2-1-2"><a href="#v2-1-2" class="header-anchor">#</a> v2.1.2</h2> <blockquote><p>更新时间:2021.1.2</p></blockquote> <ul><li>修复:引入包模式启动时会导致的满屏报错</li></ul> <h2 id="v2-1-1"><a href="#v2-1-1" class="header-anchor">#</a> v2.1.1</h2> <blockquote><p>更新时间:2021.1.2</p></blockquote> <ul><li>修复:自定义加载注解选定 composer.json 文件错误的 bug</li></ul> <h2 id="v2-1-0"><a href="#v2-1-0" class="header-anchor">#</a> v2.1.0</h2> <blockquote><p>更新时间:2021.1.2</p></blockquote> <ul><li>新增:<code>@OnOpenEvent</code>,<code>@OnCloseEvent</code>,<code>@OnMessageEvent</code>,<code>@OnRequestEvent</code></li> <li>优化事件分发器,修复一些事件分发过程中的 bug</li> <li>修复 <code>@CQBefore</code> 事件的 bug</li></ul> <h2 id="v2-0-3"><a href="#v2-0-3" class="header-anchor">#</a> v2.0.3</h2> <blockquote><p>更新时间:2020.12.31</p></blockquote> <ul><li>修复:CQBefore 注解事件在 level 低于 200 时无法调用的 bug</li> <li>修复:CQMetaEvent 注解事件调用时报错的 bug</li></ul> <h2 id="v2-0-2"><a href="#v2-0-2" class="header-anchor">#</a> v2.0.2</h2> <blockquote><p>更新时间:2020.12.31</p></blockquote> <ul><li>更新:将 CQ 码调用类更新到与最新 OneBot 标准相兼容的状态</li></ul> <h2 id="v2-0-1"><a href="#v2-0-1" class="header-anchor">#</a> v2.0.1</h2> <blockquote><p>更新时间:2020.12.23</p></blockquote> <ul><li>修复:开屏报错文件夹不存在</li></ul> <h2 id="v2-0"><a href="#v2-0" class="header-anchor">#</a> v2.0</h2> <blockquote><p>更新时间:2020.12.23</p></blockquote> <p>已发布正式版。</p></div> <footer class="page-edit"><div class="edit-link"><a href="https://github.com/zhamao-robot/zhamao-framework/edit/main/docs/update/v2.md" target="_blank" rel="noopener noreferrer">Edit this page</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div> <!----></footer> <div class="page-nav"><p class="inner"><span class="prev"><a href="/update/v3.html" class="prev"><i aria-label="icon: left" class="anticon anticon-left"><svg viewBox="64 64 896 896" focusable="false" data-icon="left" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 0 0 0 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z"></path></svg></i>
|
||
更新日志
|
||
</a></span> <!----></p></div> <div class="page-anchor"><div class="ant-space ant-space-vertical" style="width:100%;"><div class="ant-space-item"><div class="page-anchor-offset"><div><div class="ant-anchor-wrapper" style="max-height:100vh;"><div class="ant-anchor"><div class="ant-anchor-ink"><span class="ant-anchor-ink-ball"></span></div><div class="ant-anchor-link"><a href="#v2-8-6-build-480" title="v2.8.6(build 480)" class="ant-anchor-link-title">v2.8.6(build 480)</a></div><div class="ant-anchor-link"><a href="#v2-8-5-build-479" title="v2.8.5(build 479)" class="ant-anchor-link-title">v2.8.5(build 479)</a></div><div class="ant-anchor-link"><a href="#v2-8-4-build-478" title="v2.8.4(build 478)" class="ant-anchor-link-title">v2.8.4(build 478)</a></div><div class="ant-anchor-link"><a href="#v2-8-3-build-477" title="v2.8.3(build 477)" class="ant-anchor-link-title">v2.8.3(build 477)</a></div><div class="ant-anchor-link"><a href="#v2-8-2-build-476" title="v2.8.2(build 476)" class="ant-anchor-link-title">v2.8.2(build 476)</a></div><div class="ant-anchor-link"><a href="#v2-8-1-build-475" title="v2.8.1(build 475)" class="ant-anchor-link-title">v2.8.1(build 475)</a></div><div class="ant-anchor-link"><a href="#v2-8-0-build-473" title="v2.8.0(build 473)" class="ant-anchor-link-title">v2.8.0(build 473)</a></div><div class="ant-anchor-link"><a href="#v2-7-6-build-460" title="v2.7.6(build 460)" class="ant-anchor-link-title">v2.7.6(build 460)</a></div><div class="ant-anchor-link"><a href="#v2-7-5-build-455" title="v2.7.5(build 455)" class="ant-anchor-link-title">v2.7.5(build 455)</a></div><div class="ant-anchor-link"><a href="#v2-7-4-build-454" title="v2.7.4(build 454)" class="ant-anchor-link-title">v2.7.4(build 454)</a></div><div class="ant-anchor-link"><a href="#v2-7-3-build-453" title="v2.7.3(build 453)" class="ant-anchor-link-title">v2.7.3(build 453)</a></div><div class="ant-anchor-link"><a href="#v2-7-2-build-449" title="v2.7.2(build 449)" class="ant-anchor-link-title">v2.7.2(build 449)</a></div><div class="ant-anchor-link"><a href="#v2-7-1-build-448" title="v2.7.1(build 448)" class="ant-anchor-link-title">v2.7.1(build 448)</a></div><div class="ant-anchor-link"><a href="#v2-7-0-build-447" title="v2.7.0(build 447)" class="ant-anchor-link-title">v2.7.0(build 447)</a></div><div class="ant-anchor-link"><a href="#v2-6-6-build-434" title="v2.6.6(build 434)" class="ant-anchor-link-title">v2.6.6(build 434)</a></div><div class="ant-anchor-link"><a href="#v2-6-5-build-433" title="v2.6.5(build 433)" class="ant-anchor-link-title">v2.6.5(build 433)</a></div><div class="ant-anchor-link"><a href="#v2-6-4-build-432" title="v2.6.4(build 432)" class="ant-anchor-link-title">v2.6.4(build 432)</a></div><div class="ant-anchor-link"><a href="#v2-6-3-build-430" title="v2.6.3 (build 430)" class="ant-anchor-link-title">v2.6.3 (build 430)</a></div><div class="ant-anchor-link"><a href="#v2-6-2-build-429" title="v2.6.2 (build 429)" class="ant-anchor-link-title">v2.6.2 (build 429)</a></div><div class="ant-anchor-link"><a href="#v2-6-1-build-428" title="v2.6.1 (build 428)" class="ant-anchor-link-title">v2.6.1 (build 428)</a></div><div class="ant-anchor-link"><a href="#v2-6-0-build-427" title="v2.6.0 (build 427)" class="ant-anchor-link-title">v2.6.0 (build 427)</a></div><div class="ant-anchor-link"><a href="#v2-5-8-build-426" title="v2.5.8 (build 426)" class="ant-anchor-link-title">v2.5.8 (build 426)</a></div><div class="ant-anchor-link"><a href="#v2-5-7-build-425" title="v2.5.7 (build 425)" class="ant-anchor-link-title">v2.5.7 (build 425)</a></div><div class="ant-anchor-link"><a href="#v2-5-6-build-423" title="v2.5.6 (build 423)" class="ant-anchor-link-title">v2.5.6 (build 423)</a></div><div class="ant-anchor-link"><a href="#v2-5-5-build-422" title="v2.5.5 (build 422)" class="ant-anchor-link-title">v2.5.5 (build 422)</a></div><div class="ant-anchor-link"><a href="#v2-5-4-buidl-421" title="v2.5.4 (buidl 421)" class="ant-anchor-link-title">v2.5.4 (buidl 421)</a></div><div class="ant-anchor-link"><a href="#v2-5-3-build-420" title="v2.5.3 (build 420)" class="ant-anchor-link-title">v2.5.3 (build 420)</a></div><div class="ant-anchor-link"><a href="#v2-5-2-build-418" title="v2.5.2 (build 418)" class="ant-anchor-link-title">v2.5.2 (build 418)</a></div><div class="ant-anchor-link"><a href="#v2-5-1-build-416" title="v2.5.1 (build 416)" class="ant-anchor-link-title">v2.5.1 (build 416)</a></div><div class="ant-anchor-link"><a href="#v2-5-0-build-415" title="v2.5.0(build 415)" class="ant-anchor-link-title">v2.5.0(build 415)</a></div><div class="ant-anchor-link"><a href="#v2-4-4-build-405" title="v2.4.4 (build 405)" class="ant-anchor-link-title">v2.4.4 (build 405)</a></div><div class="ant-anchor-link"><a href="#v2-4-3-build-403" title="v2.4.3 (build 403)" class="ant-anchor-link-title">v2.4.3 (build 403)</a></div><div class="ant-anchor-link"><a href="#v2-4-2-build-402" title="v2.4.2 (build 402)" class="ant-anchor-link-title">v2.4.2 (build 402)</a></div><div class="ant-anchor-link"><a href="#v2-4-1-build-401" title="v2.4.1 (build 401)" class="ant-anchor-link-title">v2.4.1 (build 401)</a></div><div class="ant-anchor-link"><a href="#v2-4-0-build-400" title="v2.4.0(build 400)" class="ant-anchor-link-title">v2.4.0(build 400)</a></div><div class="ant-anchor-link"><a href="#v2-3-5-build-398" title="v2.3.5 (build 398)" class="ant-anchor-link-title">v2.3.5 (build 398)</a></div><div class="ant-anchor-link"><a href="#v2-3-1" title="v2.3.1" class="ant-anchor-link-title">v2.3.1</a></div><div class="ant-anchor-link"><a href="#v2-3-0" title="v2.3.0" class="ant-anchor-link-title">v2.3.0</a></div><div class="ant-anchor-link"><a href="#v2-2-11" title="v2.2.11" class="ant-anchor-link-title">v2.2.11</a></div><div class="ant-anchor-link"><a href="#v2-2-10" title="v2.2.10" class="ant-anchor-link-title">v2.2.10</a></div><div class="ant-anchor-link"><a href="#v2-2-9" title="v2.2.9" class="ant-anchor-link-title">v2.2.9</a></div><div class="ant-anchor-link"><a href="#v2-2-8" title="v2.2.8" class="ant-anchor-link-title">v2.2.8</a></div><div class="ant-anchor-link"><a href="#v2-2-7" title="v2.2.7" class="ant-anchor-link-title">v2.2.7</a></div><div class="ant-anchor-link"><a href="#v2-2-6" title="v2.2.6" class="ant-anchor-link-title">v2.2.6</a></div><div class="ant-anchor-link"><a href="#v2-2-5" title="v2.2.5" class="ant-anchor-link-title">v2.2.5</a></div><div class="ant-anchor-link"><a href="#v2-2-4" title="v2.2.4" class="ant-anchor-link-title">v2.2.4</a></div><div class="ant-anchor-link"><a href="#v2-2-3" title="v2.2.3" class="ant-anchor-link-title">v2.2.3</a></div><div class="ant-anchor-link"><a href="#v2-2-2" title="v2.2.2" class="ant-anchor-link-title">v2.2.2</a></div><div class="ant-anchor-link"><a href="#v2-2-1" title="v2.2.1" class="ant-anchor-link-title">v2.2.1</a></div><div class="ant-anchor-link"><a href="#v2-2-0" title="v2.2.0" class="ant-anchor-link-title">v2.2.0</a></div><div class="ant-anchor-link"><a href="#v2-1-6" title="v2.1.6" class="ant-anchor-link-title">v2.1.6</a></div><div class="ant-anchor-link"><a href="#v2-1-5" title="v2.1.5" class="ant-anchor-link-title">v2.1.5</a></div><div class="ant-anchor-link"><a href="#v2-1-4" title="v2.1.4" class="ant-anchor-link-title">v2.1.4</a></div><div class="ant-anchor-link"><a href="#v2-1-3" title="v2.1.3" class="ant-anchor-link-title">v2.1.3</a></div><div class="ant-anchor-link"><a href="#v2-1-2" title="v2.1.2" class="ant-anchor-link-title">v2.1.2</a></div><div class="ant-anchor-link"><a href="#v2-1-1" title="v2.1.1" class="ant-anchor-link-title">v2.1.1</a></div><div class="ant-anchor-link"><a href="#v2-1-0" title="v2.1.0" class="ant-anchor-link-title">v2.1.0</a></div><div class="ant-anchor-link"><a href="#v2-0-3" title="v2.0.3" class="ant-anchor-link-title">v2.0.3</a></div><div class="ant-anchor-link"><a href="#v2-0-2" title="v2.0.2" class="ant-anchor-link-title">v2.0.2</a></div><div class="ant-anchor-link"><a href="#v2-0-1" title="v2.0.1" class="ant-anchor-link-title">v2.0.1</a></div><div class="ant-anchor-link"><a href="#v2-0" title="v2.0" class="ant-anchor-link-title">v2.0</a></div></div></div></div></div></div></div></div> </main> <!----></div><div class="global-ui"></div></div>
|
||
<script src="/assets/js/app.cf958133.js" defer></script><script src="/assets/js/2.4c04991c.js" defer></script><script src="/assets/js/1.d8755a39.js" defer></script><script src="/assets/js/60.f277436c.js" defer></script>
|
||
</body>
|
||
</html> |