From 60f5ebb9971005d993a311ae3f15a8c5d6aab830 Mon Sep 17 00:00:00 2001 From: hellcat <> Date: Fri, 18 Jul 2025 17:34:39 +0800 Subject: [PATCH] no message --- .../Controllers/Api/TG/HookController.php | 35 +-- app/Models/Article.php | 1 + app/Models/DogOption.php | 2 +- app/Services/TG/Hook/Mod/Base.php | 11 +- app/Services/TG/Hook/Mod/DOG.php | 272 ++++++++++++++++-- app/Services/TG/Hook/Mod/Hub.php | 2 + app/Services/TG/Http.php | 51 ++++ 7 files changed, 332 insertions(+), 42 deletions(-) diff --git a/app/Http/Controllers/Api/TG/HookController.php b/app/Http/Controllers/Api/TG/HookController.php index 841e07a..6e664c0 100755 --- a/app/Http/Controllers/Api/TG/HookController.php +++ b/app/Http/Controllers/Api/TG/HookController.php @@ -70,23 +70,24 @@ final class HookController $sClassPath = "App\\Services\\TG\\Hook\\Mod\\".$sClass; // if (method_exists($sClassPath, $sFunc)) { - $oInstans = new $sClassPath(); - $r = $oInstans->$sFunc($aParams); + $oInstans = new $sClassPath(); + $r = $oInstans->$sFunc($aParams); + $oTGHttp->send($r, $aUpdate); // 可以不返回,里面直接send - if (isset($r)) { - if (empty($r)) { $r = 'hook的mod返回空'; } - // 返回可以是数组 - if (is_array($r)) { - foreach ($r as $row) { - $oTGHttp->sendToTG($row, $aUpdate); - } - } else { - $oTGHttp->sendToTG($r, $aUpdate); - } - - Http::response(200); - } +// if (isset($r)) { +// if (empty($r)) { $r = 'hook的mod返回空'; } +// // 返回可以是数组 +// if (is_array($r)) { +// foreach ($r as $row) { +// $oTGHttp->sendToTG($row, $aUpdate); +// } +// } else { +// $oTGHttp->sendToTG($r, $aUpdate); +// } +// +// Http::response(200); +// } // } else { // throw new \Exception("没有这个方法:".$sClass.'#'.$sFunc); @@ -95,9 +96,9 @@ final class HookController } catch (\Throwable $e) { $sMessage = "错误(文件: " . $e->getFile() . ",行: " . $e->getLine() . "): " . $e->getMessage(); - $oTGHttp->sendToTG($sMessage, $aUpdate); + $oTGHttp->send($sMessage, $aUpdate); - Http::response(200, 'error'); +// Http::response(200, 'error'); } } diff --git a/app/Models/Article.php b/app/Models/Article.php index 30fc4e9..ef07038 100755 --- a/app/Models/Article.php +++ b/app/Models/Article.php @@ -7,4 +7,5 @@ use Illuminate\Database\Eloquent\Model; class Article extends Model { protected $table = 'article'; + protected $hidden = ['updated_at', 'created_at']; } diff --git a/app/Models/DogOption.php b/app/Models/DogOption.php index 1100096..e5b5b51 100755 --- a/app/Models/DogOption.php +++ b/app/Models/DogOption.php @@ -26,7 +26,7 @@ class DogOption extends Model public static function _filter($oOption) { $arr = []; - $arr[$oOption->this_name."#".$oOption->k] = $oOption->v; + $arr[$oOption->dog_name."#".$oOption->k] = $oOption->v; return $arr; } diff --git a/app/Services/TG/Hook/Mod/Base.php b/app/Services/TG/Hook/Mod/Base.php index fb7484d..6820d65 100644 --- a/app/Services/TG/Hook/Mod/Base.php +++ b/app/Services/TG/Hook/Mod/Base.php @@ -42,7 +42,16 @@ class Base { public function toJson($aData) { - return json_encode($aData, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + $json = json_encode($aData, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); + +// if ($sMsg) { +// $sMsg = $sMsg."\n\n"; +// } + + $str = $json; + + return $str; +// return json_encode($aData, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); } public function urlFormat($sUrl) diff --git a/app/Services/TG/Hook/Mod/DOG.php b/app/Services/TG/Hook/Mod/DOG.php index 0d3554d..7074182 100644 --- a/app/Services/TG/Hook/Mod/DOG.php +++ b/app/Services/TG/Hook/Mod/DOG.php @@ -6,10 +6,13 @@ namespace App\Services\TG\Hook\Mod; use App\Models\Me as ModelMe; use App\Models\DogOption as ModelDogOption; +use App\Models\Option as ModelOption; +// $this->oDog->_setDogName("hub"); // 必须,me用,option用 // $this->oDog->_setPrimaryKey("id"); // 可选,默认id // $this->oDog->_setStrField(["content"]); // 可选,指定长文本字段 -// $this->oDog->_setDogName("hub"); // 必须,me用,option用 +// $this->oDog->_setInFormat(["type"]); // 可选,zero^int,^date,^dateFull +// $this->oDog->_setOutFormat(["time" => "date"]); // 可选,date,dateFull class DOG extends Base { @@ -17,13 +20,13 @@ class DOG extends Base { public $sPrimaryKey = "id"; public $iStrMaxLen = 50; public $aStrField = []; + public $inFormat = []; + public $outFormat = []; public $sDogName; public function __construct($oModelSelf = false) { - $this->_setModel($oModelSelf); - } //// 定义系列 @@ -52,6 +55,20 @@ class DOG extends Base { { $this->sPrimaryKey = $key; } + + public function _setInFormat($aInFormat) + { + $this->aInFormat = $aInFormat; + } + + public function _setOutFormat($aOutFormat) + { + $this->aOutFormat = $aOutFormat; + } +// public function _setFormatField($aFormatField) +// { +// $this->aFormatField = $aFormatField; +// } //// 定义系列 end //// option 系列 @@ -81,7 +98,7 @@ class DOG extends Base { } $oOption = new ModelDogOption(); - $oOption->this_name = $this->sDogName; + $oOption->dog_name = $this->sDogName; $oOption->k = $k; $oOption->v = $v; $oOption->save(); @@ -106,7 +123,7 @@ class DOG extends Base { return "需要v"; } - $oOption = ModelDogOption::where("this_name", $this->sDogName)->where("k", $k)->first(); + $oOption = ModelDogOption::where("dog_name", $this->sDogName)->where("k", $k)->first(); if (!$oOption) { return "没找到这个"; @@ -131,7 +148,7 @@ class DOG extends Base { return "需要k"; } - $oOption = ModelDogOption::where("this_name", $this->sDogName)->where("k", $k)->first(); + $oOption = ModelDogOption::where("dog_name", $this->sDogName)->where("k", $k)->first(); if (!$oOption) { return "没找到这个"; @@ -254,15 +271,42 @@ class DOG extends Base { return $input; } - public function list() + public function list($aParam) { + return $this->page($aParam); + } + + public function limit($aParam) + { + if (($aParam["aArg"][1] ?? false) == "?") { + return "#limit {skip} {take}"; + } - $oSelf = $this->oModelSelf->all(); + $iSkip = $aParam["aArg"][1] ?? 0; + $iTake = $aParam["aArg"][2] ?? false; - $oSelf = $this->filterList($oSelf); + if (!$iTake) { + $iTake = ModelOption::_hit("dog_limit"); + } + + if (!$iTake) { + return "需要option表里的dog_limit"; + } + + $oSelf = $this->oModelSelf->skip($iSkip)->take($iTake)->get(); return $this->toJson($oSelf); } + + public function page($aParam) + { + $iPage = $aParam["aArg"][1] ?? 1; + + $aParam = []; + $aParam["aOption"][2] = $iPage; + + return $this->find($aParam); + } public function add($aParam) { @@ -330,30 +374,46 @@ class DOG extends Base { return $this->find($aParam); } + private function _getLimit() + { + $iLimit = ModelDogOption::_hit($this->sDogName, "limit"); + + if (!$iLimit) { + $iLimit = ModelOption::_hit("dog_limit"); + } + + return $iLimit; + } + public function find($aParam) { $sField = $aParam["aOption"][1] ?? $this->sPrimaryKey; $sValue = $aParam["aArg"][1] ?? false; + $iPage = $aParam["aOption"][2] ?? 1; $isLike = $aParam["is_like"] ?? false; $sHitField = $aParam["sHitField"] ?? false; if ($sValue == "?") { - return "#find__{field?primaryKey} {value}"; + return "#find__{field?primaryKey}__{page?1} {value?all}"; } - if (!$sValue) { - return "需要value"; - } + $iLimit = $this->_getLimit(); - if (!$sField) { - return "需要field"; - } - - if ($isLike === true) { - $oSelf = $this->oModelSelf->where($sField, "like", "%".$sValue."%")->get(); + if ($sValue === false ) { + + $oSelf = $this->oModelSelf; + + } else if ($isLike === true) { + + $oSelf = $this->oModelSelf->where($sField, "like", "%".$sValue."%"); + } else { - $oSelf = $this->oModelSelf->where($sField, $sValue)->get(); + + $oSelf = $this->oModelSelf->where($sField, $sValue); + } + + $oSelf = $oSelf->paginate($iLimit, ['*'], 'page', $iPage); if ($oSelf->isEmpty()) { return "没找到这个"; @@ -361,10 +421,117 @@ class DOG extends Base { // hit必然单体 if ($sHitField) { - return $oSelf[0]->$sHitField; + return $oSelf->items()[0]->$sHitField; } - return $this->toJson($this->filterList($oSelf)); + $aData = $this->toDataList($oSelf); + + return $this->toJson($aData); + } + + + private function toDataList($oSelf) + { + $aSelf = $oSelf->toArray(); + + $aMsg = []; + + // 说明是分页 + if (isset($aSelf["data"])) { + $aData = $aSelf["data"]; + } else { + $aData = $aSelf; + } + + $iCount = $aSelf["total"] ?? 0; + $iPagePer = $aSelf["per_page"] ?? 0; + $iPage = $aSelf["current_page"] ?? 0; + $iPageTotal = $aSelf["last_page"] ?? 0; + + if ($iPageTotal > 1) { + if ($iPage) { + $aMsg["页"]["页当前"] = $iPage; + } + + if ($iPageTotal) { + $aMsg["页"]["页总数"] = $iPageTotal; + } + + if ($iPagePer) { + $aMsg["页"]["行每页"] = $iPagePer; + } + + if ($iCount) { + $aMsg["页"]["行总数"] = $iCount; + } + } + + $aData = $this->filterDataList($aData); + $aData = $this->dataInsterMsgList($aData, $aMsg); + + return $aData; + } + + private function dataInsterMsgList($aData, $aMsg) + { + if ($aMsg) { + array_unshift($aData, $aMsg); + } + + return $aData; + } + + private function dataInsterMsg($aData, $aMsg) + { + $aDataNew = []; + + if ($aMsg) { + $aDataNew[] = $aMsg; + $aDataNew[] = $aData; + } else { + $aDataNew = $aData; + } + + return $aDataNew; + } + + private function toData($oSelf) + { + if (!is_array($oSelf)) { + $aData = $oSelf->toArray(); + } else { + $aData = $oSelf; + } + + $aData = $this->filterData($aData); + + return $aData; + } + + private function filterDataList($aData) + { + foreach ($aData as &$aDataRow) { + $aDataRow = $this->filterData($aDataRow); + } + + return $aData; + } + + private function filterData($aData) + { + foreach ($this->aStrField as $sStrField) { + $aData[$sStrField] = $this->subStr($aData[$sStrField]); + } + + foreach ($this->aOutFormat as $sFormatField => $sFormatType) { + if ($sFormatType == "date") { + $aData[$sFormatField] = date("Y-m-d", (int) $aData[$sFormatField]); + } else if ($sFormatType == "dateFull") { + $aData[$sFormatField] = date("Y-m-d", (int) $aData[$sFormatField]); + } + } + + return $aData; } public function kv($aParam) @@ -438,6 +605,7 @@ class DOG extends Base { $aJson = json_decode($sJson, true); foreach ($aJson as $k => $v) { + $v = $this->inFormat($k, $v); $oModelSelf->$k = $v; } @@ -449,6 +617,28 @@ class DOG extends Base { return $this->find($aParam); } + public function jsonGet($aParam) + { + $sWhereValue = $aParam["aArg"][1] ?? false; + $sWhereField = $aParam["aOption"][1] ?? $this->sPrimaryKey; + + if ($sWhereValue == "?") { + return "#jsonGet__{whereFile?primary} {whereValue}"; + } + + if (!$sWhereValue) { + return "需要whereValue"; + } + + $oSelf = $this->oModelSelf->where($sWhereField, $sWhereValue)->first(); + + if (!$oSelf) { + return "没找到这个"; + } + + return $this->toJson($oSelf); + } + public function likeSet($aParam) { if (($aParam["aArg"][1] ?? false) == "?") { @@ -523,7 +713,7 @@ class DOG extends Base { $sSelfStr = $this->toJson($oSelf); - return $sMsg.'\n\n'.$sSelfStr; + return $sMsg."\n\n".$sSelfStr; } } else { @@ -534,6 +724,7 @@ class DOG extends Base { return "没找到这个"; } + $sSetValue = $this->inFormat($sSetField, $sSetValue); $i = 0; foreach ($oSelf as $oSelfRow) { $oSelfRow->$sSetField = $sSetValue; @@ -551,6 +742,41 @@ class DOG extends Base { return "影响".$i."条数据"; } + private function inFormat($sSetField, $sSetValue) { + + if (in_array($sSetField, $this->aInFormat)) { + $sSetValue = $this->mapInFormat($sSetValue); + } + + return $sSetValue; + } + + private function mapInFormat($sValue) + { + $aValue = explode("^", $sValue, 2); + + if (!isset($aValue[1])) { + return $sValue; + } + + $sValueQian = $aValue[0]; + $sValueHou = $aValue[1]; + + if ($sValueHou == "int") { + + if ($sValueQian == "zero") { + $sValueQian = 0; + } + + } else if ($sValueHou == "dayToDate") { + + $sValueQian = date("Y-m-d H:i:s", strtotime("+{$sValueQian} days")); + + } + + return $sValueQian; + } + public function delDone($aParam) { $aParam["is_done"] = true; diff --git a/app/Services/TG/Hook/Mod/Hub.php b/app/Services/TG/Hook/Mod/Hub.php index a24bc51..0c9dbd3 100644 --- a/app/Services/TG/Hook/Mod/Hub.php +++ b/app/Services/TG/Hook/Mod/Hub.php @@ -15,6 +15,8 @@ class Hub extends Base { // $this->oDDT->_setPrimaryKey("id"); // 可选,默认id // $this->oDDT->_setStrField(["content"]); // 可选,指定长文本字段 $this->oDog->_setDogName("hub"); // 必须 + $this->oDog->_setInFormat(["user_name"]); + $this->oDog->_setOutFormat(["user_name" => "date"]); } diff --git a/app/Services/TG/Http.php b/app/Services/TG/Http.php index 589ab54..b39695d 100644 --- a/app/Services/TG/Http.php +++ b/app/Services/TG/Http.php @@ -1,6 +1,7 @@ sApiChatId = env('telegram_chatid'); } + public function send($sMsg = "msg空", $aUpdate = []) + { + + $bSendTg = true; + + $sShell = $aUpdate["shell"] ?? false; + $bIsDove = $aUpdate["is_dove"] ?? false; + + if ($sShell == "cmd") { + $bSendTg = false; + } + + if ($bIsDove == true) { + $bSendTg = false; + } + + if (env("is_loc") == true) { + $bSendTg = false; + } + + if (is_array($sMsg)) { + foreach ($sMsg as $sMsgRow) { + if ($bSendTg) { + $this->sendTg($sMsgRow); + } else { + echo $sMsgRow; + } + } + } else { + if ($bSendTg) { + $this->sendTg($sMsg); + } else { + echo $sMsg; + } + } + + if ($bSendTg) { + Http::response(200); + } else { + exit; + } + + } + + private function sendTg($sMsg) + { + $url = "https://api.telegram.org/bot$this->sApiToken/sendMessage?chat_id=$this->sApiChatId&text=" . urlencode($sMsg); + file_get_contents($url); + } + public function sendToTG($sMsg, $aUpdate = []) {