fuc/src/Services/Tg/Hook/Mod/Node.php
2025-07-10 18:20:01 +08:00

292 lines
7.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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 = "没有";
return "没有";
} 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);
// $this->oHttp::response(200, 'ok');
//
}
// $sMsg = $this->toJson($aNodeList);
}
// return $sMsg;
$this->oHttp::response(200, 'ok');
}
public function FindSet($aParam)
{
if ($aParam["aArg"][1] == "?") {
return "/node#findSet__<field>__<value>__<setField?> <to> | 批量查找替换有setField就设置它没有就设置field";
}
$sField = $aParam["aOption"][1] ?? false;
$sValue = $aParam["aOption"][2] ?? false;
$sTo = $aParam["aArg"][1] ?? false;
$sSetField = $aParam["aOption"][3] ?? false;
if (!$sField) {
return "需要field";
}
if (!$sValue) {
return "需要value";
}
if (!$sTo) {
return "需要to";
}
$oNodeNow = ModelNode::where($sField, $sValue)->get();
if ($oNodeNow->isEmpty()) {
return "没找到对应数据";
}
if ($sSetField) {
$sField = $sSetField;
}
$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;
}
}