🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 序言:如果想要二开插件模块,请好好阅读。这样你二开会节省好多多的时间 ### 1:框架的生命周期(群消息) ``` 0:机器人插件curl post到本系统。 1:Thinphp5.1框架启动 2:application/index/controller/Index 入口文件启动 3:入口文件加载 事件->群聊app\index\logic\GroupMsg 4:app\index\logic\GroupMsg 加载 处理核心 /application/app_group_所有/logic/所有 这里加载的核心文件是官方写好的不要随意的修改 5:app\app_group_menu_v1\logic\InjectOthersPlugUnit 依赖注入 所有/application/plug_group_所有/logic/所有 下的文件夹都会被注入 6:解析用户语句,如果匹配到 第三方插件 触发词,调用第三方插件 7:发送主动API到插件 进行动作。 ``` ### 2:第三方插件开发规范 1. 你的插件必须以 【plug_group_你的名字】 命名例如 ```/application/plug_group_pepper/``` 2. 必须要有命名空间 例如 ``` namespace app\plug_group_peppe\logic``` 3. 必须要有 class注释 必须要包含 @struct @description 格式规范 4. class 必须要有 默认的三个方法 __construct(参数) init() process_1(参数) 5. 消息模板必须要与逻辑程序分离,采用View::fetch() 6. 由于机器人需要被at才能激活,所有过滤at机器人后的消息用 `$msg=$this->conn>filterCqAt(); ` 7. 【最重要】请细读TP5.1开发规范 ### 3:群聊插件开发范例(聊天持久化) 聊天自然对话 持久化 由 鸽子大王 @Hstb 提出。 1:新建你的插件群,因为我是官方(admin)所有我就新建 /application/plug_group_admin/ 文件夹,请不要与其他开发者的文件夹冲突 2:新建逻辑处理程序(logic),比如我 写的一个 群管插件 /application/plug_group_admin/logic/ExmapleStructPlug.php 撰写代码 ``` <?php /** * Created by PhpStorm. * User: admin * Date: 2020/5/6 * Time: 21:13 */ namespace app\plug_group_admin\logic; use app\common\extend\GroupCommon; use app\common\model\QqStruct; use think\facade\View; /** * Class ExmapleStructPlug * @package app\plug_group_admin\logic * @struct 插件例子 * @author 官方测试插件 * @description 这里是 第三方 菜单插件的 描述文件。 */ class ExmapleStructPlug { public $conn; /** * ExmapleStructPlug constructor. * @param GroupCommon $groupCommon * 无论是 init还是 proccess_x 都会执行这个函数 * 主要是传入 conn连接池,可以操作 jailbot框架所有的操作 */ public function __construct(GroupCommon $groupCommon) { $this->conn = $groupCommon; } /** * 【第一次】 触发此插件后 执行的函数,只会执行一次, * 这里应该写导航语句的提示 */ public function init(): void { //直接使用 文字发送消息 $this->conn->reply('恭喜 第三方 菜单 插件 已经 被接管到了,并且计入了数据库任务队列'); //使用模板 发送消息 //给模板变量赋值 View::assign('time', date("Y-m-d H:i:s")); //回复模板消息 这里格式必须是 你的文件夹@分类文件夹/模板 //plug_group_admin@admin/page 实际为 ./plug_group_admin/view/admin/page.html $this->conn->reply(View::fetch('plug_group_admin@admin/page')); } /** * @param QqStruct $qqStruct * 【持久化】接上一次的用户继续 调用此 插件 * 【默认】【第二次】激活机器人 会被调用 * 这里必须 为process_1(QqStruct $qqStruct) */ public function process_1(QqStruct $qqStruct): void { //获取到过滤 用户QT机器人的消息 $msg = $this->conn->filterCqAt; //如果用户 回复2 if ($msg == '2') { //把【持久化】过程调到下一步 finish ,这里是自定义函数 process_自定义 $qqStruct->addition_json->process = 'finish'; //保存 持久化指令数据库 $qqStruct->save(); //逻辑回复 提示用户 $this->conn->reply('您已经进入 第二个逻辑!请回复任意内容 结束'); return; } $this->conn->reply('这里是导航process_1,输入【2】即可即进入下一个逻辑'); } /** * @param QqStruct $qqStruct * @throws \Exception * 【持久化】接上一次的用户继续 调用此 插件 * 【用户自定义】 上一次变更 process流程的函数名 */ public function process_finish(QqStruct $qqStruct): void { $this->conn->reply('这里是导航process_finish,逻辑完成!删除数据库任务'); //结束任务!下次用户在AT机器人,就不会再来 继续执行这个插件了,需要重新开始 $qqStruct->delete(); } } ```