sBotCode = $sBotCode; $oInstance->sChatCode = $sChatCode; $oInstance->enableSend = filter_var($_ENV["tg_send_enable"] ?? true, FILTER_VALIDATE_BOOLEAN); return $oInstance; } // new public static function log(string $sChatCode = 'admin'): self { return self::start("log", $sChatCode); } // new public static function warn(string $sChatCode = 'admin'): self { return self::start("warn", $sChatCode); } // new public static function fail(string $sChatCode = 'admin'): self { return self::start("fail", $sChatCode); } // new public static function notify(string $sChatCode = 'admin'): self { return self::start("fail", $sChatCode); } // opt public function enableAsync(bool $b = true): self { $this->enableAsync = $b; return $this; } // opt public function enableDetail(bool $b = true): self { $this->enableDetail = $b; return $this; } // opt public function enableSlaveQueue(bool $b = true): self { $this->enableSlaveQueue = $b; return $this; } // opt public function enableMaster(bool $b = true): self { $this->enableMaster = $b; return $this; } // opt public function enableMasterQueue(bool $b = true): self { $this->enableMasterQueue = $b; return $this; } // set public function setPhotoUrl(string $sPhotoUrl, int $iWidth = 0, int $iHeight = 0): self { $this->sPhotoUrl = $sPhotoUrl; $this->iPhotoWidth = $iWidth; $this->iPhotoHeight = $iHeight; return $this; } // set public function setFileUrl(string $sFileUrl, string $sFileName = ''): self { $this->sFileUrl = $sFileUrl; $this->sFileName = $sFileName; return $this; } // set public function setType(string $sType): self { $this->sType = $sType; return $this; } // set public function setMsgS(string $sMsg = ''): self { if ($this->enableDetail) { $sMsg = "[ ".$this->getEnvSiteCode()." | ".date("d:H:i:s")." ] ".$sMsg; } $this->sMsg = $sMsg; return $this; } // set public function setMsgA(array $aMsg = []): self { $aMsgNew = $aMsg; if ($this->enableDetail) { $aMsgNew = []; $aMsgNew["site_code"] = $this->getEnvSiteCode(); $aMsgNew["date"] = date("Y-m-d H:i:s"); $aMsgNew["data"] = $aMsg; } $this->sMsg = json_encode($aMsgNew, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); return $this; } // set public function setBotCode(string $sBotCode): self { $this->sBotCode = $sBotCode; return $this; } // set public function setChatCode(string $sChatCode): self { $this->sChatCode = $sChatCode; return $this; } // set public function setBotToken(string $sBotToken): self { $this->sBotToken = $sBotToken; return $this; } // set public function setChatId(int $iChatId): self { $this->iChatId = $iChatId; return $this; } // action public function send($xMsg = ''): Flow { if ($this->enableSend == false) { $oFlow = Flow::start(); return $oFlow->done("不发送"); } if ($xMsg) { if (is_array($xMsg)) { $this->setMsgA($xMsg); } else { $this->setMsgS($xMsg); } } if (!$this->sMsg) { // throw new \Exception("未设置msg"); } if ($this->enableMaster) { $oFlow = $this->_send_master(); } else { $oFlow = $this->_send_local(); } return $oFlow; } // action public function sendMaster($xMsg = ''): Flow { $this->enableMaster(true); return $this->send($xMsg); } // action public function sendLocal($xMsg = ''): Flow { $this->enableMaster(false); return $this->send($xMsg); } private function _send_master(): Flow { $aData = $this->buildDataTom(); if ($this->enableSlaveQueue) { $oFlow = ServiceHttpQueue::start("telegram_master")->arg($aData)->save(); } else { $oFlow = Flow::start("_send_master"); $sUrlMaSterBase = $_ENV["url_master_base"] ?? ""; if (!$sUrlMaSterBase) { throw new \Exception("未设置env的url_master_base"); } $sUrlMasterPost = "https://".$sUrlMaSterBase."/api/telegram/post"; try { $oHttpV2 = HttpV2::make($sUrlMasterPost); if ($this->enableAsync) { $oHttpV2 = $oHttpV2->enableAsync(); } $r = $oHttpV2->enableJsonAs()->setData($aData)->send(); if ($this->enableAsync) { return $oFlow->sData("async")->done("async"); } else { $a = json_decode($r, true); $isDone = $a["isDone"] ?? false; if ($isDone) { return $oFlow->done(); } else { return $oFlow->fail($r); } } } catch (\Throwable $e) { $oFlow = $oFlow->fail($e->getMessage()); } } return $oFlow; } // 直接从本地发到tg,几乎用不上,都走master了 private function _send_local(): Flow { if ($this->enableSlaveQueue) { $aData = $this->buildDataTom(); $oFlow = ServiceHttpQueue::start("telegram_local")->arg($aData)->save(); } else { $oFlow = ServiceTelegramSdk::start($this->sBotToken, $this->iChatId)->setMsgS($this->sMsg)->send(); } return $oFlow; } private function buildDataTom(): array { return [ "sBotCode" => $this->sBotCode ?? '', "sChatCode" => $this->sChatCode ?? '', "sBotToken" => $this->sBotToken ?? '', "iChatId" => $this->iChatId ?? '', "enableMasterQueue" => $this->enableMasterQueue ?? '', "enableMaster" => $this->enableMaster, "sMsg" => $this->sMsg ?? '', "sPhotoUrl" => $this->sPhotoUrl ?? '', "iPhotoWidth" => $this->iPhotoWidth ?? 0, "iPhotoHeight" => $this->iPhotoHeight ?? 0, "sType" => $this->sType ?? '', "sFileUrl" => $this->sFileUrl ?? '', "sFileName" => $this->sFileName ?? '', ]; } private function getEnvSiteCode(): string { $sEnvSiteCode = $_ENV["site_code"] ?? "未设置env的site_code"; return $sEnvSiteCode; } }