[jailbot]综合二开过程

@基本操作  June 7, 2020

序言:如果想要二开插件模块,请好好阅读。这样你二开会节省好多多的时间

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();
    }

}

扫描二维码,在手机上阅读!

添加新评论