tmp connect

This commit is contained in:
jerry
2021-03-22 07:44:11 +08:00
parent b6d1f724e9
commit 0ff4e52ed3
26 changed files with 812 additions and 212 deletions

View File

@@ -29,25 +29,15 @@ trait CQAPI
public function processWebsocketAPI($connection, $reply, $function = false) {
$api_id = ZMAtomic::get("wait_msg_id")->add(1);
$reply["echo"] = $api_id;
SpinLock::lock("wait_api");
$r = LightCacheInside::get("wait_api", "wait_api");
$r[$api_id] = [
"data" => $reply,
"time" => microtime(true),
"self_id" => $connection->getOption("connect_id"),
"echo" => $api_id
];
LightCacheInside::set("wait_api", "wait_api", $r);
SpinLock::unlock("wait_api");
if (server()->push($connection->getFd(), json_encode($reply))) {
if ($function === true) {
return CoMessage::yieldByWS($r[$api_id], ["echo"], 60);
} else {
SpinLock::lock("wait_api");
$r = LightCacheInside::get("wait_api", "wait_api");
unset($r[$api_id]);
LightCacheInside::set("wait_api", "wait_api", $r);
SpinLock::unlock("wait_api");
$obj = [
"data" => $reply,
"time" => microtime(true),
"self_id" => $connection->getOption("connect_id"),
"echo" => $api_id
];
return CoMessage::yieldByWS($obj, ["echo"], 60);
}
return true;
} else {

118
src/ZM/API/TuringAPI.php Normal file
View File

@@ -0,0 +1,118 @@
<?php
namespace ZM\API;
use Swoole\Coroutine\Http\Client;
use ZM\Console\Console;
class TuringAPI
{
/**
* 请求图灵API返回图灵的消息
* @param $msg
* @param $user_id
* @param $api
* @return string
*/
public static function getTuringMsg($msg, $user_id, $api) {
$origin = $msg;
if (($cq = CQ::getCQ($msg)) !== null) {//如有CQ码则去除
if ($cq["type"] == "image") {
$url = $cq["params"]["url"];
$msg = str_replace(mb_substr($msg, $cq["start"], $cq["end"] - $cq["start"] + 1), "", $msg);
}
$msg = trim($msg);
}
//构建将要发送的json包给图灵
$content = [
"reqType" => 0,
"userInfo" => [
"apiKey" => $api,
"userId" => $user_id
]
];
if ($msg != "") {
$content["perception"]["inputText"]["text"] = $msg;
}
$msg = trim($msg);
if (mb_strlen($msg) < 1 && !isset($url)) return "请说出你想说的话";
if (isset($url)) {
$content["perception"]["inputImage"]["url"] = $url;
$content["reqType"] = 1;
}
if (!isset($content["perception"])) return "请说出你想说的话";
$client = new Client("openapi.tuling123.com", 80);
$client->setHeaders(["Content-type" => "application/json"]);
$client->post("/openapi/api/v2", json_encode($content, JSON_UNESCAPED_UNICODE));
$api_return = json_decode($client->body, true);
if (!isset($api_return["intent"]["code"])) return "XD 哎呀,我脑子突然短路了,请稍后再问我吧!";
$status = self::getResultStatus($api_return);
if ($status !== true) {
if ($status == "err:输入文本内容超长(上限150)") return "你的话太多了!!!";
if ($api_return["intent"]["code"] == 4003) {
return "哎呀,我刚才有点走神了,可能忘记你说什么了,可以重说一遍吗";
}
Console::error("图灵机器人发送错误!\n错误原始内容:" . $origin . "\n来自:" . $user_id . "\n错误信息:" . $status);
//echo json_encode($r, 128|256);
return "哎呀,我刚才有点走神了,要不一会儿换一种问题试试?";
}
$result = $api_return["results"];
//Console::info(Console::setColor(json_encode($result, 128 | 256), "green"));
$final = "";
foreach ($result as $k => $v) {
switch ($v["resultType"]) {
case "url":
$final .= "\n" . $v["values"]["url"];
break;
case "text":
$final .= "\n" . $v["values"]["text"];
break;
case "image":
$final .= "\n" . CQ::image($v["values"]["image"]);
break;
}
}
return trim($final);
}
public static function getResultStatus($r) {
switch ($r["intent"]["code"]) {
case 5000:
return "err:无解析结果";
case 4000:
case 6000:
return "err:暂不支持该功能";
case 4001:
return "err:加密方式错误";
case 4005:
case 4002:
return "err:无功能权限";
case 4003:
return "err:该apikey没有可用请求次数";
case 4007:
return "err:apikey不合法";
case 4100:
return "err:userid获取失败";
case 4200:
return "err:上传格式错误";
case 4300:
return "err:批量操作超过限制";
case 4400:
return "err:没有上传合法userid";
case 4500:
return "err:userid申请个数超过限制";
case 4600:
return "err:输入内容为空";
case 4602:
return "err:输入文本内容超长(上限150)";
case 7002:
return "err:上传信息失败";
case 8008:
return "err:服务器错误";
default:
return true;
}
}
}