[jialbot][进阶开发]常见的问题

@基本操作  June 7, 2020

非开发人员请不要看这里

  1. 如何修改默认的 群聊/私聊核心 程序? 修改默认的加载第三方插件的通配符路径?
#警告请勿修改,否则无法使用云插件。
/config/injectApp
  1. 修改当群友退群/被踢/加入群 执行动作?
app\script_group_event_v1\logic\WhenMemberBeKicked    #被踢
app\script_group_event_v1\logic\WhenMemberJoining    #加入群
app\script_group_event_v1\logic\WhenMemberLeave    #自己退群
  1. 使用模板需要注意什么?
//需要手动 补齐绝对路径  ( 模块@文件夹/模板)
View::fetch(' plug_group_pepper@adminPage/Test')
  1. 群聊连接对象有什么?
群聊传入的是 app\common\extend\GroupCommon 公共对象
  1. 获取当前发言的QQ以及群号码?
$this->conn->_qq
  1. 如何自定义触发机器人特性?
$this->conn->_group
  1. 如何获取 过滤 触发机器人特性后的 用户消息?
/config/jailbot 配置文件中 
group_active_word=>''  
//填写@代表 需要@机器人 ;
//填写 ‘’代表不需要激活词 ;
//填写  # abc 等 用户消息里 前缀需要为 激活词 的消息才能 激活
// 业务逻辑里使用 激活词判断是否需要处理本次群聊消息
 if (!$this->conn->_cqAtBot) {
            //如果没有被AT 返回false
            return false;
        }
//获取 过滤激活词后的 用户消息
$GroupMsg = trim($this->conn->_filterCqAtMsg);
  1. 如何保持 指令持久化?
本框架使用数据库记录用户上一条指令的方式 保持持久化,群聊指令在数据库 prefix_qq_struct 中,私聊指令在prefix_private_struct中。
 系统使用mysql5.7数据库,并且使用addition_json字段来保持持久化消息数据。
 struct来代表下一个消息 将会执行哪个类?addition_json->process 将要执行的 步骤方法
  1. 简单例子
//我们新建一个第三方群聊插件
<?php
namespace app\plug_group_admin\logic;
use app\common\extend\GroupCommon;
use app\common\model\QqStruct;

/**
 * Class ExmapleStructPlug
 * @package app\plug_group_admin\logic
 * @struct 插件例子
 * @author 官方群管插件
 * @user_hide true
 * @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
    {
             //把【持久化】过程调到下一步 finish ,这里是自定义函数 process_自定义
            $qqStruct->addition_json->process = 'finish';
            $qqStruct->addition_json->aaa = 'testVauleAaa';
            //保存 持久化指令数据库
            $qqStruct->save();
    }

    /**
     * @param QqStruct $qqStruct
     * @throws \Exception
     * 【持久化】接上一次的用户继续 调用此 插件
     * 【用户自定义】 上一次变更 process流程的函数名
     */
    public function process_finish(QqStruct $qqStruct): void
    {
        //获取上一个指令中记录的自定义参数
        $qqStruct->addition_json->aaa;
        //结束任务!下次用户在AT机器人,就不会再来 继续执行这个插件了,需要重新开始
        $qqStruct->delete();
    }

}
  1. 自定义二次开发群聊插件需要注意什么?
1:请勿修改 /config/injectApp的配置文件防止无法加载
2: 新建插件的模块命名必须为 /application/plug_group_*
3:群聊插件模块命名 防止其他冲突  最好是 plug_group_name_version 格式
4:群聊插件 /logic/中的 每个 插件对象 必须要有 class 注解,必须包含
/**
 * Class ExmapleStructPlug
 * @package app\plug_group_admin\logic
 * @struct 触发关键词不得重复
 * @author 此插件对象的作者
 * @description 插件的描述
 */
class ExmapleStructPlug
{}
  1. 群聊传入的conn连接对象 大概可以做什么?
目前conn群聊连接对象 包含有 属性对象

[消息QQ][消息群号][CQ码构造器]    [消息ID] [机器人QQ]
连接对象 包含有 公共方法
[回复消息][撤回消息][踢出本群][踢人拉黑]
[禁言][允许加群请求][发送图片][推荐名片]
[群签到][设置管理员][AT全体][设置头衔]
[发送地图][发送语音]
  1. 如何获取群聊消息里用户 消息里第一个@的用户?
   $qq = $this->conn->_cqAtTarget;

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

添加新评论