2018-11-28 13:26:18 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Created by PhpStorm.
|
|
|
|
|
|
* User: jerry
|
|
|
|
|
|
* Date: 2018/11/14
|
|
|
|
|
|
* Time: 11:59 PM
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
class RobotWSConnection extends WSConnection
|
|
|
|
|
|
{
|
|
|
|
|
|
const ALIAS_LIST = [
|
|
|
|
|
|
"10001" => "小马哥",
|
|
|
|
|
|
"838714432" => "鲸鱼的test机器人"
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
private $qq;
|
|
|
|
|
|
private $alias;//别名
|
|
|
|
|
|
private $sub_type;
|
|
|
|
|
|
|
|
|
|
|
|
public function __construct(swoole_websocket_server $server, $fd, $qq, swoole_http_request $request, $sub_type) {
|
|
|
|
|
|
parent::__construct($server, $fd, $request->server["remote_addr"]);
|
|
|
|
|
|
$this->qq = $qq;
|
|
|
|
|
|
$this->alias = self::ALIAS_LIST[$qq] ?? "机器人" . $qq;
|
|
|
|
|
|
$this->sub_type = $sub_type;
|
|
|
|
|
|
foreach (ConnectionManager::getAll("robot") as $k => $v) {
|
|
|
|
|
|
if ($v->getQQ() == $this->getQQ() && $k != $this->fd && $v->getSubType() == $this->getSubType()) {
|
2019-10-17 13:39:10 +08:00
|
|
|
|
$v->close();
|
2018-11-28 13:26:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if ($sub_type != "event") {
|
|
|
|
|
|
$obj = $this;
|
|
|
|
|
|
$r = $this->sendAPI("get_version_info", [], function ($response) use ($obj) {
|
|
|
|
|
|
Cache::set("version_info", $response["data"]);
|
|
|
|
|
|
});
|
|
|
|
|
|
if ($r)
|
2018-11-28 18:18:08 +08:00
|
|
|
|
$this->create_success = $this->sendAPI("send_group_msg", ["message" => "[CQBot] 机器人 " . $this->getAlias() . " 已连接,链接fd:" . $this->fd, "group_id" => Cache::get("admin_group")]);
|
2018-11-28 13:26:18 +08:00
|
|
|
|
} else $this->create_success = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 返回连接的QQ
|
|
|
|
|
|
* @return mixed
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function getQQ() {
|
|
|
|
|
|
return $this->qq;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @return mixed|string
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function getAlias() {
|
|
|
|
|
|
return $this->alias;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function sendAPI($api, $params = [], callable $callback = null) {
|
|
|
|
|
|
$data["action"] = $api;
|
|
|
|
|
|
if ($params != []) $data["params"] = $params;
|
|
|
|
|
|
|
|
|
|
|
|
if ($this->sub_type == "event") {
|
|
|
|
|
|
$conns = ConnectionManager::getAll("robot");
|
|
|
|
|
|
foreach ($conns as $k => $v) {
|
|
|
|
|
|
if ($v->getSubType() == "api" && $v->getQQ() == $this->getQQ()) {
|
|
|
|
|
|
$api_id = Cache::$api_id->get();
|
|
|
|
|
|
$data["echo"] = $api_id;
|
|
|
|
|
|
Cache::$api_id->add(1);
|
|
|
|
|
|
Cache::appendKey("sent_api", $api_id, [
|
|
|
|
|
|
"data" => $data,
|
|
|
|
|
|
"time" => microtime(true),
|
|
|
|
|
|
"func" => $callback,
|
|
|
|
|
|
"self_id" => $this->getQQ()
|
|
|
|
|
|
]);
|
|
|
|
|
|
if ($v->push(json_encode($data))) {
|
|
|
|
|
|
if (in_array($data["action"], CQAPI::getLoggedAPIs())) {
|
|
|
|
|
|
Console::msg($data);
|
|
|
|
|
|
Cache::$out_count->add(1);
|
|
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$response = [
|
|
|
|
|
|
"status" => "failed",
|
|
|
|
|
|
"retcode" => 998,
|
|
|
|
|
|
"data" => null,
|
|
|
|
|
|
"self_id" => $this->getQQ()
|
|
|
|
|
|
];
|
|
|
|
|
|
$s = Cache::get("sent_api")[$data["echo"]];
|
|
|
|
|
|
StatusParser::parse($response, $data);
|
|
|
|
|
|
if ($s["func"] !== null)
|
|
|
|
|
|
call_user_func($s["func"], $response, $data);
|
2018-12-02 19:59:43 +08:00
|
|
|
|
Cache::removeKey("sent_api", $data["echo"]);
|
2018-11-28 13:26:18 +08:00
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
$api_id = Cache::$api_id->get();
|
|
|
|
|
|
$data["echo"] = $api_id;
|
|
|
|
|
|
Cache::$api_id->add(1);
|
|
|
|
|
|
Cache::appendKey("sent_api", $api_id, [
|
|
|
|
|
|
"data" => $data,
|
|
|
|
|
|
"time" => microtime(true),
|
|
|
|
|
|
"func" => $callback,
|
|
|
|
|
|
"self_id" => $this->getQQ()
|
|
|
|
|
|
]);
|
|
|
|
|
|
if ($this->push(json_encode($data))) {
|
|
|
|
|
|
if (in_array($data["action"], CQAPI::getLoggedAPIs())) {
|
|
|
|
|
|
Console::msg($data);
|
|
|
|
|
|
Cache::$out_count->add(1);
|
|
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$response = [
|
|
|
|
|
|
"status" => "failed",
|
|
|
|
|
|
"retcode" => 999,
|
|
|
|
|
|
"data" => null,
|
|
|
|
|
|
"self_id" => $this->getQQ()
|
|
|
|
|
|
];
|
|
|
|
|
|
$s = Cache::get("sent_api")[$data["echo"]];
|
|
|
|
|
|
StatusParser::parse($response, $data);
|
|
|
|
|
|
if ($s["func"] !== null)
|
|
|
|
|
|
call_user_func($s["func"], $response, $data);
|
2018-12-02 19:59:43 +08:00
|
|
|
|
Cache::removeKey("sent_api", $data["echo"]);
|
2018-11-28 13:26:18 +08:00
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @return mixed
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function getSubType() {
|
|
|
|
|
|
return $this->sub_type;
|
|
|
|
|
|
}
|
2019-10-17 13:39:10 +08:00
|
|
|
|
}
|