From 20cde272dd8806b833bede0b95b480adf68b1613 Mon Sep 17 00:00:00 2001 From: mercury Date: Sun, 3 Mar 2024 19:29:21 +0400 Subject: [PATCH] update self --- .gitignore | 1 + app/bot.php | 50 ++++++++++++++++++++++++++++++++------- app/i18n.php | 4 ++++ app/init.php | 6 ----- app/service.php | 38 ++++++++++++++++++++++++++++++ docker-compose.yml | 51 ++++++++++++++++++++++++++++++++++++++++ makefile | 9 ++----- scripts/start_service.sh | 1 + version | 2 ++ 9 files changed, 140 insertions(+), 22 deletions(-) create mode 100644 app/service.php create mode 100644 scripts/start_service.sh diff --git a/.gitignore b/.gitignore index b0afcc1..30cb9c0 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ .vscode/ .idea/ mirror/.env +update/ diff --git a/app/bot.php b/app/bot.php index 25f2ef6..922c263 100644 --- a/app/bot.php +++ b/app/bot.php @@ -4,6 +4,7 @@ class Bot { public $input; public $adguard; + public $update; public function __construct($key, $i18n) { @@ -19,6 +20,7 @@ class Bot $this->dns = '1.1.1.1, 8.8.8.8'; $this->limit = $this->getPacConf()['limitpage'] ?: 5; $this->adguard = '/config/AdGuardHome.yaml'; + $this->update = '/update/json'; } public function input() @@ -131,6 +133,9 @@ class Bot case preg_match('~^/mtproto$~', $this->input['callback'], $m): $this->mtproto(); break; + case preg_match('~^/updatebot$~', $this->input['callback'], $m): + $this->updatebot(); + break; case preg_match('~^/getMirror$~', $this->input['callback'], $m): $this->getMirror(); break; @@ -1005,10 +1010,14 @@ class Bot return json_encode($conf, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); } - public function exportManual() + public function exportManual($file = false) { + $json = $this->export(); + if (!empty($file)) { + file_put_contents($file, $json); + } $bot = $this->request('getMyName', [])['result']['name']; - return $this->upload("{$bot}_export_" . date('d_m_Y_H_i') . '.json', $this->export()); + return $this->upload("{$bot}_export_" . date('d_m_Y_H_i') . '.json', $json); } public function import() @@ -1027,10 +1036,14 @@ class Bot ]; } - public function importFile() + public function importFile($file = false) { - $r = $this->request('getFile', ['file_id' => $this->input['file_id']]); - $json = json_decode(file_get_contents($this->file . $r['result']['file_path']), true); + if (!empty($file)) { + $json = json_decode(file_get_contents($file), true); + } else { + $r = $this->request('getFile', ['file_id' => $this->input['file_id']]); + $json = json_decode(file_get_contents($this->file . $r['result']['file_path']), true); + } if (empty($json) || !is_array($json)) { $this->answer($this->input['callback_id'], 'error', true); } else { @@ -1145,8 +1158,12 @@ class Bot $out[] = "end import"; $this->update($this->input['chat'], $this->input['message_id'], implode("\n", $out)); + $this->language = $this->getPacConf()['language'] ?: 'en'; + $this->limit = $this->getPacConf()['limitpage'] ?: 5; sleep(3); - $this->menu(); + if (empty($file)) { + $this->menu(); + } } } @@ -2942,7 +2959,7 @@ DNS-over-HTTPS with IP: { $menu = [ 'main' => [ - 'text' => $this->i18n('menu'), + 'text' => 'v' . getenv('VER'), 'data' => [ [ [ @@ -3026,7 +3043,7 @@ DNS-over-HTTPS with IP: 'lang' => $type == 'lang' ? $this->menuLang() : false, 'oc' => $type == 'oc' ? $this->ocMenu() : false, 'naive' => $type == 'naive' ? $this->naiveMenu() : false, - 'mirror' => $type == 'mirror' ? $this->mirrorMenu() : false, + 'mirror' => $type == 'mirror' ? $this->mirrorMenu() : false, ]; $text = $menu[$type ?: 'main' ]['text']; @@ -3478,6 +3495,15 @@ DNS-over-HTTPS with IP: return openssl_x509_parse($c)["validTo_time_t"] ?: false; } + public function updatebot() + { + $this->exportManual($this->update); + $r = $this->send($this->input['from'], 'update...'); + file_put_contents('/update/reload_message', "{$this->input['from']}:{$r['result']['message_id']}"); + file_put_contents('/update/pipe', '1'); + $this->delete($this->input['from'], $this->input['message_id']); + } + public function configMenu() { $conf = $this->getPacConf(); @@ -3588,6 +3614,12 @@ DNS-over-HTTPS with IP: 'callback_data' => "/debug", ], ]; + $data[] = [ + [ + 'text' => $this->i18n('update bot'), + 'callback_data' => "/updatebot", + ], + ]; $data[] = [ [ 'text' => $this->i18n('back'), @@ -4072,7 +4104,7 @@ DNS-over-HTTPS with IP: if (!empty($r['result']) && $r['result'] == true) { file_put_contents('/start', 1); } else { - die('set webhook fail'); + die("set webhook fail\n"); } } diff --git a/app/i18n.php b/app/i18n.php index 7318b27..adba999 100644 --- a/app/i18n.php +++ b/app/i18n.php @@ -301,4 +301,8 @@ $i = [ 'en' => 'download', 'ru' => 'скачать', ], + 'update bot' => [ + 'en' => 'update bot', + 'ru' => 'обновить бота', + ], ]; diff --git a/app/init.php b/app/init.php index 43f2698..bd48c00 100644 --- a/app/init.php +++ b/app/init.php @@ -11,9 +11,3 @@ $bot = new Bot($c['key'], $i); $bot->setwebhook(); $bot->setcommands(); $bot->syncPortClients(); -if (!empty($c['admin'])) { - $ip = getenv('IP'); - foreach ($c['admin'] as $k => $v) { - $bot->send($v, "start $ip"); - } -} diff --git a/app/service.php b/app/service.php new file mode 100644 index 0000000..6de343d --- /dev/null +++ b/app/service.php @@ -0,0 +1,38 @@ + $v) { + $r = $bot->send($v, "start $ip"); + $bot->input['chat'] = $v; + $bot->input['message_id'] = $r['result']['message_id']; + if (file_exists($bot->update)) { + if (!empty($m)) { + $bot->send($v, "
$m
", $v == $rm[0] ? $rm[1] : 0); + } + $r = $bot->send($v, "import settings"); + $bot->input['chat'] = $v; + $bot->input['message_id'] = $r['result']['message_id']; + $bot->input['callback_id'] = $r['result']['message_id']; + if (empty($flag)) { + $bot->importFile($bot->update); + unlink($bot->update); + $flag = true; + } + } + } +} +file_put_contents('/update/message', ''); +file_put_contents('/update/reload_message', ''); +$bot->menu(); diff --git a/docker-compose.yml b/docker-compose.yml index 51913ac..071812d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -101,6 +101,7 @@ services: - ./version:/version - ./mirror:/mirror - ./.env:/mirror/.env + - ./update:/update environment: TZ: ${TZ} IP: ${IP} @@ -110,6 +111,7 @@ services: WG1PORT: ${WG1PORT} SSPORT: ${SSPORT} TGPORT: ${TGPORT} + VER: ${VER} hostname: php container_name: php-${VER} restart: unless-stopped @@ -127,6 +129,55 @@ services: interval: 5s timeout: 5s retries: 5 + service: + image: mercurykd/vpnbot-php:1.1 + build: + dockerfile: dockerfile/php.dockerfile + args: + image: ${IMAGE} + volumes: + - ./config/.profile:/root/.ashrc:ro + - ./config/php.ini:/etc/php81/php.ini + - ./config/:/config/ + - ./certs/:/certs/ + - ./ssh:/ssh + - ./app:/app + - ./logs/:/logs/ + - ./update:/update + - ./scripts/start_service.sh:/start_service.sh + environment: + TZ: ${TZ} + IP: ${IP} + ADDRESS: ${WGADDRESS} + WGPORT: ${WGPORT} + WG1ADDRESS: ${WG1ADDRESS} + WG1PORT: ${WG1PORT} + SSPORT: ${SSPORT} + TGPORT: ${TGPORT} + VER: ${VER} + hostname: service + container_name: service-${VER} + # restart: unless-stopped + stop_grace_period: 1s + command: ["/bin/sh", "/start_service.sh"] + working_dir: /app + networks: + default: + ipv4_address: 10.10.0.15 + logging: *default-logging + depends_on: + - up + - ng + - php + - proxy + - wg + - wg1 + - ad + - ss + - tg + - xr + - oc + - np proxy: image: mercurykd/vpnbot-ss:1.1 build: diff --git a/makefile b/makefile index 846b42d..2169e16 100644 --- a/makefile +++ b/makefile @@ -1,8 +1,10 @@ b: docker compose build u: # запуск контейнеров + bash ./update/update.sh & IP=$(shell ip -4 addr | sed -ne 's|^.* inet \([^/]*\)/.* scope global.*$$|\1|p' | awk '{print $1}' | head -1) VER=$(shell git describe --tags) docker compose up -d --force-recreate d: # остановка контейнеров + -kill -9 $(shell cat ./update/update_pid) > /dev/null docker compose down --remove-orphans dv: # остановка контейнеров docker compose down -v @@ -46,13 +48,6 @@ cleanf: cleanall: docker image prune -a -f docker builder prune -a -f -p: - git stash - git pull - git stash pop stash@{0} -update: p r -cn: - docker compose exec ng nginx -t push: docker compose push s: diff --git a/scripts/start_service.sh b/scripts/start_service.sh new file mode 100644 index 0000000..90016cd --- /dev/null +++ b/scripts/start_service.sh @@ -0,0 +1 @@ +php service.php \ No newline at end of file diff --git a/version b/version index 613f4d1..cbffe12 100644 --- a/version +++ b/version @@ -1,3 +1,5 @@ +03.03.2024 возможность обновления бота по кнопке из самого бота +- git pull && make r 02.03.2024 2 сервера wireguard, для возможности один запускать как wireguard а второй как amnezia - git pull && make r 01.03.2024 фикс блокировок торрентов и обмена между пользователями