fuc/src/Services/Tg/Hook/Mod/Node.php
2025-07-10 17:42:17 +08:00

283 lines
7.3 KiB
PHP

<?php
//declare(strict_types=1);
namespace App\Services\Tg\Hook\Mod;
use App\Models\Node as ModelNode;
use App\Utils\Tools;
//use App\Services\DB;
use App\Services\TomTool\Http;
class Node extends Base
{
public function Clone($aParam)
{
// list(, $iNodeId) = explode(" ", $sText, 2);
$iNodeId = $aParam['aArg'][1];
$oHttp = new Http();
$oHttp->sMethod = "post";
$oHttp->sToUrl = $_ENV['baseUrl']."/api/tg/node/".$iNodeId."/copy";
$oHttp->bIsJson = true;
$oHttp->aData = [
'chatId' => $aParam['aOther']['chatId'],
'fromId' => $aParam['aOther']['fromId']
];
$r = @json_decode($oHttp->send(), true);
if ($r["ret"] == 1) {
$sMessage = "成功";
} else {
$sMessage = "失败";
}
return $sMessage;
}
public function List()
{
$aNodeList = ModelNode::where('type', 1)->orderBy('name', 'asc')->get()->toArray();
$sMsg = '';
foreach ($aNodeList as $row) {
$sMsg .= "\n\n";
$sMsg .= $row['name'].', id:'.$row['id'].', duck:'.$row['duck_code'].', zf:'.$row['zhuanfa_code'].', sort:'.$row['sort'];
}
return $sMsg;
}
public function Find($aParam)
{
// $iId = $aParam["aArg"][1] ?? false;
$aParam["aOption"][1] = $aParam["aOption"][1] ? $aParam["aOption"][1] : "id";
return $this->Like($aParam, "find");
}
public function Like($aParam, $sMod2 = false)
{
// @list($sCmd, $sLike) = explode(" ", $sText);
//
// @list(, $sField, $sMod) = explode("#", $sCmd, 3);
$sLike = $aParam['aArg'][1] ?? false;
$sField = $aParam['aOption'][1] ?? false;
@$sMod = $aParam['aOption'][2] ?? false;
if ($sLike == "?") {
return "/node#like__<field> <value>";
}
if (!$sLike) {
return "需要value";
}
if (!$sField) {
return "需要field";
}
switch ($sField) {
case "port":
$sField = "custom_config";
break;
case "config":
$sField = "custom_config";
break;
case "duck":
$sField = "duck_code";
break;
case "zhuanfa":
$sField = "zhuanfa_code";
break;
default:
$sField = $sField;
break;
}
$sMsg = '?';
if ($sMod2 == "find") {
$oNodeList = ModelNode::where($sField, $sLike);
} else {
$oNodeList = ModelNode::where($sField, 'like', '%' . $sLike . '%');
}
if ($sMod == 'type1') {
$oNodeList->where('type', 1);
}
$aNodeList = $oNodeList->orderBy('type', 'desc')->orderBy('name', 'asc')->get()->toArray();
if (empty($aNodeList)) {
$sMsg = "没有";
} else {
$aNodeListNew = [];
foreach ($aNodeList as &$row) {
$row['custom_config'] = json_decode($row['custom_config']);
$row['dynamic_rate_config'] = json_decode($row['dynamic_rate_config']);
$row['node_bandwidth_limit'] = Tools::flowToGB($row['node_bandwidth_limit']).'GB';
$row['node_bandwidth'] = Tools::flowToGB($row['node_bandwidth']).'GB';
$row['node_heartbeat'] = date('Y-m-d H:i:s', $row['node_heartbeat']);
unset($row['is_dynamic_rate']);
unset($row['dynamic_rate_type']);
unset($row['dynamic_rate_config']);
unset($row['bandwidthlimit_resetday']);
unset($row['is_dynamic_rate']);
unset($row['password']);
// $sMsg = json_encode($row, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
//
// $this->oTGHttp->sendToTG($sMsg);
//
}
$sMsg = $this->toJson($aNodeList);
}
return $sMsg;
// $this->oHttp::response(200, 'ok');
}
public function FindSet($aParam)
{
if ($aParam["aArg"][1] == "?") {
return "/node#findSet__<field>__<value> <to> | 批量查找替换";
}
$sField = $aParam["aOption"][1] ?? false;
$sValue = $aParam["aOption"][2] ?? false;
$sTo = $aParam["aArg"][1] ?? false;
if (!$sField) {
return "需要field";
}
if (!$sValue) {
return "需要value";
}
if (!$sTo) {
return "需要to";
}
$oNodeNow = ModelNode::where($sField, $sValue)->get();
if ($oNodeNow->isEmpty()) {
return "没找到对应数据";
}
$i=0;
foreach ($oNodeNow as $oNodeNowRow) {
$oNodeNowRow->$sField = $sTo;
$oNodeNowRow->save();
$i++;
}
return "处理".$i."条数据";
}
public function Set($aParam)
{
// list($sCmd, $sSet) = explode(" ", $sText, 2);
//
// list(, $sField, $iNodeId) = explode("#", $sCmd, 3);
$sSet = $aParam['aArg'][1];
$iNodeId = $aParam['aOption'][1];
$sField = $aParam['aOption'][2];
switch ($sField) {
case "config":
$sField = "custom_config";
break;
case "duck":
$sField = "duck_code";
break;
case "zhuanfa":
$sField = "zhuanfa_code";
break;
default:
$sField = $sField;
break;
}
$sMsg = '?';
$oNode = ModelNode::find($iNodeId);
if (!$oNode) {
$sMsg = "没有这个id";
} else {
$oNode->$sField = $sSet;
$oNode->save();
$sMsg = "ok";
}
$aParam["aOption"][1] = "id";
$aParam["aOption"][2] = NULL;
$aParam["aArg"][1] = $oNode->id;
return $this->Find($aParam);
}
public function Del($aParam)
{
// list($sCmd, $iId) = explode(" ", $sText, 2);
$iId = $aParam['aArg'][1];
$sMsg = '?';
$oNode = ModelNode::where("id", $iId)->first();
if ($oNode) {
// 尝试删除记录
$deleted = $oNode->delete();
if ($deleted) {
// 删除成功
$sMsg = "成功";
} else {
// 删除失败
$sMsg = "失败";
}
} else {
// 找不到记录
$sMsg = "找不到记录";
}
return $sMsg;
}
public function SetRateAll($aParam)
{
$iRate = $aParam['aArg'][1];
$r = ModelNode::query()->update(['traffic_rate' => $iRate]);
return $r;
}
}