no message
This commit is contained in:
parent
96190ea437
commit
8b88da3ccd
@ -35,7 +35,7 @@ $oHttp->aData = [
|
||||
'type' => 'private'
|
||||
],
|
||||
'date' => 1610000000,
|
||||
"text" => "\/orderFindByUser 2",
|
||||
"text" => "\/zhuanfaReset-youshi 2025-02-02",
|
||||
]
|
||||
];
|
||||
|
||||
@ -70,7 +70,7 @@ $oHttp->aData = [
|
||||
|
||||
$r = $oHttp->send();
|
||||
|
||||
var_dump($r);
|
||||
echo($r);
|
||||
|
||||
exit;
|
||||
|
||||
|
||||
@ -57,7 +57,7 @@ EOL;
|
||||
$jobs->cleanDb();
|
||||
// $jobs->resetNodeBandwidth();
|
||||
$jobs->resetDuckBandwidth();
|
||||
$jobs->bandwidthMerge();
|
||||
$jobs->reportBandWidth();
|
||||
$jobs->resetFreeUserBandwidth();
|
||||
$jobs->sendDailyTrafficReport();
|
||||
|
||||
@ -138,6 +138,10 @@ EOL;
|
||||
$detect = new Detect();
|
||||
$detect->ban();
|
||||
}
|
||||
|
||||
if ($minute === 0) {
|
||||
$jobs->mergeBandWidth();
|
||||
}
|
||||
|
||||
// Run email queue
|
||||
$jobs->processEmailQueue();
|
||||
|
||||
@ -29,7 +29,9 @@ final class TestController extends BaseController
|
||||
{
|
||||
$jobs = new CronService();
|
||||
|
||||
$jobs->userCount();
|
||||
$jobs->mergeBandWidth();
|
||||
|
||||
$jobs->reportBandWidth();
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
@ -10,12 +10,15 @@ use App\Models\Ticket;
|
||||
use App\Models\Node;
|
||||
use App\Models\User;
|
||||
use App\Models\Order;
|
||||
use App\Models\Ducks;
|
||||
use App\Models\Zhuanfas;
|
||||
use App\Services\Tg\ReportUser as ServiceTgReportUser;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use Psr\Http\Client\ClientExceptionInterface;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Slim\Http\Response;
|
||||
use Slim\Http\ServerRequest;
|
||||
use App\Utils\Tools;
|
||||
|
||||
use App\Services\TomTool\Http;
|
||||
|
||||
@ -227,6 +230,292 @@ final class HookController
|
||||
|
||||
}
|
||||
|
||||
// 添加duck
|
||||
// /duckAdd jp01
|
||||
if (strpos($sText, '/duckAdd') === 0 || strpos($sText, '\/duckAdd') === 0) {
|
||||
|
||||
list($sCmd, $sCode) = explode(" ", $sText, 2);
|
||||
|
||||
try {
|
||||
$oDucks = new Ducks();
|
||||
$oDucks->code = $sCode;
|
||||
|
||||
if ($oDucks->save()) {
|
||||
$sMsg = "成功";
|
||||
} else {
|
||||
$sMsg = "失败";
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
$sMsg = json_encode($e->getMessage());
|
||||
}
|
||||
|
||||
$this->sendMessage($sMsg);
|
||||
|
||||
Http::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
// 添加zhuanfa
|
||||
// /zhuanfaAdd jp01
|
||||
if (strpos($sText, '/zhuanfaAdd') === 0 || strpos($sText, '\/zhuanfaAdd') === 0) {
|
||||
|
||||
list($sCmd, $sCode) = explode(" ", $sText, 2);
|
||||
|
||||
try {
|
||||
$oZhuanfas = new Zhuanfas();
|
||||
$oZhuanfas->code = $sCode;
|
||||
|
||||
if ($oZhuanfas->save()) {
|
||||
$sMsg = "成功";
|
||||
} else {
|
||||
$sMsg = "失败";
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
$sMsg = json_encode($e->getMessage());
|
||||
}
|
||||
|
||||
$this->sendMessage($sMsg);
|
||||
|
||||
Http::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
// 删除duck
|
||||
// /duckDel jp01
|
||||
if (strpos($sText, '/duckDel') === 0 || strpos($sText, '\/duckDel') === 0) {
|
||||
|
||||
list($sCmd, $sCode) = explode(" ", $sText, 2);
|
||||
|
||||
try {
|
||||
$oDucks = Ducks::where("code", $sCode)->first();
|
||||
|
||||
if ($oDucks) {
|
||||
// 尝试删除记录
|
||||
$deleted = $oDucks->delete();
|
||||
|
||||
if ($deleted) {
|
||||
// 删除成功
|
||||
$sMsg = "成功";
|
||||
} else {
|
||||
// 删除失败
|
||||
$sMsg = "失败";
|
||||
}
|
||||
} else {
|
||||
// 找不到记录
|
||||
$sMsg = "找不到记录";
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
// 捕获异常并返回错误信息
|
||||
$sMsg = json_encode($e->getMessage());
|
||||
}
|
||||
|
||||
$this->sendMessage($sMsg);
|
||||
|
||||
Http::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
// 删除zhuanfa
|
||||
// /zhuanfaDel jp01
|
||||
if (strpos($sText, '/zhuanfaDel') === 0 || strpos($sText, '\/zhuanfaDel') === 0) {
|
||||
|
||||
list($sCmd, $sCode) = explode(" ", $sText, 2);
|
||||
|
||||
try {
|
||||
$oZhuanfas = Zhuanfas::where("code", $sCode)->first();
|
||||
|
||||
if ($oZhuanfas) {
|
||||
// 尝试删除记录
|
||||
$deleted = $oZhuanfas->delete();
|
||||
|
||||
if ($deleted) {
|
||||
// 删除成功
|
||||
$sMsg = "成功";
|
||||
} else {
|
||||
// 删除失败
|
||||
$sMsg = "失败";
|
||||
}
|
||||
} else {
|
||||
// 找不到记录
|
||||
$sMsg = "找不到记录";
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
// 捕获异常并返回错误信息
|
||||
$sMsg = json_encode($e->getMessage());
|
||||
}
|
||||
|
||||
$this->sendMessage($sMsg);
|
||||
|
||||
Http::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
// 修改duck
|
||||
// /duckOption-end_date-jp01 2025_02_02
|
||||
// /duckOption-max_width-jp01 1.66#tb
|
||||
if (strpos($sText, '/duckOption') === 0 || strpos($sText, '\/duckOption') === 0) {
|
||||
|
||||
list($sCmd, $sSet) = explode(" ", $sText, 2);
|
||||
list(, $sField, $sCode) = explode("-", $sCmd, 3);
|
||||
@list($iWidth, $sWidthType) = explode("#", $sSet, 2);
|
||||
|
||||
if ($sWidthType == 'tb') {
|
||||
$sSet = Tools::tomTbToB($iWidth);
|
||||
}
|
||||
|
||||
if ($sWidthType == 'gb') {
|
||||
$sSet = Tools::tomGbToB($iWidth);
|
||||
}
|
||||
|
||||
$sMsg = '?';
|
||||
try {
|
||||
|
||||
$oDuck = Ducks::where('code', $sCode)->first();
|
||||
|
||||
if (!$oDuck) {
|
||||
$sMsg = "没有这个code";
|
||||
} else {
|
||||
$oDuck->$sField = $sSet;
|
||||
if ($oDuck->save()) {
|
||||
$sMsg = "成功"; // 保存成功
|
||||
} else {
|
||||
$sMsg = "失败"; // 保存失败
|
||||
}
|
||||
}
|
||||
|
||||
} catch (\Illuminate\Database\QueryException $e) {
|
||||
|
||||
$sMsg = json_encode($e->getMessage());
|
||||
|
||||
}
|
||||
|
||||
$this->sendMessage($sMsg);
|
||||
|
||||
Http::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
// 修改zhuanfa
|
||||
// /zhuanfaOption-end_date-jp01 2025_02_02
|
||||
// /zhuanfaOption-max_width-jp01 1.66#tb
|
||||
if (strpos($sText, '/zhuanfaOption') === 0 || strpos($sText, '\/zhuanfaOption') === 0) {
|
||||
|
||||
list($sCmd, $sSet) = explode(" ", $sText, 2);
|
||||
list(, $sField, $sCode) = explode("-", $sCmd, 3);
|
||||
@list($iWidth, $sWidthType) = explode("#", $sSet, 2);
|
||||
|
||||
if ($sWidthType == 'tb') {
|
||||
$sSet = Tools::tomTbToB($iWidth);
|
||||
}
|
||||
|
||||
if ($sWidthType == 'gb') {
|
||||
$sSet = Tools::tomGbToB($iWidth);
|
||||
}
|
||||
|
||||
$sMsg = '?';
|
||||
try {
|
||||
|
||||
$oZhuanfas = Zhuanfas::where('code', $sCode)->first();
|
||||
|
||||
if (!$oZhuanfas) {
|
||||
$sMsg = "没有这个code";
|
||||
} else {
|
||||
$oZhuanfas->$sField = $sSet;
|
||||
if ($oZhuanfas->save()) {
|
||||
$sMsg = "成功"; // 保存成功
|
||||
} else {
|
||||
$sMsg = "失败"; // 保存失败
|
||||
}
|
||||
}
|
||||
|
||||
} catch (\Illuminate\Database\QueryException $e) {
|
||||
|
||||
$sMsg = json_encode($e->getMessage());
|
||||
|
||||
}
|
||||
|
||||
$this->sendMessage($sMsg);
|
||||
|
||||
Http::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
// 转发重置
|
||||
// /zhuanfaReset-youshi 2025-02-02
|
||||
if (strpos($sText, '/zhuanfaReset') === 0 || strpos($sText, '\/zhuanfaReset') === 0) {
|
||||
|
||||
list($sCmd, $sDate) = explode(" ", $sText, 2);
|
||||
list(, $sCode) = explode("-", $sCmd, 2);
|
||||
|
||||
$sMsg = '?';
|
||||
try {
|
||||
|
||||
$oZhuanfas = Zhuanfas::where('code', $sCode)->first();
|
||||
|
||||
if (!$oZhuanfas) {
|
||||
$sMsg = "没有这个code";
|
||||
} else {
|
||||
$oZhuanfas->use_width = 0;
|
||||
$oZhuanfas->end_date = $sDate;
|
||||
if ($oZhuanfas->save()) {
|
||||
$sMsg = "成功"; // 保存成功
|
||||
} else {
|
||||
$sMsg = "失败"; // 保存失败
|
||||
}
|
||||
}
|
||||
|
||||
} catch (\Illuminate\Database\QueryException $e) {
|
||||
|
||||
$sMsg = json_encode($e->getMessage());
|
||||
|
||||
}
|
||||
|
||||
$this->sendMessage($sMsg);
|
||||
|
||||
Http::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
// duck list
|
||||
// /duckList
|
||||
if (strpos($sText, '/duckList') === 0 || strpos($sText, '\/duckList') === 0) {
|
||||
|
||||
$aDuckList = Ducks::all()->toArray();
|
||||
|
||||
$aMsgData = [];
|
||||
foreach ($aDuckList as $k => $v) {
|
||||
$v['use_width'] = Tools::flowToTB($v['use_width']).'t';
|
||||
$v['max_width'] = Tools::flowToTB($v['max_width']).'t';
|
||||
$v['today_width'] = Tools::flowToGB($v['today_width']).'g';
|
||||
$aMsgData[] = $v;
|
||||
}
|
||||
|
||||
$this->sendMessage(json_encode($aMsgData, JSON_PRETTY_PRINT));
|
||||
|
||||
Http::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
// zhuanfa list
|
||||
// /zhuanfaList
|
||||
if (strpos($sText, '/zhuanfaList') === 0 || strpos($sText, '\/zhuanfaList') === 0) {
|
||||
|
||||
$aZhuanfaList = Zhuanfas::all()->toArray();
|
||||
|
||||
$aMsgData = [];
|
||||
foreach ($aZhuanfaList as $k => $v) {
|
||||
$v['use_width'] = Tools::flowToTB($v['use_width'])."t";
|
||||
$v['max_width'] = Tools::flowToTB($v['max_width']).'t';
|
||||
$v['today_width'] = Tools::flowToGB($v['today_width']).'g';
|
||||
$aMsgData[] = $v;
|
||||
}
|
||||
|
||||
$this->sendMessage(json_encode($aMsgData, JSON_PRETTY_PRINT));
|
||||
|
||||
Http::response(200, 'ok');
|
||||
|
||||
}
|
||||
|
||||
// 节点设置变更
|
||||
// /nodeOption_name_1 haha
|
||||
if (strpos($sText, '/nodeOption_') === 0 || strpos($sText, '\/nodeOption_') === 0) {
|
||||
@ -391,7 +680,8 @@ final class HookController
|
||||
private function sendMessage($sText) {
|
||||
|
||||
if ($_ENV['is_loc'] === true) {
|
||||
var_dump($sText);
|
||||
echo "<pre>";
|
||||
echo($sText);
|
||||
} else {
|
||||
$url = "https://api.telegram.org/bot$this->sApiToken/sendMessage?chat_id=$this->sApiChatId&text=" . urlencode($sText);
|
||||
file_get_contents($url);
|
||||
|
||||
@ -586,7 +586,134 @@ final class Cron
|
||||
// echo Tools::toDateTime(time()) . ' 重设机器流量完成' . PHP_EOL;
|
||||
// }
|
||||
|
||||
public static function bandwidthMerge(): void
|
||||
public static function mergeBandWidth(): void
|
||||
{
|
||||
|
||||
$oNodeAll = Node::all();
|
||||
|
||||
$aZhuanfaFlowNow = [];
|
||||
$aDuckFlowNow = [];
|
||||
$sMsg = "";
|
||||
|
||||
// 统计node流量
|
||||
foreach ($oNodeAll as $oNodeRow) {
|
||||
|
||||
if ($oNodeRow->node_bandwidth <= 1242880) {
|
||||
|
||||
$sMsg .= $oNodeRow->name."1小时消耗流量不足1mb,可能存在异常。\n";
|
||||
|
||||
}
|
||||
|
||||
@$aZhuanfaFlowNow[$oNodeRow->zhuanfa_code] += $oNodeRow->node_bandwidth;
|
||||
@$aDuckFlowNow[$oNodeRow->duck_code] += $oNodeRow->node_bandwidth;
|
||||
|
||||
}
|
||||
|
||||
// 入库zhunafa
|
||||
foreach ($aZhuanfaFlowNow as $k => $v) {
|
||||
|
||||
if ($v) {
|
||||
Zhuanfas::where('code', $k)->increment('today_width', $v);
|
||||
Zhuanfas::where('code', $k)->increment('use_width', $v);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 入库duck
|
||||
foreach ($aDuckFlowNow as $k => $v) {
|
||||
|
||||
if ($v) {
|
||||
Ducks::where('code', $k)->increment('today_width', $v);
|
||||
Ducks::where('code', $k)->increment('use_width', $v);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 清空node流量
|
||||
Node::query()->update(['node_bandwidth' => 0]);
|
||||
|
||||
if ($sMsg) {
|
||||
// echo $sMsg;
|
||||
(new Telegram())->send(0, $sMsg);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static function reportBandWidth(): void
|
||||
{
|
||||
|
||||
$oZhuanfas = new Zhuanfas();
|
||||
$oDucks = new Ducks();
|
||||
|
||||
// 流量报告,转发
|
||||
$oTgSendFormat = new TgSendFormat();
|
||||
$oTgSendFormat->sTitleEmoji = "⚡️⚡️⚡️⚡️⚡️⚡️";
|
||||
$oTgSendFormat->sTitle = "# 转发流量";
|
||||
$today = new DateTime();
|
||||
|
||||
$oZhuanfasAll = $oZhuanfas->all();
|
||||
foreach ($oZhuanfasAll as $oZhuanfasRow) {
|
||||
|
||||
$targetDate = new DateTime($oZhuanfasRow->end_date);
|
||||
$interval = $today->diff($targetDate);
|
||||
|
||||
$oTgSendFormat->rowAdd(
|
||||
$oZhuanfasRow->name,
|
||||
$oZhuanfasRow->today_width,
|
||||
$oZhuanfasRow->use_width,
|
||||
$oZhuanfasRow->max_width,
|
||||
$interval->days
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
$sTgReport = $oTgSendFormat->typeA();
|
||||
|
||||
// var_dump($sTgReport);
|
||||
(new Telegram())->send(0, $sTgReport);
|
||||
Zhuanfas::query()->update(['today_width' => 0]);
|
||||
|
||||
// 流量报告,机器
|
||||
$oTgSendFormat = new TgSendFormat();
|
||||
$oTgSendFormat->sTitleEmoji = "\n\n";
|
||||
$oTgSendFormat->sTitle = "# 机器流量";
|
||||
|
||||
$oDucksAll = $oDucks->orderBy('code')->get();
|
||||
foreach ($oDucksAll as $oDucksRow) {
|
||||
|
||||
if ($oDucksRow->width_reset_day == 0) {
|
||||
$iWidthResetDay = 0;
|
||||
} if ($oDucksRow->width_reset_day > date('d')) {
|
||||
$iWidthResetDay = $oDucksRow->width_reset_day - date('d');
|
||||
} else {
|
||||
$date = new DateTime();
|
||||
$date->modify('first day of next month');
|
||||
$date->setDate((int)$date->format('Y'), (int)$date->format('m'), $oDucksRow->width_reset_day);
|
||||
$sEndDate = $date;
|
||||
|
||||
$currentDate = new DateTime();
|
||||
$interval = $currentDate->diff($sEndDate);
|
||||
$iWidthResetDay = $interval->days;
|
||||
}
|
||||
|
||||
$oTgSendFormat->rowAdd(
|
||||
$oDucksRow->code,
|
||||
$oDucksRow->today_width,
|
||||
$oDucksRow->use_width,
|
||||
$oDucksRow->max_width,
|
||||
$iWidthResetDay
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
$sTgReport = $oTgSendFormat->typeA();
|
||||
|
||||
// var_dump($sTgReport);
|
||||
(new Telegram())->send(0, $sTgReport);
|
||||
Ducks::query()->update(['today_width' => 0]);
|
||||
}
|
||||
|
||||
public static function reportBandWidth_back(): void
|
||||
{
|
||||
$oNode = new Node();
|
||||
$oZhuanfas = new Zhuanfas();
|
||||
@ -630,7 +757,6 @@ final class Cron
|
||||
|
||||
$sTgReport = $oTgSendFormat->typeA();
|
||||
|
||||
// var_dump($sTgReport);
|
||||
(new Telegram())->send(0, $sTgReport);
|
||||
|
||||
// 流量报告,机器
|
||||
@ -668,7 +794,6 @@ final class Cron
|
||||
|
||||
$sTgReport = $oTgSendFormat->typeA();
|
||||
|
||||
// var_dump($sTgReport);
|
||||
(new Telegram())->send(0, $sTgReport);
|
||||
|
||||
}
|
||||
|
||||
@ -158,6 +158,17 @@ final class Tools
|
||||
{
|
||||
return (int) $traffic * 1073741824;
|
||||
}
|
||||
|
||||
public static function tomTbToB($traffic)
|
||||
{
|
||||
return bcmul($traffic, '1099511627776', 0); // 0 表示没有小数位
|
||||
}
|
||||
|
||||
public static function tomGbToB($traffic)
|
||||
{
|
||||
return bcmul($traffic, '1073741824', 0); // 0 表示没有小数位
|
||||
}
|
||||
|
||||
|
||||
public static function flowToMB($traffic): float
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user