今天,得知qq群有个机器人hook,消息推送机器人,hook机器人,hookrobot。

然后才出,网上都没有一个实例。陆之岇就此粗糙的写了一个php类。
先写一个php的,后续有时间写java的。

<?php

/**
 * Class HOOK_ROBOT
 * author 陆之岇
 * date 2020/04/09
 * update 2020/04/12
 */
class HOOK_ROBOT
{
    public static $_instance;
    public static $httpApi;
    public static $message;

    /**
     * @param $array
     */
    public static function setApi($array)
    {
        //hookrobot_api build
        self::$httpApi = $array["api"] . "?" . http_build_query($array["query"]);
        self::init();
    }

    /**
     * 初始化
     * 看腾讯hookrobot后续会新加啥
     */
    public static function init()
    {
        //这样是为了兼容后续腾讯hookrobot会增加参数
        self::$message = array(
            "content" => array()
        );
    }

    /**
     * 设置单实例
     * @param HOOK_ROBOT $hook
     */
    public static function set(HOOK_ROBOT $hook)
    {
        self::$_instance = $hook;
    }

    /**
     * 获取单实例
     * @return HOOK_ROBOT
     */
    public static function get()
    {
        if (empty(self::$_instance)) {
            die("Exception: Single instance is not set");
        }
        return self::$_instance;
    }

    /**
     * @param $msg
     * @param int $type 目前是0,可能后续腾讯hookrobot会有新增加
     */
    public static function setMsg($msg, $type = 0)
    {
        self::$message["content"][] = array(
            "type" => $type,
            "data" => $msg
        );
    }

    /**
     * 发送
     * 第一个是http代号,测试出一直是500
     * 第二个是api返回的内容,现在一直是null
     * @return array
     */
    public static function send()
    {
        $json = json_encode(self::$message);
        // encode 后,就初始化msg
        self::init();
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, self::$httpApi);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_HTTPHEADER,
            array(
                'Content-Type: application/json; charset=utf-8',
                'Content-Length: ' . strlen($json)
            )
        );
        ob_start();
        curl_exec($ch);
        $return_content = ob_get_contents();
        ob_end_clean();
        return array(
            curl_getinfo($ch, CURLINFO_HTTP_CODE),
            $return_content
        );
    }
}

// hookrobot  new 对象,set 单实例
$hook = new HOOK_ROBOT();
$hook->setApi(
    array(
        //hookrobot_api
        "api" => "https://app.qun.qq.com/cgi-bin/api/hookrobot_send",
        //这样做是为了后续腾讯hookrobot更新的新参数
        "query" => array(
            // 这里是 key,自己改成自己群hook的key
            "key" => "13256478748454846856496768"
        )
    )
);
HOOK_ROBOT::set($hook);

//调用方法 1

//这里添加消息内容  可以多次调用
HOOK_ROBOT::setMsg("test 1");
HOOK_ROBOT::setMsg("test 2");

// 最后,添加消息完后,发送
HOOK_ROBOT::send();

//或则 打印返回的内容
var_dump(HOOK_ROBOT::send());


//调用方法 2
// 可以获取hookrobot单实例,类比上面的set
$hook = HOOK_ROBOT::get();
$hook->setMsg("get test 1");
$hook->setMsg("get test 2");
$hook->send();

代码中的key,改成自己群hook的key

特别使用

如果你要发送url链接比如 https://www.aliyun.com/
在此PHP类的正确的发送方式为

$hook->setMsg("https:/www.aliyun.com/");

要将 https:// 改为 https:/
如果不去掉一个/话,https://就会被被抹去,发送成 www.aliyun.com/

PR

欢迎PR
Github: https://github.com/kraity/hook-robot

#none
更新于: 2020年04月14日 20:09
2606
11
发表评论
  1. 好奇的 01 好奇的 01

    机器人退群罢工了,不知道是什么情况。

  2. 测试推送url的时候会被编码,请问怎么解决?

    1. 被编码了?我没有测试出被编码。

  3. 感谢老权写的PHP类,已写成Typecho评论推送插件https://bunanyi.com/61.html

    1. 新建个群可以了。。

    2. 现在还能用?为什么我测试send fail [errcode:1008:10033]

  4. 你这快的令人发指啊😂

    1. 哈哈,我就是简单的封装了一下,快来试试这个hook机器人😂😂

  5. 太强了,刚刚才得到hook机器人信息,这就来了

    1. 哈哈哈,拿走吧😂😂