当前位置: 首页 > news >正文

开黑啦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 以停用压缩)

<?phpnamespace 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', '啊啊啊啊');

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

 监听到数据

http://www.lryc.cn/news/137469.html

相关文章:

  • Vue 中hash 模式与 history 模式的区别
  • Dockerfile推送私有仓库的两个案例
  • 【指标】指标公式大全,款款经典(建议珍藏)!-神奇指标网
  • 面试题目收集
  • 创建R包-2.1:在RStudio中使用Rcpp制作R-Package(更新于2023.8.23)
  • chatGPT如何解释泽众PerformanceRunner性能测试工具?
  • LA@向量组线性相关性
  • [k8s] 基于ubuntu22部署k8s1.28记录
  • React 事件代理 和原生事件绑定混用:你的选择会导致什么问题?
  • 使用阿里云国外和国内云服务器有什么注意事项?
  • 【计算机网络】【常考问题总结】
  • 前端基础(props emit slot 父子组件间通信)
  • 即时通讯:短轮询、长轮询、SSE 和 WebSocket 间的区别
  • 高忆管理:药店零售概念回落,开开实业走低,此前7日大涨超80%
  • Go1.19 排序算法设计实践 经典排序算法对比
  • 3:Ubuntu上配置QT交叉编译环境并编译QT程序到Jetson Orin Nano(ARM)
  • CentOS下MySQL的彻底卸载的几种方法
  • Spring 的异常处理机制
  • java八股文面试[JVM]——JVM参数
  • 面试热题(复原ip地址)
  • 【JavaSE】Java方法的使用
  • Node.js 安装和配置(完整详细版)
  • 剪枝基础与实战(4):稀疏训练及剪枝效果展示
  • CentOS 7.6使用yum安装stress,源码安装stree-ng 0.15.06,源码安装sysstat 12.7.2
  • POI groupRow 折叠分组,折叠部分不显示问题
  • 一、数据库基础
  • Harmony OS教程学习笔记
  • 605. 种花问题
  • Elasticsearch 常见的简单查询
  • C#使用xamarin进行跨平台开发