add cs fixer and PHPStan and activate it (build 436)

This commit is contained in:
crazywhalecc
2022-03-15 18:05:33 +08:00
parent d01bd69aa5
commit 1706afbcd0
163 changed files with 4572 additions and 3588 deletions

View File

@@ -1,11 +1,9 @@
<?php /** @noinspection PhpUnused */
/** @noinspection PhpMissingReturnTypeInspection */
<?php
declare(strict_types=1);
namespace ZM\API;
use ZM\Console\Console;
use ZM\Entity\CQObject;
@@ -16,12 +14,13 @@ class CQ
* @param $qq
* @return string
*/
public static function at($qq) {
if (is_numeric($qq) || $qq === "all") {
return "[CQ:at,qq=" . $qq . "]";
public static function at($qq)
{
if (is_numeric($qq) || $qq === 'all') {
return '[CQ:at,qq=' . $qq . ']';
}
Console::warning(zm_internal_errcode("E00035") . "传入的QQ号码($qq)错误!");
return " ";
Console::warning(zm_internal_errcode('E00035') . "传入的QQ号码({$qq})错误!");
return ' ';
}
/**
@@ -29,127 +28,130 @@ class CQ
* @param $id
* @return string
*/
public static function face($id) {
public static function face($id)
{
if (is_numeric($id)) {
return "[CQ:face,id=" . $id . "]";
return '[CQ:face,id=' . $id . ']';
}
Console::warning(zm_internal_errcode("E00035") . "传入的face id($id)错误!");
return " ";
Console::warning(zm_internal_errcode('E00035') . "传入的face id({$id})错误!");
return ' ';
}
/**
* 发送图片
* @param $file
* @param bool $cache
* @param bool $flash
* @param bool $proxy
* @param int $timeout
* @return string
*/
public static function image($file, bool $cache = true, bool $flash = false, bool $proxy = true, int $timeout = -1) {
public static function image($file, bool $cache = true, bool $flash = false, bool $proxy = true, int $timeout = -1)
{
return
"[CQ:image,file=" . self::encode($file, true) .
(!$cache ? ",cache=0" : "") .
($flash ? ",type=flash" : "") .
(!$proxy ? ",proxy=false" : "") .
($timeout != -1 ? (",timeout=" . $timeout) : "") .
"]";
'[CQ:image,file=' . self::encode($file, true) .
(!$cache ? ',cache=0' : '') .
($flash ? ',type=flash' : '') .
(!$proxy ? ',proxy=false' : '') .
($timeout != -1 ? (',timeout=' . $timeout) : '') .
']';
}
/**
* 发送语音
* @param $file
* @param bool $magic
* @param bool $cache
* @param bool $proxy
* @param int $timeout
* @return string
*/
public static function record($file, bool $magic = false, bool $cache = true, bool $proxy = true, int $timeout = -1) {
public static function record($file, bool $magic = false, bool $cache = true, bool $proxy = true, int $timeout = -1)
{
return
"[CQ:record,file=" . self::encode($file, true) .
(!$cache ? ",cache=0" : "") .
($magic ? ",magic=1" : "") .
(!$proxy ? ",proxy=false" : "") .
($timeout != -1 ? (",timeout=" . $timeout) : "") .
"]";
'[CQ:record,file=' . self::encode($file, true) .
(!$cache ? ',cache=0' : '') .
($magic ? ',magic=1' : '') .
(!$proxy ? ',proxy=false' : '') .
($timeout != -1 ? (',timeout=' . $timeout) : '') .
']';
}
/**
* 发送短视频
* @param $file
* @param bool $cache
* @param bool $proxy
* @param int $timeout
* @return string
*/
public static function video($file, bool $cache = true, bool $proxy = true, int $timeout = -1) {
public static function video($file, bool $cache = true, bool $proxy = true, int $timeout = -1)
{
return
"[CQ:video,file=" . self::encode($file, true) .
(!$cache ? ",cache=0" : "") .
(!$proxy ? ",proxy=false" : "") .
($timeout != -1 ? (",timeout=" . intval($timeout)) : "") .
"]";
'[CQ:video,file=' . self::encode($file, true) .
(!$cache ? ',cache=0' : '') .
(!$proxy ? ',proxy=false' : '') .
($timeout != -1 ? (',timeout=' . $timeout) : '') .
']';
}
/**
* 发送投掷骰子(只能在单条回复中单独使用)
* @return string
*/
public static function rps() {
return "[CQ:rps]";
public static function rps()
{
return '[CQ:rps]';
}
/**
* 发送掷骰子表情(只能在单条回复中单独使用)
* @return string
*/
public static function dice() {
return "[CQ:dice]";
public static function dice()
{
return '[CQ:dice]';
}
/**
* 戳一戳(原窗口抖动,仅支持好友消息使用)
* @return string
*/
public static function shake() {
return "[CQ:shake]";
public static function shake()
{
return '[CQ:shake]';
}
/**
* 发送新的戳一戳
* @param $type
* @param $id
* @param string $name
* @return string
*/
public static function poke($type, $id, string $name = "") {
return "[CQ:poke,type=$type,id=$id" . ($name != "" ? (",name=" . self::encode($name, true)) : "") . "]";
public static function poke($type, $id, string $name = '')
{
return "[CQ:poke,type={$type},id={$id}" . ($name != '' ? (',name=' . self::encode($name, true)) : '') . ']';
}
/**
* 发送匿名消息
* @param int $ignore
* @return string
*/
public static function anonymous(int $ignore = 1) {
return "[CQ:anonymous" . ($ignore != 1 ? ",ignore=0" : "") . "]";
public static function anonymous(int $ignore = 1)
{
return '[CQ:anonymous' . ($ignore != 1 ? ',ignore=0' : '') . ']';
}
/**
* 发送链接分享(只能在单条回复中单独使用)
* @param $url
* @param $title
* @param null $content
* @param null $image
* @param null $content
* @param null $image
* @return string
*/
public static function share($url, $title, $content = null, $image = null) {
if ($content === null) $c = "";
else $c = ",content=" . self::encode($content, true);
if ($image === null) $i = "";
else $i = ",image=" . self::encode($image, true);
return "[CQ:share,url=" . self::encode($url, true) . ",title=" . self::encode($title, true) . $c . $i . "]";
public static function share($url, $title, $content = null, $image = null)
{
if ($content === null) {
$c = '';
} else {
$c = ',content=' . self::encode($content, true);
}
if ($image === null) {
$i = '';
} else {
$i = ',image=' . self::encode($image, true);
}
return '[CQ:share,url=' . self::encode($url, true) . ',title=' . self::encode($title, true) . $c . $i . ']';
}
/**
@@ -158,25 +160,25 @@ class CQ
* @param $id
* @return string
*/
public static function contact($type, $id) {
return "[CQ:contact,type=$type,id=$id]";
public static function contact($type, $id)
{
return "[CQ:contact,type={$type},id={$id}]";
}
/**
* 发送位置
* @param $lat
* @param $lon
* @param string $title
* @param string $content
* @return string
*/
public static function location($lat, $lon, string $title = "", string $content = "") {
return "[CQ:location" .
",lat=" . self::encode($lat, true) .
",lon=" . self::encode($lon, true) .
($title != "" ? (",title=" . self::encode($title, true)) : "") .
($content != "" ? (",content=" . self::encode($content, true)) : "") .
"]";
public static function location($lat, $lon, string $title = '', string $content = '')
{
return '[CQ:location' .
',lat=' . self::encode($lat, true) .
',lon=' . self::encode($lon, true) .
($title != '' ? (',title=' . self::encode($title, true)) : '') .
($content != '' ? (',content=' . self::encode($content, true)) : '') .
']';
}
/**
@@ -191,101 +193,119 @@ class CQ
* $image 为音乐卡片的图片链接地址(可忽略)
* @param $type
* @param $id_or_url
* @param null $audio
* @param null $title
* @param null $content
* @param null $image
* @param null $audio
* @param null $title
* @param null $content
* @param null $image
* @return string
*/
public static function music($type, $id_or_url, $audio = null, $title = null, $content = null, $image = null) {
public static function music($type, $id_or_url, $audio = null, $title = null, $content = null, $image = null)
{
switch ($type) {
case "qq":
case "163":
case "xiami":
return "[CQ:music,type=$type,id=$id_or_url]";
case "custom":
case 'qq':
case '163':
case 'xiami':
return "[CQ:music,type={$type},id={$id_or_url}]";
case 'custom':
if ($title === null || $audio === null) {
Console::warning(zm_internal_errcode("E00035") . "传入CQ码实例的标题和音频链接不能为空");
return " ";
Console::warning(zm_internal_errcode('E00035') . '传入CQ码实例的标题和音频链接不能为空');
return ' ';
}
if ($content === null) $c = "";
else $c = ",content=" . self::encode($content, true);
if ($image === null) $i = "";
else $i = ",image=" . self::encode($image, true);
return "[CQ:music,type=custom,url=" .
if ($content === null) {
$c = '';
} else {
$c = ',content=' . self::encode($content, true);
}
if ($image === null) {
$i = '';
} else {
$i = ',image=' . self::encode($image, true);
}
return '[CQ:music,type=custom,url=' .
self::encode($id_or_url, true) .
",audio=" . self::encode($audio, true) . ",title=" . self::encode($title, true) . $c . $i .
"]";
',audio=' . self::encode($audio, true) . ',title=' . self::encode($title, true) . $c . $i .
']';
default:
Console::warning(zm_internal_errcode("E00035") . "传入的music type($type)错误!");
return " ";
Console::warning(zm_internal_errcode('E00035') . "传入的music type({$type})错误!");
return ' ';
}
}
public static function forward($id) {
return "[CQ:forward,id=".self::encode($id)."]";
public static function forward($id)
{
return '[CQ:forward,id=' . self::encode($id) . ']';
}
public static function node($user_id, $nickname, $content) {
return "[CQ:node,user_id=$user_id,nickname=" . self::encode($nickname, true) . ",content=" . self::encode($content, true) . "]";
public static function node($user_id, $nickname, $content)
{
return "[CQ:node,user_id={$user_id},nickname=" . self::encode($nickname, true) . ',content=' . self::encode($content, true) . ']';
}
public static function xml($data) {
return "[CQ:xml,data=" . self::encode($data, true) . "]";
public static function xml($data)
{
return '[CQ:xml,data=' . self::encode($data, true) . ']';
}
public static function json($data, $resid = 0) {
return "[CQ:json,data=" . self::encode($data, true) . ",resid=" . intval($resid) . "]";
public static function json($data, $resid = 0)
{
return '[CQ:json,data=' . self::encode($data, true) . ',resid=' . intval($resid) . ']';
}
public static function _custom(string $type_name, $params) {
$code = "[CQ:" . $type_name;
public static function _custom(string $type_name, $params)
{
$code = '[CQ:' . $type_name;
foreach ($params as $k => $v) {
$code .= "," . $k . "=" . self::escape($v, true);
$code .= ',' . $k . '=' . self::escape($v, true);
}
$code .= "]";
$code .= ']';
return $code;
}
/**
* 反转义字符串中的CQ码敏感符号
* @param $msg
* @param bool $is_content
* @return mixed
* @param mixed $msg
* @param mixed $is_content
*/
public static function decode($msg, $is_content = false) {
$msg = str_replace(["&amp;", "&#91;", "&#93;"], ["&", "[", "]"], $msg);
if ($is_content) $msg = str_replace("&#44;", ",", $msg);
public static function decode($msg, $is_content = false)
{
$msg = str_replace(['&amp;', '&#91;', '&#93;'], ['&', '[', ']'], $msg);
if ($is_content) {
$msg = str_replace('&#44;', ',', $msg);
}
return $msg;
}
public static function replace($str) {
$str = str_replace("{{", "[", $str);
$str = str_replace("}}", "]", $str);
return $str;
public static function replace($str)
{
$str = str_replace('{{', '[', $str);
return str_replace('}}', ']', $str);
}
/**
* 转义CQ码的特殊字符同encode
* @param $msg
* @param bool $is_content
* @return mixed
* @param mixed $msg
* @param mixed $is_content
*/
public static function escape($msg, $is_content = false) {
$msg = str_replace(["&", "[", "]"], ["&amp;", "&#91;", "&#93;"], $msg);
if ($is_content) $msg = str_replace(",", "&#44;", $msg);
public static function escape($msg, $is_content = false)
{
$msg = str_replace(['&', '[', ']'], ['&amp;', '&#91;', '&#93;'], $msg);
if ($is_content) {
$msg = str_replace(',', '&#44;', $msg);
}
return $msg;
}
/**
* 转义CQ码的特殊字符
* @param $msg
* @param false $is_content
* @return mixed
* @param mixed $msg
* @param mixed $is_content
*/
public static function encode($msg, $is_content = false) {
$msg = str_replace(["&", "[", "]"], ["&amp;", "&#91;", "&#93;"], $msg);
if ($is_content) $msg = str_replace(",", "&#44;", $msg);
public static function encode($msg, $is_content = false)
{
$msg = str_replace(['&', '[', ']'], ['&amp;', '&#91;', '&#93;'], $msg);
if ($is_content) {
$msg = str_replace(',', '&#44;', $msg);
}
return $msg;
}
@@ -294,12 +314,13 @@ class CQ
* @param $msg
* @return string
*/
public static function removeCQ($msg) {
$final = "";
public static function removeCQ($msg)
{
$final = '';
$last_end = 0;
foreach (self::getAllCQ($msg) as $v) {
$final .= mb_substr($msg, $last_end, $v["start"] - $last_end);
$last_end = $v["end"] + 1;
$final .= mb_substr($msg, $last_end, $v['start'] - $last_end);
$last_end = $v['end'] + 1;
}
$final .= mb_substr($msg, $last_end);
return $final;
@@ -307,55 +328,58 @@ class CQ
/**
* 获取消息中第一个CQ码
* @param $msg
* @param bool $is_object
* @return array|CQObject|null
* @param mixed $msg
* @param mixed $is_object
*/
public static function getCQ($msg, $is_object = false) {
if (($head = mb_strpos($msg, "[CQ:")) !== false) {
public static function getCQ($msg, $is_object = false)
{
if (($head = mb_strpos($msg, '[CQ:')) !== false) {
$key_offset = mb_substr($msg, $head);
$close = mb_strpos($key_offset, "]");
if ($close === false) return null;
$content = mb_substr($msg, $head + 4, $close + $head - mb_strlen($msg));
$exp = explode(",", $content);
$cq["type"] = array_shift($exp);
foreach ($exp as $v) {
$ss = explode("=", $v);
$sk = array_shift($ss);
$cq["params"][$sk] = self::decode(implode("=", $ss), true);
$close = mb_strpos($key_offset, ']');
if ($close === false) {
return null;
}
$cq["start"] = $head;
$cq["end"] = $close + $head;
$content = mb_substr($msg, $head + 4, $close + $head - mb_strlen($msg));
$exp = explode(',', $content);
$cq['type'] = array_shift($exp);
foreach ($exp as $v) {
$ss = explode('=', $v);
$sk = array_shift($ss);
$cq['params'][$sk] = self::decode(implode('=', $ss), true);
}
$cq['start'] = $head;
$cq['end'] = $close + $head;
return !$is_object ? $cq : CQObject::fromArray($cq);
} else {
return null;
}
return null;
}
/**
* 获取消息中所有的CQ码
* @param $msg
* @param bool $is_object
* @return array|CQObject[]
* @param mixed $msg
* @param mixed $is_object
*/
public static function getAllCQ($msg, $is_object = false) {
public static function getAllCQ($msg, $is_object = false)
{
$cqs = [];
$offset = 0;
while (($head = mb_strpos(($submsg = mb_substr($msg, $offset)), "[CQ:")) !== false) {
while (($head = mb_strpos(($submsg = mb_substr($msg, $offset)), '[CQ:')) !== false) {
$key_offset = mb_substr($submsg, $head);
$tmpmsg = mb_strpos($key_offset, "]");
if ($tmpmsg === false) break; // 没闭合不算CQ码
$tmpmsg = mb_strpos($key_offset, ']');
if ($tmpmsg === false) {
break;
} // 没闭合不算CQ码
$content = mb_substr($submsg, $head + 4, $tmpmsg + $head - mb_strlen($submsg));
$exp = explode(",", $content);
$exp = explode(',', $content);
$cq = [];
$cq["type"] = array_shift($exp);
$cq['type'] = array_shift($exp);
foreach ($exp as $v) {
$ss = explode("=", $v);
$ss = explode('=', $v);
$sk = array_shift($ss);
$cq["params"][$sk] = self::decode(implode("=", $ss), true);
$cq['params'][$sk] = self::decode(implode('=', $ss), true);
}
$cq["start"] = $offset + $head;
$cq["end"] = $offset + $tmpmsg + $head;
$cq['start'] = $offset + $head;
$cq['end'] = $offset + $tmpmsg + $head;
$offset += $head + $tmpmsg + 1;
$cqs[] = (!$is_object ? $cq : CQObject::fromArray($cq));
}

View File

@@ -1,5 +1,6 @@
<?php
declare(strict_types=1);
namespace ZM\API;
@@ -13,80 +14,89 @@ use ZM\Utils\CoMessage;
trait CQAPI
{
/** @var null|Closure */
private static $filter = null;
private static $filter;
public static function registerFilter(callable $callable) {
public function __call($name, $arguments)
{
return false;
}
public static function registerFilter(callable $callable)
{
self::$filter = $callable;
}
public function getActionName($suffix, string $method)
{
$postfix = ($suffix == OneBotV11::API_ASYNC ? '_async' : ($suffix == OneBotV11::API_RATE_LIMITED ? '_rate_limited' : ''));
$func_name = strtolower(preg_replace('/(?<=[a-z])([A-Z])/', '_$1', $method));
return $func_name . $postfix;
}
/**
* @param $connection
* @param $reply
* @param |null $function
* @return bool|array
* @return array|bool
*/
private function processAPI($connection, $reply, $function = null) {
private function processAPI($connection, $reply, $function = null)
{
if (is_callable(self::$filter)) {
$reply2 = call_user_func(self::$filter, $reply);
if (is_bool($reply2)) return $reply2;
else $reply = $reply2;
if (is_bool($reply2)) {
return $reply2;
}
$reply = $reply2;
}
if ($connection->getOption("type") === CONN_WEBSOCKET)
if ($connection->getOption('type') === CONN_WEBSOCKET) {
return $this->processWebsocketAPI($connection, $reply, $function);
else
return $this->processHttpAPI($connection, $reply, $function);
}
return $this->processHttpAPI($connection, $reply, $function);
}
private function processWebsocketAPI($connection, $reply, $function = false) {
$api_id = ZMAtomic::get("wait_msg_id")->add(1);
$reply["echo"] = $api_id;
private function processWebsocketAPI($connection, $reply, $function = false)
{
$api_id = ZMAtomic::get('wait_msg_id')->add(1);
$reply['echo'] = $api_id;
if (server()->push($connection->getFd(), json_encode($reply))) {
if ($function === true) {
$obj = [
"data" => $reply,
"time" => microtime(true),
"self_id" => $connection->getOption("connect_id"),
"echo" => $api_id
'data' => $reply,
'time' => microtime(true),
'self_id' => $connection->getOption('connect_id'),
'echo' => $api_id,
];
return CoMessage::yieldByWS($obj, ["echo"], 30);
return CoMessage::yieldByWS($obj, ['echo'], 30);
}
return true;
} else {
Console::warning(zm_internal_errcode("E00036") . "CQAPI send failed, websocket push error.");
$response = [
"status" => "failed",
"retcode" => -1000,
"data" => null,
"self_id" => $connection->getOption("connect_id")
];
SpinLock::lock("wait_api");
$r = LightCacheInside::get("wait_api", "wait_api");
unset($r[$reply["echo"]]);
LightCacheInside::set("wait_api", "wait_api", $r);
SpinLock::unlock("wait_api");
if ($function === true) return $response;
return false;
}
Console::warning(zm_internal_errcode('E00036') . 'CQAPI send failed, websocket push error.');
$response = [
'status' => 'failed',
'retcode' => -1000,
'data' => null,
'self_id' => $connection->getOption('connect_id'),
];
SpinLock::lock('wait_api');
$r = LightCacheInside::get('wait_api', 'wait_api');
unset($r[$reply['echo']]);
LightCacheInside::set('wait_api', 'wait_api', $r);
SpinLock::unlock('wait_api');
if ($function === true) {
return $response;
}
return false;
}
/**
* @param $connection
* @param $reply
* @param null $function
* @return bool
* @noinspection PhpUnusedParameterInspection
*/
private function processHttpAPI($connection, $reply, $function = null): bool {
return false;
}
public function getActionName($suffix, string $method) {
$postfix = ($suffix == OneBotV11::API_ASYNC ? '_async' : ($suffix == OneBotV11::API_RATE_LIMITED ? '_rate_limited' : ''));
$func_name = strtolower(preg_replace('/(?<=[a-z])([A-Z])/', '_$1', $method));
return $func_name . $postfix;
}
public function __call($name, $arguments) {
private function processHttpAPI($connection, $reply, $function = null): bool
{
return false;
}
}

View File

@@ -1,15 +1,19 @@
<?php
declare(strict_types=1);
namespace ZM\API;
class GoCqhttpAPIV11
{
const SUPPORT_VERSION = '1.0.0-beta8';
use CQAPI;
public const SUPPORT_VERSION = '1.0.0-beta8';
private $connection;
private $callback;
private $prefix;
public function __construct($connection, $callback, $prefix)
@@ -22,90 +26,95 @@ class GoCqhttpAPIV11
/**
* 获取频道系统内BOT的资料
* 响应字段nickname, tiny_id, avatar_url
* @link https://github.com/Mrs4s/go-cqhttp/blob/master/docs/guild.md#%E8%8E%B7%E5%8F%96%E9%A2%91%E9%81%93%E7%B3%BB%E7%BB%9F%E5%86%85bot%E7%9A%84%E8%B5%84%E6%96%99
* @see https://github.com/Mrs4s/go-cqhttp/blob/master/docs/guild.md#%E8%8E%B7%E5%8F%96%E9%A2%91%E9%81%93%E7%B3%BB%E7%BB%9F%E5%86%85bot%E7%9A%84%E8%B5%84%E6%96%99
* @return array|bool
*/
public function getGuildServiceProfile()
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__)
'action' => $this->getActionName($this->prefix, __FUNCTION__),
], $this->callback);
}
/**
* 获取频道列表
* @link https://github.com/Mrs4s/go-cqhttp/blob/master/docs/guild.md#%E8%8E%B7%E5%8F%96%E9%A2%91%E9%81%93%E5%88%97%E8%A1%A8
* @see https://github.com/Mrs4s/go-cqhttp/blob/master/docs/guild.md#%E8%8E%B7%E5%8F%96%E9%A2%91%E9%81%93%E5%88%97%E8%A1%A8
* @return array|bool
*/
public function getGuildList() {
public function getGuildList()
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__)
'action' => $this->getActionName($this->prefix, __FUNCTION__),
], $this->callback);
}
/**
* 通过访客获取频道元数据
* @link https://github.com/Mrs4s/go-cqhttp/blob/master/docs/guild.md#%E9%80%9A%E8%BF%87%E8%AE%BF%E5%AE%A2%E8%8E%B7%E5%8F%96%E9%A2%91%E9%81%93%E5%85%83%E6%95%B0%E6%8D%AE
* @see https://github.com/Mrs4s/go-cqhttp/blob/master/docs/guild.md#%E9%80%9A%E8%BF%87%E8%AE%BF%E5%AE%A2%E8%8E%B7%E5%8F%96%E9%A2%91%E9%81%93%E5%85%83%E6%95%B0%E6%8D%AE
* @param $guild_id
* @return array|bool
*/
public function getGuildMetaByGuest($guild_id) {
public function getGuildMetaByGuest($guild_id)
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'guild_id' => $guild_id
]
'guild_id' => $guild_id,
],
], $this->callback);
}
/**
* 获取子频道列表
* @link https://github.com/Mrs4s/go-cqhttp/blob/master/docs/guild.md#%E8%8E%B7%E5%8F%96%E5%AD%90%E9%A2%91%E9%81%93%E5%88%97%E8%A1%A8
* @see https://github.com/Mrs4s/go-cqhttp/blob/master/docs/guild.md#%E8%8E%B7%E5%8F%96%E5%AD%90%E9%A2%91%E9%81%93%E5%88%97%E8%A1%A8
* @param $guild_id
* @param false $no_cache
* @param false $no_cache
* @return array|bool
*/
public function getGuildChannelList($guild_id, bool $no_cache = false) {
public function getGuildChannelList($guild_id, bool $no_cache = false)
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'guild_id' => $guild_id,
'no_cache' => $no_cache
]
'no_cache' => $no_cache,
],
], $this->callback);
}
/**
* 获取频道成员列表
* @link https://github.com/Mrs4s/go-cqhttp/blob/master/docs/guild.md#%E8%8E%B7%E5%8F%96%E9%A2%91%E9%81%93%E6%88%90%E5%91%98%E5%88%97%E8%A1%A8
* @see https://github.com/Mrs4s/go-cqhttp/blob/master/docs/guild.md#%E8%8E%B7%E5%8F%96%E9%A2%91%E9%81%93%E6%88%90%E5%91%98%E5%88%97%E8%A1%A8
* @param $guild_id
* @return array|bool
*/
public function getGuildMembers($guild_id) {
public function getGuildMembers($guild_id)
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'guild_id' => $guild_id
]
'guild_id' => $guild_id,
],
], $this->callback);
}
/**
* 发送信息到子频道
* @link https://github.com/Mrs4s/go-cqhttp/blob/master/docs/guild.md#%E5%8F%91%E9%80%81%E4%BF%A1%E6%81%AF%E5%88%B0%E5%AD%90%E9%A2%91%E9%81%93
* @see https://github.com/Mrs4s/go-cqhttp/blob/master/docs/guild.md#%E5%8F%91%E9%80%81%E4%BF%A1%E6%81%AF%E5%88%B0%E5%AD%90%E9%A2%91%E9%81%93
* @param $guild_id
* @param $channel_id
* @param $message
* @return array|bool
*/
public function sendGuildChannelMsg($guild_id, $channel_id, $message) {
public function sendGuildChannelMsg($guild_id, $channel_id, $message)
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'guild_id' => $guild_id,
'channel_id' => $channel_id,
'message' => $message
]
'message' => $message,
],
], $this->callback);
}
}

View File

@@ -1,5 +1,8 @@
<?php /** @noinspection PhpUnused */
<?php
/** @noinspection PhpUnused */
declare(strict_types=1);
namespace ZM\API;
@@ -11,45 +14,56 @@ use ZM\Exception\ZMKnownException;
/**
* OneBot V11 的 API 实现类
* Class OneBotV11
* @package ZM\API
* @since 2.5
* @since 2.5.0
*/
class OneBotV11
{
use CQAPI;
const API_ASYNC = 1;
const API_NORMAL = 0;
const API_RATE_LIMITED = 2;
public const API_ASYNC = 1;
/** @var ConnectionObject|null */
public const API_NORMAL = 0;
public const API_RATE_LIMITED = 2;
/** @var null|ConnectionObject */
protected $connection;
protected $callback = true;
protected $prefix = 0;
public function __construct(ConnectionObject $connection)
{
$this->connection = $connection;
}
/**
* @param $robot_id
* @return ZMRobot
* @throws RobotNotFoundException
* @return ZMRobot
*/
public static function get($robot_id)
{
$r = ManagerGM::getAllByName('qq');
foreach ($r as $v) {
if ($v->getOption('connect_id') == $robot_id) return new ZMRobot($v);
if ($v->getOption('connect_id') == $robot_id) {
return new ZMRobot($v);
}
}
throw new RobotNotFoundException("机器人 " . $robot_id . " 未连接到框架!");
throw new RobotNotFoundException('机器人 ' . $robot_id . ' 未连接到框架!');
}
/**
* @return ZMRobot
* @throws RobotNotFoundException
* @return ZMRobot
*/
public static function getRandom()
{
$r = ManagerGM::getAllByName('qq');
if ($r == []) throw new RobotNotFoundException("没有任何机器人连接到框架!");
if ($r == []) {
throw new RobotNotFoundException('没有任何机器人连接到框架!');
}
return new ZMRobot($r[array_rand($r)]);
}
@@ -66,11 +80,6 @@ class OneBotV11
return $obj;
}
public function __construct(ConnectionObject $connection)
{
$this->connection = $connection;
}
public function setCallback($callback = true)
{
$this->callback = $callback;
@@ -92,11 +101,10 @@ class OneBotV11
/**
* 发送私聊消息
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#send_private_msg-%E5%8F%91%E9%80%81%E7%A7%81%E8%81%8A%E6%B6%88%E6%81%AF
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#send_private_msg-%E5%8F%91%E9%80%81%E7%A7%81%E8%81%8A%E6%B6%88%E6%81%AF
* @param $user_id
* @param $message
* @param bool $auto_escape
* @return array|bool|null
* @return null|array|bool
*/
public function sendPrivateMsg($user_id, $message, bool $auto_escape = false)
{
@@ -105,18 +113,17 @@ class OneBotV11
'params' => [
'user_id' => $user_id,
'message' => $message,
'auto_escape' => $auto_escape
]
'auto_escape' => $auto_escape,
],
], $this->callback);
}
/**
* 发送群消息
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#send_group_msg-%E5%8F%91%E9%80%81%E7%BE%A4%E6%B6%88%E6%81%AF
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#send_group_msg-%E5%8F%91%E9%80%81%E7%BE%A4%E6%B6%88%E6%81%AF
* @param $group_id
* @param $message
* @param bool $auto_escape
* @return array|bool|null
* @return null|array|bool
*/
public function sendGroupMsg($group_id, $message, bool $auto_escape = false)
{
@@ -125,19 +132,18 @@ class OneBotV11
'params' => [
'group_id' => $group_id,
'message' => $message,
'auto_escape' => $auto_escape
]
'auto_escape' => $auto_escape,
],
], $this->callback);
}
/**
* 发送消息
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#send_msg-%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#send_msg-%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF
* @param $message_type
* @param $target_id
* @param $message
* @param bool $auto_escape
* @return array|bool|null
* @return null|array|bool
*/
public function sendMsg($message_type, $target_id, $message, bool $auto_escape = false)
{
@@ -147,65 +153,64 @@ class OneBotV11
'message_type' => $message_type,
($message_type == 'private' ? 'user' : $message_type) . '_id' => $target_id,
'message' => $message,
'auto_escape' => $auto_escape
]
'auto_escape' => $auto_escape,
],
], $this->callback);
}
/**
* 撤回消息
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#delete_msg-%E6%92%A4%E5%9B%9E%E6%B6%88%E6%81%AF
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#delete_msg-%E6%92%A4%E5%9B%9E%E6%B6%88%E6%81%AF
* @param $message_id
* @return array|bool|null
* @return null|array|bool
*/
public function deleteMsg($message_id)
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'message_id' => $message_id
]
'message_id' => $message_id,
],
], $this->callback);
}
/**
* 获取消息
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_msg-%E8%8E%B7%E5%8F%96%E6%B6%88%E6%81%AF
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_msg-%E8%8E%B7%E5%8F%96%E6%B6%88%E6%81%AF
* @param $message_id
* @return array|bool|null
* @return null|array|bool
*/
public function getMsg($message_id)
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'message_id' => $message_id
]
'message_id' => $message_id,
],
], $this->callback);
}
/**
* 获取合并转发消息
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_forward_msg-%E8%8E%B7%E5%8F%96%E5%90%88%E5%B9%B6%E8%BD%AC%E5%8F%91%E6%B6%88%E6%81%AF
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_forward_msg-%E8%8E%B7%E5%8F%96%E5%90%88%E5%B9%B6%E8%BD%AC%E5%8F%91%E6%B6%88%E6%81%AF
* @param $id
* @return array|bool|null
* @return null|array|bool
*/
public function getForwardMsg($id)
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'id' => $id
]
'id' => $id,
],
], $this->callback);
}
/**
* 发送好友赞
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#send_like-%E5%8F%91%E9%80%81%E5%A5%BD%E5%8F%8B%E8%B5%9E
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#send_like-%E5%8F%91%E9%80%81%E5%A5%BD%E5%8F%8B%E8%B5%9E
* @param $user_id
* @param int $times
* @return array|bool|null
* @return null|array|bool
*/
public function sendLike($user_id, int $times = 1)
{
@@ -213,18 +218,17 @@ class OneBotV11
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'user_id' => $user_id,
'times' => $times
]
'times' => $times,
],
], $this->callback);
}
/**
* 群组踢人
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_kick-%E7%BE%A4%E7%BB%84%E8%B8%A2%E4%BA%BA
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_kick-%E7%BE%A4%E7%BB%84%E8%B8%A2%E4%BA%BA
* @param $group_id
* @param $user_id
* @param bool $reject_add_request
* @return array|bool|null
* @return null|array|bool
*/
public function setGroupKick($group_id, $user_id, bool $reject_add_request = false)
{
@@ -233,18 +237,17 @@ class OneBotV11
'params' => [
'group_id' => $group_id,
'user_id' => $user_id,
'reject_add_request' => $reject_add_request
]
'reject_add_request' => $reject_add_request,
],
], $this->callback);
}
/**
* 群组单人禁言
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_ban-%E7%BE%A4%E7%BB%84%E5%8D%95%E4%BA%BA%E7%A6%81%E8%A8%80
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_ban-%E7%BE%A4%E7%BB%84%E5%8D%95%E4%BA%BA%E7%A6%81%E8%A8%80
* @param $group_id
* @param $user_id
* @param int $duration
* @return array|bool|null
* @return null|array|bool
*/
public function setGroupBan($group_id, $user_id, int $duration = 1800)
{
@@ -253,18 +256,17 @@ class OneBotV11
'params' => [
'group_id' => $group_id,
'user_id' => $user_id,
'duration' => $duration
]
'duration' => $duration,
],
], $this->callback);
}
/**
* 群组匿名用户禁言
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_anonymous_ban-%E7%BE%A4%E7%BB%84%E5%8C%BF%E5%90%8D%E7%94%A8%E6%88%B7%E7%A6%81%E8%A8%80
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_anonymous_ban-%E7%BE%A4%E7%BB%84%E5%8C%BF%E5%90%8D%E7%94%A8%E6%88%B7%E7%A6%81%E8%A8%80
* @param $group_id
* @param $anonymous_or_flag
* @param int $duration
* @return array|bool|null
* @return null|array|bool
*/
public function setGroupAnonymousBan($group_id, $anonymous_or_flag, int $duration = 1800)
{
@@ -273,17 +275,16 @@ class OneBotV11
'params' => [
'group_id' => $group_id,
(is_string($anonymous_or_flag) ? 'flag' : 'anonymous') => $anonymous_or_flag,
'duration' => $duration
]
'duration' => $duration,
],
], $this->callback);
}
/**
* 群组全员禁言
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_whole_ban-%E7%BE%A4%E7%BB%84%E5%85%A8%E5%91%98%E7%A6%81%E8%A8%80
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_whole_ban-%E7%BE%A4%E7%BB%84%E5%85%A8%E5%91%98%E7%A6%81%E8%A8%80
* @param $group_id
* @param bool $enable
* @return array|bool|null
* @return null|array|bool
*/
public function setGroupWholeBan($group_id, bool $enable = true)
{
@@ -291,18 +292,17 @@ class OneBotV11
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'group_id' => $group_id,
'enable' => $enable
]
'enable' => $enable,
],
], $this->callback);
}
/**
* 群组设置管理员
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_admin-%E7%BE%A4%E7%BB%84%E8%AE%BE%E7%BD%AE%E7%AE%A1%E7%90%86%E5%91%98
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_admin-%E7%BE%A4%E7%BB%84%E8%AE%BE%E7%BD%AE%E7%AE%A1%E7%90%86%E5%91%98
* @param $group_id
* @param $user_id
* @param bool $enable
* @return array|bool|null
* @return null|array|bool
*/
public function setGroupAdmin($group_id, $user_id, bool $enable = true)
{
@@ -311,17 +311,16 @@ class OneBotV11
'params' => [
'group_id' => $group_id,
'user_id' => $user_id,
'enable' => $enable
]
'enable' => $enable,
],
], $this->callback);
}
/**
* 群组匿名
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_anonymous-%E7%BE%A4%E7%BB%84%E5%8C%BF%E5%90%8D
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_anonymous-%E7%BE%A4%E7%BB%84%E5%8C%BF%E5%90%8D
* @param $group_id
* @param bool $enable
* @return array|bool|null
* @return null|array|bool
*/
public function setGroupAnonymous($group_id, bool $enable = true)
{
@@ -329,18 +328,17 @@ class OneBotV11
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'group_id' => $group_id,
'enable' => $enable
]
'enable' => $enable,
],
], $this->callback);
}
/**
* 设置群名片(群备注)
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_card-%E8%AE%BE%E7%BD%AE%E7%BE%A4%E5%90%8D%E7%89%87%E7%BE%A4%E5%A4%87%E6%B3%A8
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_card-%E8%AE%BE%E7%BD%AE%E7%BE%A4%E5%90%8D%E7%89%87%E7%BE%A4%E5%A4%87%E6%B3%A8
* @param $group_id
* @param $user_id
* @param string $card
* @return array|bool|null
* @return null|array|bool
*/
public function setGroupCard($group_id, $user_id, string $card = '')
{
@@ -349,17 +347,17 @@ class OneBotV11
'params' => [
'group_id' => $group_id,
'user_id' => $user_id,
'card' => $card
]
'card' => $card,
],
], $this->callback);
}
/**
* 设置群名
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_name-%E8%AE%BE%E7%BD%AE%E7%BE%A4%E5%90%8D
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_name-%E8%AE%BE%E7%BD%AE%E7%BE%A4%E5%90%8D
* @param $group_id
* @param $group_name
* @return array|bool|null
* @return null|array|bool
*/
public function setGroupName($group_id, $group_name)
{
@@ -367,17 +365,16 @@ class OneBotV11
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'group_id' => $group_id,
'group_name' => $group_name
]
'group_name' => $group_name,
],
], $this->callback);
}
/**
* 退出群组
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_leave-%E9%80%80%E5%87%BA%E7%BE%A4%E7%BB%84
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_leave-%E9%80%80%E5%87%BA%E7%BE%A4%E7%BB%84
* @param $group_id
* @param bool $is_dismiss
* @return array|bool|null
* @return null|array|bool
*/
public function setGroupLeave($group_id, bool $is_dismiss = false)
{
@@ -385,21 +382,19 @@ class OneBotV11
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'group_id' => $group_id,
'is_dismiss' => $is_dismiss
]
'is_dismiss' => $is_dismiss,
],
], $this->callback);
}
/**
* 设置群组专属头衔
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_special_title-%E8%AE%BE%E7%BD%AE%E7%BE%A4%E7%BB%84%E4%B8%93%E5%B1%9E%E5%A4%B4%E8%A1%94
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_special_title-%E8%AE%BE%E7%BD%AE%E7%BE%A4%E7%BB%84%E4%B8%93%E5%B1%9E%E5%A4%B4%E8%A1%94
* @param $group_id
* @param $user_id
* @param string $special_title
* @param int $duration
* @return array|bool|null
* @return null|array|bool
*/
public function setGroupSpecialTitle($group_id, $user_id, string $special_title = "", int $duration = -1)
public function setGroupSpecialTitle($group_id, $user_id, string $special_title = '', int $duration = -1)
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__),
@@ -407,41 +402,37 @@ class OneBotV11
'group_id' => $group_id,
'user_id' => $user_id,
'special_title' => $special_title,
'duration' => $duration
]
'duration' => $duration,
],
], $this->callback);
}
/**
* 处理加好友请求
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_friend_add_request-%E5%A4%84%E7%90%86%E5%8A%A0%E5%A5%BD%E5%8F%8B%E8%AF%B7%E6%B1%82
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_friend_add_request-%E5%A4%84%E7%90%86%E5%8A%A0%E5%A5%BD%E5%8F%8B%E8%AF%B7%E6%B1%82
* @param $flag
* @param bool $approve
* @param string $remark
* @return array|bool|null
* @return null|array|bool
*/
public function setFriendAddRequest($flag, bool $approve = true, string $remark = "")
public function setFriendAddRequest($flag, bool $approve = true, string $remark = '')
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'flag' => $flag,
'approve' => $approve,
'remark' => $remark
]
'remark' => $remark,
],
], $this->callback);
}
/**
* 处理加群请求/邀请
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_add_request-%E5%A4%84%E7%90%86%E5%8A%A0%E7%BE%A4%E8%AF%B7%E6%B1%82%E9%82%80%E8%AF%B7
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_group_add_request-%E5%A4%84%E7%90%86%E5%8A%A0%E7%BE%A4%E8%AF%B7%E6%B1%82%E9%82%80%E8%AF%B7
* @param $flag
* @param $sub_type
* @param bool $approve
* @param string $reason
* @return array|bool|null
* @return null|array|bool
*/
public function setGroupAddRequest($flag, $sub_type, bool $approve = true, string $reason = "")
public function setGroupAddRequest($flag, $sub_type, bool $approve = true, string $reason = '')
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__),
@@ -449,15 +440,15 @@ class OneBotV11
'flag' => $flag,
'sub_type' => $sub_type,
'approve' => $approve,
'reason' => $reason
]
'reason' => $reason,
],
], $this->callback);
}
/**
* 获取登录号信息
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_login_info-%E8%8E%B7%E5%8F%96%E7%99%BB%E5%BD%95%E5%8F%B7%E4%BF%A1%E6%81%AF
* @return array|bool|null
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_login_info-%E8%8E%B7%E5%8F%96%E7%99%BB%E5%BD%95%E5%8F%B7%E4%BF%A1%E6%81%AF
* @return null|array|bool
*/
public function getLoginInfo()
{
@@ -466,10 +457,9 @@ class OneBotV11
/**
* 获取陌生人信息
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_stranger_info-%E8%8E%B7%E5%8F%96%E9%99%8C%E7%94%9F%E4%BA%BA%E4%BF%A1%E6%81%AF
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_stranger_info-%E8%8E%B7%E5%8F%96%E9%99%8C%E7%94%9F%E4%BA%BA%E4%BF%A1%E6%81%AF
* @param $user_id
* @param bool $no_cache
* @return array|bool|null
* @return null|array|bool
*/
public function getStrangerInfo($user_id, bool $no_cache = false)
{
@@ -477,29 +467,28 @@ class OneBotV11
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'user_id' => $user_id,
'no_cache' => $no_cache
]
'no_cache' => $no_cache,
],
], $this->callback);
}
/**
* 获取好友列表
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_friend_list-%E8%8E%B7%E5%8F%96%E5%A5%BD%E5%8F%8B%E5%88%97%E8%A1%A8
* @return array|bool|null
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_friend_list-%E8%8E%B7%E5%8F%96%E5%A5%BD%E5%8F%8B%E5%88%97%E8%A1%A8
* @return null|array|bool
*/
public function getFriendList()
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__)
'action' => $this->getActionName($this->prefix, __FUNCTION__),
], $this->callback);
}
/**
* 获取群信息
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_group_info-%E8%8E%B7%E5%8F%96%E7%BE%A4%E4%BF%A1%E6%81%AF
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_group_info-%E8%8E%B7%E5%8F%96%E7%BE%A4%E4%BF%A1%E6%81%AF
* @param $group_id
* @param bool $no_cache
* @return array|bool|null
* @return null|array|bool
*/
public function getGroupInfo($group_id, bool $no_cache = false)
{
@@ -507,30 +496,29 @@ class OneBotV11
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'group_id' => $group_id,
'no_cache' => $no_cache
]
'no_cache' => $no_cache,
],
], $this->callback);
}
/**
* 获取群列表
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_group_list-%E8%8E%B7%E5%8F%96%E7%BE%A4%E5%88%97%E8%A1%A8
* @return array|bool|null
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_group_list-%E8%8E%B7%E5%8F%96%E7%BE%A4%E5%88%97%E8%A1%A8
* @return null|array|bool
*/
public function getGroupList()
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__)
'action' => $this->getActionName($this->prefix, __FUNCTION__),
], $this->callback);
}
/**
* 获取群成员信息
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_group_member_info-%E8%8E%B7%E5%8F%96%E7%BE%A4%E6%88%90%E5%91%98%E4%BF%A1%E6%81%AF
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_group_member_info-%E8%8E%B7%E5%8F%96%E7%BE%A4%E6%88%90%E5%91%98%E4%BF%A1%E6%81%AF
* @param $group_id
* @param $user_id
* @param bool $no_cache
* @return array|bool|null
* @return null|array|bool
*/
public function getGroupMemberInfo($group_id, $user_id, bool $no_cache = false)
{
@@ -539,33 +527,33 @@ class OneBotV11
'params' => [
'group_id' => $group_id,
'user_id' => $user_id,
'no_cache' => $no_cache
]
'no_cache' => $no_cache,
],
], $this->callback);
}
/**
* 获取群成员列表
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_group_member_list-%E8%8E%B7%E5%8F%96%E7%BE%A4%E6%88%90%E5%91%98%E5%88%97%E8%A1%A8
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_group_member_list-%E8%8E%B7%E5%8F%96%E7%BE%A4%E6%88%90%E5%91%98%E5%88%97%E8%A1%A8
* @param $group_id
* @return array|bool|null
* @return null|array|bool
*/
public function getGroupMemberList($group_id)
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'group_id' => $group_id
]
'group_id' => $group_id,
],
], $this->callback);
}
/**
* 获取群荣誉信息
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_group_honor_info-%E8%8E%B7%E5%8F%96%E7%BE%A4%E8%8D%A3%E8%AA%89%E4%BF%A1%E6%81%AF
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_group_honor_info-%E8%8E%B7%E5%8F%96%E7%BE%A4%E8%8D%A3%E8%AA%89%E4%BF%A1%E6%81%AF
* @param $group_id
* @param $type
* @return array|bool|null
* @return null|array|bool
*/
public function getGroupHonorInfo($group_id, $type)
{
@@ -573,45 +561,44 @@ class OneBotV11
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'group_id' => $group_id,
'type' => $type
]
'type' => $type,
],
], $this->callback);
}
/**
* 获取 CSRF Token
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_csrf_token-%E8%8E%B7%E5%8F%96-csrf-token
* @return array|bool|null
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_csrf_token-%E8%8E%B7%E5%8F%96-csrf-token
* @return null|array|bool
*/
public function getCsrfToken()
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__)
'action' => $this->getActionName($this->prefix, __FUNCTION__),
], $this->callback);
}
/**
* 获取 QQ 相关接口凭证
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_credentials-%E8%8E%B7%E5%8F%96-qq-%E7%9B%B8%E5%85%B3%E6%8E%A5%E5%8F%A3%E5%87%AD%E8%AF%81
* @param string $domain
* @return array|bool|null
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_credentials-%E8%8E%B7%E5%8F%96-qq-%E7%9B%B8%E5%85%B3%E6%8E%A5%E5%8F%A3%E5%87%AD%E8%AF%81
* @return null|array|bool
*/
public function getCredentials(string $domain = "")
public function getCredentials(string $domain = '')
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'domain' => $domain
]
'domain' => $domain,
],
], $this->callback);
}
/**
* 获取语音
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_record-%E8%8E%B7%E5%8F%96%E8%AF%AD%E9%9F%B3
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_record-%E8%8E%B7%E5%8F%96%E8%AF%AD%E9%9F%B3
* @param $file
* @param $out_format
* @return array|bool|null
* @return null|array|bool
*/
public function getRecord($file, $out_format)
{
@@ -619,109 +606,107 @@ class OneBotV11
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'file' => $file,
'out_format' => $out_format
]
'out_format' => $out_format,
],
], $this->callback);
}
/**
* 获取图片
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_image-%E8%8E%B7%E5%8F%96%E5%9B%BE%E7%89%87
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_image-%E8%8E%B7%E5%8F%96%E5%9B%BE%E7%89%87
* @param $file
* @return array|bool|null
* @return null|array|bool
*/
public function getImage($file)
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'file' => $file
]
'file' => $file,
],
], $this->callback);
}
/**
* 检查是否可以发送图片
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#can_send_image-%E6%A3%80%E6%9F%A5%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%8F%91%E9%80%81%E5%9B%BE%E7%89%87
* @return array|bool|null
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#can_send_image-%E6%A3%80%E6%9F%A5%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%8F%91%E9%80%81%E5%9B%BE%E7%89%87
* @return null|array|bool
*/
public function canSendImage()
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__)
'action' => $this->getActionName($this->prefix, __FUNCTION__),
], $this->callback);
}
/**
* 检查是否可以发送语音
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#can_send_record-%E6%A3%80%E6%9F%A5%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%8F%91%E9%80%81%E8%AF%AD%E9%9F%B3
* @return array|bool|null
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#can_send_record-%E6%A3%80%E6%9F%A5%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%8F%91%E9%80%81%E8%AF%AD%E9%9F%B3
* @return null|array|bool
*/
public function canSendRecord()
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__)
'action' => $this->getActionName($this->prefix, __FUNCTION__),
], $this->callback);
}
/**
* 获取运行状态
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_status-%E8%8E%B7%E5%8F%96%E8%BF%90%E8%A1%8C%E7%8A%B6%E6%80%81
* @return array|bool|null
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_status-%E8%8E%B7%E5%8F%96%E8%BF%90%E8%A1%8C%E7%8A%B6%E6%80%81
* @return null|array|bool
*/
public function getStatus()
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__)
'action' => $this->getActionName($this->prefix, __FUNCTION__),
], $this->callback);
}
/**
* 获取版本信息
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_version_info-%E8%8E%B7%E5%8F%96%E7%89%88%E6%9C%AC%E4%BF%A1%E6%81%AF
* @return array|bool|null
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#get_version_info-%E8%8E%B7%E5%8F%96%E7%89%88%E6%9C%AC%E4%BF%A1%E6%81%AF
* @return null|array|bool
*/
public function getVersionInfo()
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__)
'action' => $this->getActionName($this->prefix, __FUNCTION__),
], $this->callback);
}
/**
* 重启 OneBot 实现
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_restart-%E9%87%8D%E5%90%AF-onebot-%E5%AE%9E%E7%8E%B0
* @param int $delay
* @return array|bool|null
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#set_restart-%E9%87%8D%E5%90%AF-onebot-%E5%AE%9E%E7%8E%B0
* @return null|array|bool
*/
public function setRestart(int $delay = 0)
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__),
'params' => [
'delay' => $delay
]
'delay' => $delay,
],
], $this->callback);
}
/**
* 清理缓存
* @link https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#clean_cache-%E6%B8%85%E7%90%86%E7%BC%93%E5%AD%98
* @return array|bool|null
* @see https://github.com/howmanybots/onebot/blob/master/v11/specs/api/public.md#clean_cache-%E6%B8%85%E7%90%86%E7%BC%93%E5%AD%98
* @return null|array|bool
*/
public function cleanCache()
{
return $this->processAPI($this->connection, [
'action' => $this->getActionName($this->prefix, __FUNCTION__)
'action' => $this->getActionName($this->prefix, __FUNCTION__),
], $this->callback);
}
/**
* 获取内置支持的扩展API对象
* 现支持 go-cqhttp 的扩展API
* @param string $package_name
* @return mixed
* @throws ZMKnownException
* @return mixed
*/
public function getExtendedAPI(string $package_name = 'go-cqhttp')
{
@@ -730,16 +715,15 @@ class OneBotV11
];
if (isset($table[$package_name])) {
return new $table[$package_name]($this->connection, $this->callback, $this->prefix);
} else {
throw new ZMKnownException(zm_internal_errcode('E00071'), '无法找到对应的调用扩展类');
}
throw new ZMKnownException(zm_internal_errcode('E00071'), '无法找到对应的调用扩展类');
}
public function callExtendedAPI($action, $params = [])
{
return $this->processAPI($this->connection, [
'action' => $action,
'params' => $params
'params' => $params,
], $this->callback);
}
}
}

View File

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

View File

@@ -1,17 +1,14 @@
<?php /** @noinspection PhpMissingReturnTypeInspection */
/** @noinspection PhpUnused */
<?php
declare(strict_types=1);
namespace ZM\API;
/**
* Class ZMRobot
* @package ZM\Utils
* @since 1.2
* @version V11
*/
class ZMRobot extends OneBotV11
{
}