sApiToken = env('telegram_token'); $oTGHttp->sApiChatId = env('telegram_chatid'); $sUpdate = file_get_contents("php://input"); $aUpdate = json_decode($sUpdate, true); // @file_put_contents('/www/_tg/bot_log.txt', json_encode($aUpdate, JSON_PRETTY_PRINT)); $aData['chatId'] = $aUpdate["message"]["chat"]["id"]; $aData['fromId'] = $aUpdate["message"]["from"]["id"]; if (!isset($aUpdate["message"]["text"])) { throw new \Exception("?"); } $sText = $aUpdate["message"]["text"]; // test // $sText = "\\//Article#List ni__aaa__bbb 111 222"; // $sText = "///\\\SaleCode#SetRate__zzxx 2"; // $sText = "///\\\SaleCode#List"; // $sText = "///\\\SaleCode#Find zzxx"; // $sText = "/Article#Like__sale_code zzx"; // $sText = "////Article#Add jxxjjjj"; // $sText = "//\\\//Article#Del 9"; // $sText = "/Article#Set__1__user_name xxx"; @$aArg = explode(" ", $sText); @$aOption = explode("__", $aArg[0]); $sCmd = $this->cleanCmd($aOption[0]); // list($sClass, $sFunc) = explode("#", $sCmd); // $sClass = ucfirst($sClass); // $sFunc = ucfirst($sFunc); // 大于3个说明是hook或dove之类 $aCmd = explode("#", $sCmd); if (count($aCmd) >= 3) { $sHook = $aCmd[0]; // $sClass = $aCmd[1]; // $sFunc = $aCmd[2]; $sClass = $sHook; $sFunc = "go"; // $aUpdate["subCmd"] = "/".$aCmd[1]."#".$aCmd[2]; } else { $sClass = $aCmd[0]; $sFunc = $aCmd[1]; } $sUClass = ucfirst($sClass); $sUFunc = ucfirst($sFunc); unset($aOption[0]); unset($aArg[0]); $aParams['aOption'] = $aOption; $aParams['aArg'] = $aArg; $sClassPath = "App\\Services\\TG\\Hook\\Mod\\".$sClass; $sUClassPath = "App\\Services\\TG\\Hook\\Mod\\".$sUClass; // 兼容大小写,自己挖的坑 if (method_exists($sClassPath, $sFunc)) { $oInstans = new $sClassPath(); $r = $oInstans->$sFunc($aParams, $aUpdate); } else if (method_exists($sUClassPath, $sUFunc)) { $oInstans = new $sUClassPath(); $r = $oInstans->$sUFunc($aParams, $aUpdate); } else { throw new \Exception("没有这个方法:".$sClass.'#'.$sFunc); } if (isset($r)) { // 返回可以是数组 if (is_array($r)) { foreach ($r as $row) { $oTGHttp->sendToTG($row); } } else { $oTGHttp->sendToTG($r); } Http::response(200, 'ok'); } else { throw new \Exception("?!?!?!?!"); } // if (method_exists($sClassPath, $sFunc)) { // $oInstans = new $sClassPath(); // $r = $oInstans->$sFunc($aParams, $aUpdate); // // // 可以不返回,里面直接send // if (isset($r)) { //// if (empty($r)) { $r = 'hook的mod返回空'; } // // 返回可以是数组 // if (is_array($r)) { // foreach ($r as $row) { // $oTGHttp->sendToTG($row); // } // } else { // $oTGHttp->sendToTG($r); // } // // Http::response(200, 'ok'); // } // // } else { // throw new \Exception("没有这个方法:".$sClass.'#'.$sFunc); // } } catch (\Throwable $e) { $sMessage = "错误(line:".$e->getLine()."): " . $e->getMessage(); $oTGHttp->sendToTG($sMessage); Http::response(200, 'error'); } } private function cleanCmd($input) { $input = str_replace('\\', '', $input); $input = str_replace('/', '', $input); return $input; } }