开黑啦kook 机器人开发 PHP swoole Liunx 服务器(宝塔)

安装环境 PHP 拓展 直接使用 宝塔一键安装 (Windows系统不支持)

设置命令行的PHP版本避免执行脚本时 获取不到 swoole

检查swoole是否安装成功

获取官方SDK 

GitHub - kaiheila/php-bot: 开黑啦机器人的php版本https://github.com/kaiheila/php-bot

 配置参数 机器人链接模式选择 webhook

密钥 自己设置

回调链接直接填写 (配置回调地址之前 先将机器人邀请进频道,在域名后面一定要自己定义域名端口如果是正常的80端口会被占用导致无法运行

端口一定要开放否则无法监听到,如果是腾讯云就去安全组释放端口,最好在宝塔面板页开放端口

获取到邀请链接后直接请求即可

配置好参数示例: 

使用tp5框架创建一个 api 文件 用于 配置 WebHook 回调地址 处理 Challenge 请求

(数据默认会先被进行 zlib (deflate) 压缩再发送。请先使用你使用的语言的 zlib 相关方法解压,或在提供给 KOOK 开放平台的 callback url 中加上 Query 参数 compress=0 以停用压缩)

<?php

namespace app\api\controller;

use think\Env;
use think\Log;
class Api
{
    private $config = [];

    public function __construct()
    {
        $this->config = [
            'token' => Env::get('kook.token'),
            'verify_token' => Env::get('kook.verify_token'),
            'encrypt_key' => Env::get('kook.encrypt_key'),
        ];
    }

    public function start(){
        $params = file_get_contents("php://input");
        Log::info("接收参数");
        $param = json_decode($params,true);
        Log::info($param);
        if (isset($param['encrypt']) && !empty($param['encrypt'])){
            Log::info('解密信息');
            $challenge = $this->decryptData($param['encrypt'],$this->config['encrypt_key']);
            Log::info($challenge);
            $response_data = json_decode($challenge,true);
            Log::info($response_data);
            if (!empty($response_data)){
//            判断是否是验证请求  s 等于 0 代表 消息(包含聊天和通知消息)
                if (isset($response_data['s']) && $response_data['s'] == 0 && isset($response_data['d']['channel_type']) && $response_data['d']['channel_type'] == 'WEBHOOK_CHALLENGE'){
                    // 判断验证token是否正确
                    if ($response_data['d']['verify_token'] == $this->config['verify_token']) {
                        // code...
                        return json(['challenge' => $response_data['d']['challenge']]);
                    }else {
                        return json(['msg'=>'验证错误!']);
                    }


                }
            }
        }
    }


    /**
     * 数据加密
     * @param $data
     * @param $key 密钥
     * @return string
     */
    private function encryptData($data, $key)
    {
        $iv = substr(md5(uniqid()), 0, 16);
        return base64_encode($iv.openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv));
    }

    /**
     *
     * 数据解密
     * @param $eData
     * @param $key  密钥
     * @return false|string
     */
    private function decryptData($eData, $key)
    {
        $eData = base64_decode($eData);
        $iv = substr($eData, 0, 16);
        return openssl_decrypt(substr($eData, 16), 'aes-256-cbc', $key, 0, $iv);
    }
}

 在项目根目录(在tp5 command文件夹中创建也可 自定义命令行 ) 创建一个 PHP文件 使用脚本运行 复制官方示例webhook.php即可 配置好参数

 官方示例使用的是 swoole中的 http 服务器

实例化http服务器

$http = new Swoole\Http\Server(监听IP地址,监听端口);

监听IP地址: 可以填写 0.0.0.0 代表所有,可以指定 使用当前服务器IP

监听端口:则是你在机器人后台填写的 http请求地址的端口

参数配置好,打开终端 ,进入项目根目录

使用命令 检查端口是否被占用

netstat  -anp  |  grep 9501

如果被占用这 使用命令 kill 进程 注意如果进程后面跟着 nginx 则代表端口被 nginx占用,那是在绑定域名时设置了端口号,这时候去宝塔域名把绑定了端口的域名删除即可,如果直接kill进程会导致nginx 停止运行(绑定域名时不用设置端口,设置回调地址时设置端口即可

在执行 文件 

php webhook.php 启动 

启动成功 打印 啊啊啊

这是我自己在代码中添加的日志
$session->log('receiveFrame', '啊啊啊啊');

 在频道内随便发送一条信息

 监听到数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fuchto

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值