on/off xtls users

This commit is contained in:
mercury
2024-04-10 00:03:47 +04:00
parent 5f8979a62d
commit 85d8bc4e6d
+45 -18
View File
@@ -281,6 +281,9 @@ class Bot
case preg_match('~^/timerXr (\d+)$~', $this->input['callback'], $m):
$this->timerXr($m[1]);
break;
case preg_match('~^/switchXr (\d+)$~', $this->input['callback'], $m):
$this->switchXr($m[1]);
break;
case preg_match('~^/delxr (\d+)$~', $this->input['callback'], $m):
$this->delxr($m[1]);
break;
@@ -1046,16 +1049,11 @@ class Bot
{
try {
$c = $this->getXray();
$f = 0;
foreach ($c['inbounds'][0]['settings']['clients'] as $k => $v) {
if (!empty($v['time']) && $v['time'] < time()) {
unset($c['inbounds'][0]['settings']['clients'][$k]);
$f = 1;
if (!empty($v['time']) && ($v['time'] < time())) {
$this->switchXr($k, 1);
}
}
if (!empty($f)) {
$this->restartXray($c);
}
} catch (Exception $e) {
}
}
@@ -3506,16 +3504,42 @@ DNS-over-HTTPS with IP:
public function setTimerXr($time, $i)
{
$time = strtotime($time);
if ($time === false) {
$this->send($this->input['chat'], 'wrong format');
return;
}
$c = $this->getXray();
if (empty($time)) {
unset($c['inbounds'][0]['settings']['clients'][$i]['time']);
} else {
$c['inbounds'][0]['settings']['clients'][$i]['time'] = strtotime($time);
if (!empty($c['inbounds'][0]['settings']['clients'][$i]['off'])) {
$this->switchXr($i, 1);
$c = $this->getXray();
}
$c['inbounds'][0]['settings']['clients'][$i]['time'] = $time;
}
file_put_contents('/config/xray.json', json_encode($c, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
$this->userXr($i);
}
public function switchXr($i, $nm = 0)
{
$c = $this->getXray();
unset($c['inbounds'][0]['settings']['clients'][$i]['time']);
if (empty($c['inbounds'][0]['settings']['clients'][$i]['off'])) {
$c['inbounds'][0]['settings']['clients'][$i]['off'] = $c['inbounds'][0]['settings']['clients'][$i]['id'];
$c['inbounds'][0]['settings']['clients'][$i]['id'] = trim($this->ssh('xray uuid', 'xr'));
} else {
$c['inbounds'][0]['settings']['clients'][$i]['id'] = $c['inbounds'][0]['settings']['clients'][$i]['off'];
unset($c['inbounds'][0]['settings']['clients'][$i]['off']);
}
$this->restartXray($c);
if (empty($nm)) {
$this->userXr($i);
}
}
public function renXrUs($name, $i)
{
$c = $this->getXray();
@@ -3552,7 +3576,7 @@ DNS-over-HTTPS with IP:
$time = $v['time'] ? $this->getTime($v['time']) : '';
$data[] = [
[
'text' => "{$v['email']}" . ($time ? ": $time" : ''),
'text' => $this->i18n($v['off'] ? 'off' : 'on') . " {$v['email']}" . ($time ? ": $time" : ''),
'callback_data' => "/userXr $k",
],
];
@@ -3593,15 +3617,15 @@ DNS-over-HTTPS with IP:
$text[] = "v2ray: <a href='$v2ray'>$v2ray</a>\n";
$text[] = "sing-box: <a href='$sing'>$sing</a>";
if ($time = $c['inbounds'][0]['settings']['clients'][$i]['time']) {
$text[] = "\ntimer: " . $this->getTime($time);
}
$data[] = [
[
'text' => $this->i18n('timer'),
'text' => $c['inbounds'][0]['settings']['clients'][$i]['time'] ? "timer: " . $this->getTime($c['inbounds'][0]['settings']['clients'][$i]['time']) : $this->i18n('timer'),
'callback_data' => "/timerXr $i",
],
[
'text' => $this->i18n($c['inbounds'][0]['settings']['clients'][$i]['off'] ? 'off' : 'on'),
'callback_data' => "/switchXr $i",
],
];
$data[] = [
[
@@ -3647,7 +3671,9 @@ DNS-over-HTTPS with IP:
if (!empty($fs)) {
return $this->userXr($k, 0, 1);
}
$flag = false;
if (empty($v['off'])) {
$flag = false;
}
break;
}
}
@@ -3684,7 +3710,10 @@ DNS-over-HTTPS with IP:
if (!empty($fs)) {
return $this->userXr($k, 1);
}
$flag = false;
if (empty($v['off'])) {
$flag = false;
}
break;
}
}
@@ -3692,8 +3721,6 @@ DNS-over-HTTPS with IP:
return false;
}
$c = json_decode(file_get_contents('/config/sing.json'), true);
if ($c['dns']['servers'][0]['address'] == '~dns~') {