zhamao-framework/src/cqbot/connection/RobotWSConnection.php
2019-10-17 13:39:10 +08:00

134 lines
4.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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()) {
$v->close();
}
}
if ($sub_type != "event") {
$obj = $this;
$r = $this->sendAPI("get_version_info", [], function ($response) use ($obj) {
Cache::set("version_info", $response["data"]);
});
if ($r)
$this->create_success = $this->sendAPI("send_group_msg", ["message" => "[CQBot] 机器人 " . $this->getAlias() . " 已连接链接fd" . $this->fd, "group_id" => Cache::get("admin_group")]);
} 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);
Cache::removeKey("sent_api", $data["echo"]);
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);
Cache::removeKey("sent_api", $data["echo"]);
return false;
}
}
/**
* @return mixed
*/
public function getSubType() {
return $this->sub_type;
}
}