mirror of
https://github.com/anten-ka/gotelegram_pro.git
synced 2026-05-19 13:26:02 +00:00
v2.3.0: Lite/Pro rebrand, submenu system, traffic stats, bot stats
This commit is contained in:
347
install.sh
347
install.sh
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
# ══════════════════════════════════════════════════════════════════════════════
|
||||
# GoTelegram v2.2.1 — MTProxy на ядре telemt (Rust + Tokio)
|
||||
# GoTelegram v2.3.0 — MTProxy на ядре telemt (Rust + Tokio)
|
||||
# Anti-DPI • Fake TLS • TCP Splice • JA3/JA4 Resistance
|
||||
#
|
||||
# Установка:
|
||||
@@ -20,8 +20,9 @@ source "$LIB_DIR/telemt_config.sh"
|
||||
source "$LIB_DIR/website.sh"
|
||||
source "$LIB_DIR/templates_catalog.sh"
|
||||
source "$LIB_DIR/backup.sh"
|
||||
[ -f "$LIB_DIR/stats.sh" ] && source "$LIB_DIR/stats.sh"
|
||||
|
||||
# ── Главное меню ─────────────────────────────────────────────────────────────
|
||||
# ── Главное меню (Compact Dashboard + 5 Top-Level Items) ──────────────────────
|
||||
show_main_menu() {
|
||||
local proxy_status bot_status nginx_st mode domain secret port ip link ssl_expiry
|
||||
proxy_status=$(telemt_status)
|
||||
@@ -33,14 +34,14 @@ show_main_menu() {
|
||||
port=$(get_config_value port 2>/dev/null || echo "443")
|
||||
ip=$(get_server_ip 2>/dev/null || echo "N/A")
|
||||
|
||||
local W=60
|
||||
local W=54
|
||||
local line; line=$(printf '━%.0s' $(seq 1 $W))
|
||||
local line2; line2=$(printf '─%.0s' $(seq 1 $W))
|
||||
|
||||
# ── Заголовок ──
|
||||
echo ""
|
||||
echo -e " ${BOLD}${CYAN}┏${line}┓${NC}"
|
||||
echo -e " ${BOLD}${CYAN}┃${NC} ${BOLD}${WHITE}GoTelegram v${GOTELEGRAM_VERSION}${NC} — Панель мониторинга ${BOLD}${CYAN}┃${NC}"
|
||||
echo -e " ${BOLD}${CYAN}┃${NC} ${BOLD}${WHITE}GoTelegram v${GOTELEGRAM_VERSION}${NC} Панель управления ${BOLD}${CYAN}┃${NC}"
|
||||
echo -e " ${BOLD}${CYAN}┗${line}┛${NC}"
|
||||
|
||||
# ── Здоровье сервисов ──
|
||||
@@ -62,10 +63,10 @@ show_main_menu() {
|
||||
running) nginx_icon="●"; nginx_color="${GREEN}" ;;
|
||||
*) nginx_icon="✗"; nginx_color="${RED}" ;;
|
||||
esac
|
||||
echo -e " ${nginx_color}${nginx_icon}${NC} nginx ${nginx_color}${nginx_st}${NC} ${DIM}(127.0.0.1:8443)${NC}"
|
||||
echo -e " ${nginx_icon}${nginx_color}${NC} nginx ${nginx_color}${nginx_st}${NC} ${DIM}(127.0.0.1:8443)${NC}"
|
||||
|
||||
# Site (stealth)
|
||||
if [ "$mode" = "stealth" ] && [ -n "$domain" ]; then
|
||||
# Site (pro)
|
||||
if [ "$mode" = "pro" ] && [ -n "$domain" ]; then
|
||||
local site_icon site_color
|
||||
if curl -sk --max-time 3 "https://${domain}/" -o /dev/null 2>/dev/null; then
|
||||
site_icon="●"; site_color="${GREEN}"
|
||||
@@ -96,7 +97,7 @@ show_main_menu() {
|
||||
|
||||
# ── Прокси-ссылка + QR ──
|
||||
if [ -n "$secret" ] && [ "$proxy_status" = "running" ]; then
|
||||
if [ "$mode" = "stealth" ] && [ -n "$domain" ]; then
|
||||
if [ "$mode" = "pro" ] && [ -n "$domain" ]; then
|
||||
local raw_secret faketls_secret domain_hex
|
||||
raw_secret="$secret"
|
||||
domain_hex=$(printf '%s' "$domain" | xxd -p | tr -d '\n')
|
||||
@@ -117,27 +118,129 @@ show_main_menu() {
|
||||
echo ""
|
||||
fi
|
||||
else
|
||||
echo -e " ${DIM}Прокси не настроен. Выберите п.1 для установки.${NC}"
|
||||
echo -e " ${DIM}Прокси не настроен. Выберите пункт 1.${NC}"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# ── Меню ──
|
||||
echo -e " ${DIM}${line2}${NC}"
|
||||
echo -e " ${DIM}ПРОКСИ${NC} ${DIM}УПРАВЛЕНИЕ${NC}"
|
||||
echo -e " ${CYAN}1${NC}) Установить / Обновить ${CYAN}8${NC}) Бекап"
|
||||
echo -e " ${CYAN}2${NC}) Статус подробно ${CYAN}9${NC}) Восстановить"
|
||||
echo -e " ${CYAN}3${NC}) Скопировать ссылку ${CYAN}10${NC}) Обновить telemt"
|
||||
echo -e " ${CYAN}4${NC}) Поделиться ключом ${CYAN}11${NC}) Сайт / SSL"
|
||||
echo -e " ${CYAN}5${NC}) Перезапуск"
|
||||
echo -e " ${CYAN}6${NC}) Логи ${DIM}БОТ И ПРОЧЕЕ${NC}"
|
||||
echo -e " ${CYAN}7${NC}) Сменить режим / шаблон ${CYAN}12${NC}) Telegram-бот"
|
||||
echo -e " ${CYAN}13${NC}) Удалить всё"
|
||||
echo -e " ${CYAN}0${NC}) ${DIM}Выход${NC} ${CYAN}14${NC}) Промо"
|
||||
echo -e " ${CYAN}1${NC}) Прокси ▸"
|
||||
echo -e " ${CYAN}2${NC}) Статистика ▸"
|
||||
echo -e " ${CYAN}3${NC}) Управление ▸"
|
||||
echo -e " ${CYAN}4${NC}) Telegram-бот ▸"
|
||||
echo -e " ${CYAN}5${NC}) О программе ▸"
|
||||
echo -e " ${CYAN}0${NC}) ${DIM}Выход${NC}"
|
||||
echo -e " ${DIM}${line2}${NC}"
|
||||
echo -e " ${DIM}Обновление через 30 сек${NC}"
|
||||
echo -e " ${DIM}Обновление через 1 сек${NC}"
|
||||
echo -ne " ${WHITE}▸ ${NC}"
|
||||
}
|
||||
|
||||
# ── Подменю: Прокси ──────────────────────────────────────────────────────────
|
||||
submenu_proxy() {
|
||||
while true; do
|
||||
echo ""
|
||||
echo -e " ${BOLD}${WHITE}🚀 ПРОКСИ${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..54})${NC}"
|
||||
echo -e " ${CYAN}1${NC}) Установить / Обновить"
|
||||
echo -e " ${CYAN}2${NC}) Статус подробно"
|
||||
echo -e " ${CYAN}3${NC}) Скопировать ссылку"
|
||||
echo -e " ${CYAN}4${NC}) Поделиться ключом"
|
||||
echo -e " ${CYAN}5${NC}) Перезапуск"
|
||||
echo -e " ${CYAN}6${NC}) Логи"
|
||||
echo -e " ${CYAN}7${NC}) Сменить режим / шаблон"
|
||||
echo -e " ${CYAN}0${NC}) « Назад"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..54})${NC}"
|
||||
echo -ne " ${WHITE}Выбор:${NC} "
|
||||
read -r ch
|
||||
|
||||
case "$ch" in
|
||||
1) menu_install ;;
|
||||
2) menu_status ;;
|
||||
3) menu_link ;;
|
||||
4) menu_share ;;
|
||||
5) menu_restart ;;
|
||||
6) menu_logs ;;
|
||||
7) menu_change_mode ;;
|
||||
0) break ;;
|
||||
*) log_error "Неверный выбор" ;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
echo -ne " ${DIM}Нажмите Enter...${NC}"
|
||||
read -r
|
||||
done
|
||||
}
|
||||
|
||||
# ── Подменю: Управление ──────────────────────────────────────────────────────
|
||||
submenu_manage() {
|
||||
while true; do
|
||||
echo ""
|
||||
echo -e " ${BOLD}${WHITE}⚙️ УПРАВЛЕНИЕ${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..54})${NC}"
|
||||
echo -e " ${CYAN}1${NC}) Бекап"
|
||||
echo -e " ${CYAN}2${NC}) Восстановить"
|
||||
echo -e " ${CYAN}3${NC}) Обновить telemt"
|
||||
echo -e " ${CYAN}4${NC}) Сайт / SSL"
|
||||
echo -e " ${CYAN}5${NC}) Удалить"
|
||||
echo -e " ${CYAN}0${NC}) « Назад"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..54})${NC}"
|
||||
echo -ne " ${WHITE}Выбор:${NC} "
|
||||
read -r ch
|
||||
|
||||
case "$ch" in
|
||||
1) interactive_backup ;;
|
||||
2) interactive_restore ;;
|
||||
3) update_telemt ;;
|
||||
4) menu_website ;;
|
||||
5) menu_remove ;;
|
||||
0) break ;;
|
||||
*) log_error "Неверный выбор" ;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
echo -ne " ${DIM}Нажмите Enter...${NC}"
|
||||
read -r
|
||||
done
|
||||
}
|
||||
|
||||
# ── Подменю: О программе ─────────────────────────────────────────────────────
|
||||
submenu_about() {
|
||||
while true; do
|
||||
echo ""
|
||||
echo -e " ${BOLD}${WHITE}ℹ️ О ПРОГРАММЕ${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..54})${NC}"
|
||||
echo -e " ${CYAN}1${NC}) Информация о версии"
|
||||
echo -e " ${CYAN}2${NC}) Промо / Донат"
|
||||
echo -e " ${CYAN}0${NC}) « Назад"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..54})${NC}"
|
||||
echo -ne " ${WHITE}Выбор:${NC} "
|
||||
read -r ch
|
||||
|
||||
case "$ch" in
|
||||
1) menu_version ;;
|
||||
2) menu_promo ;;
|
||||
0) break ;;
|
||||
*) log_error "Неверный выбор" ;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
echo -ne " ${DIM}Нажмите Enter...${NC}"
|
||||
read -r
|
||||
done
|
||||
}
|
||||
|
||||
# ── Информация о версии ──────────────────────────────────────────────────────
|
||||
menu_version() {
|
||||
echo ""
|
||||
echo -e " ${BOLD}${WHITE}🔍 Информация${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..54})${NC}"
|
||||
echo -e " ${WHITE}GoTelegram:${NC} v${GOTELEGRAM_VERSION}"
|
||||
echo -e " ${WHITE}Ядро:${NC} telemt (Rust + Tokio)"
|
||||
echo -e " ${WHITE}Технология:${NC} Anti-DPI, Fake TLS, TCP Splice"
|
||||
echo -e " ${WHITE}Лицензия:${NC} MIT"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..54})${NC}"
|
||||
}
|
||||
|
||||
# ── Установка: выбор режима ──────────────────────────────────────────────────
|
||||
menu_install() {
|
||||
# Проверяем v1
|
||||
@@ -154,29 +257,29 @@ menu_install() {
|
||||
echo ""
|
||||
echo -e " ${BOLD}${WHITE}🎭 Выберите режим маскировки:${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
|
||||
echo -e " ${CYAN}1)${NC} ${GREEN}⚡ Quick${NC} — маскировка под популярный сайт"
|
||||
echo -e " ${CYAN}1)${NC} ${GREEN}⚡ Lite${NC} — маскировка под популярный сайт"
|
||||
echo -e " ${DIM}Быстро, без домена. telemt маскирует трафик${NC}"
|
||||
echo -e " ${DIM}под выбранный сайт (google.com и т.д.)${NC}"
|
||||
echo ""
|
||||
echo -e " ${CYAN}2)${NC} ${MAGENTA}🛡 Stealth${NC} — свой сайт + полная маскировка"
|
||||
echo -e " ${CYAN}2)${NC} ${MAGENTA}🛡 Pro${NC} — свой сайт + полная маскировка"
|
||||
echo -e " ${DIM}nginx + SSL + HTML-шаблон + telemt.${NC}"
|
||||
echo -e " ${DIM}DPI видит реальный сайт с реальным сертификатом.${NC}"
|
||||
echo -e " ${DIM}Требует: домен, направленный на этот сервер.${NC}"
|
||||
echo -e " ${DIM}Требует: домен, направленный на этот сервер.{{NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
|
||||
echo -ne " ${WHITE}Выбор (1/2):${NC} "
|
||||
read -r mode_choice
|
||||
mode_choice="${mode_choice:-}"
|
||||
|
||||
case "$mode_choice" in
|
||||
1) install_quick_mode ;;
|
||||
2) install_stealth_mode ;;
|
||||
1) install_lite_mode ;;
|
||||
2) install_pro_mode ;;
|
||||
*) log_error "Неверный выбор: ${mode_choice:-<пусто>}" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# ── Quick-режим ──────────────────────────────────────────────────────────────
|
||||
install_quick_mode() {
|
||||
log_step "Установка Quick-режима"
|
||||
# ── Lite-режим ───────────────────────────────────────────────────────────────
|
||||
install_lite_mode() {
|
||||
log_step "Установка Lite-режима"
|
||||
|
||||
# Выбор домена
|
||||
local domain
|
||||
@@ -200,7 +303,7 @@ install_quick_mode() {
|
||||
echo -e " IP: ${CYAN}${ip}${NC}"
|
||||
echo -e " Порт: ${CYAN}${port}${NC}"
|
||||
echo -e " Маскировка: ${CYAN}${domain}${NC}"
|
||||
echo -e " Режим: ${GREEN}Quick${NC}"
|
||||
echo -e " Режим: ${GREEN}Lite${NC}"
|
||||
echo ""
|
||||
|
||||
if ! confirm "Установить прокси?"; then
|
||||
@@ -212,7 +315,7 @@ install_quick_mode() {
|
||||
install_telemt_full || return
|
||||
|
||||
# Генерируем конфиг telemt
|
||||
generate_telemt_toml "$secret" "$port" "quick" "$domain" "443"
|
||||
generate_telemt_toml "$secret" "$port" "lite" "$domain" "443"
|
||||
|
||||
# Валидация
|
||||
validate_telemt_config || return
|
||||
@@ -221,19 +324,19 @@ install_quick_mode() {
|
||||
start_telemt || return
|
||||
|
||||
# Сохраняем GoTelegram конфиг
|
||||
save_gotelegram_config "telemt" "quick" "$port" "$secret" "$domain" "" ""
|
||||
save_gotelegram_config "telemt" "lite" "$port" "$secret" "$domain" "" ""
|
||||
|
||||
# Благодарности
|
||||
show_credits
|
||||
|
||||
# Результат
|
||||
show_proxy_info
|
||||
log_success "GoTelegram v${GOTELEGRAM_VERSION} установлен! (Quick-режим)"
|
||||
log_success "GoTelegram v${GOTELEGRAM_VERSION} установлен! (Lite-режим)"
|
||||
}
|
||||
|
||||
# ── Stealth-режим ────────────────────────────────────────────────────────────
|
||||
install_stealth_mode() {
|
||||
log_step "Установка Stealth-режима"
|
||||
# ── Pro-режим ────────────────────────────────────────────────────────────────
|
||||
install_pro_mode() {
|
||||
log_step "Установка Pro-режима"
|
||||
|
||||
# Ввод домена
|
||||
echo ""
|
||||
@@ -266,7 +369,7 @@ install_stealth_mode() {
|
||||
template_dir=$(interactive_template_selection)
|
||||
[ $? -ne 0 ] && return
|
||||
|
||||
# Архитектура Stealth:
|
||||
# Архитектура Pro:
|
||||
# telemt слушает на 0.0.0.0:443 (принимает ВСЕ подключения)
|
||||
# nginx слушает на 127.0.0.1:8443 с SSL (обслуживает сайт)
|
||||
# MTProxy клиент → :443 → telemt (проксирует)
|
||||
@@ -291,7 +394,7 @@ install_stealth_mode() {
|
||||
echo -e " ${BOLD}${WHITE}📋 Конфигурация:${NC}"
|
||||
echo -e " Домен: ${CYAN}${user_domain}${NC}"
|
||||
echo -e " Порт: ${CYAN}443 (telemt + nginx внутри)${NC}"
|
||||
echo -e " Режим: ${MAGENTA}Stealth (fake-TLS)${NC}"
|
||||
echo -e " Режим: ${MAGENTA}Pro (fake-TLS)${NC}"
|
||||
echo ""
|
||||
|
||||
if ! confirm "Установить прокси + сайт?"; then
|
||||
@@ -303,10 +406,10 @@ install_stealth_mode() {
|
||||
install_telemt_full || return
|
||||
|
||||
# Конфиг telemt: слушает 443, маскировка на локальный nginx через dns_override
|
||||
generate_telemt_toml "$raw_secret" "443" "stealth" "$user_domain" "$nginx_internal_port"
|
||||
generate_telemt_toml "$raw_secret" "443" "pro" "$user_domain" "$nginx_internal_port"
|
||||
|
||||
# Настройка сайта (nginx на внутреннем порту + certbot + шаблон)
|
||||
setup_stealth_mode "$user_domain" "$template_dir" "$nginx_internal_port" "$ssl_email" || return
|
||||
setup_pro_mode "$user_domain" "$template_dir" "$nginx_internal_port" "$ssl_email" || return
|
||||
|
||||
# Останавливаем nginx на 443 перед запуском telemt (telemt займёт 443)
|
||||
# nginx уже перенастроен на внутренний порт
|
||||
@@ -318,22 +421,22 @@ install_stealth_mode() {
|
||||
# Сохраняем конфиг
|
||||
local tpl_id
|
||||
tpl_id=$(basename "$template_dir")
|
||||
save_gotelegram_config "telemt" "stealth" "443" "$raw_secret" "$user_domain" "$user_domain" "$tpl_id"
|
||||
save_gotelegram_config "telemt" "pro" "443" "$raw_secret" "$user_domain" "$user_domain" "$tpl_id"
|
||||
|
||||
# Результат — используем домен и fake-TLS ссылку
|
||||
show_proxy_info_stealth "$user_domain" "$faketls_secret"
|
||||
show_proxy_info_pro "$user_domain" "$faketls_secret"
|
||||
echo -e " ${WHITE}Сайт:${NC} ${GREEN}https://${user_domain}${NC}"
|
||||
log_success "GoTelegram v${GOTELEGRAM_VERSION} установлен! (Stealth-режим)"
|
||||
log_success "GoTelegram v${GOTELEGRAM_VERSION} установлен! (Pro-режим)"
|
||||
}
|
||||
|
||||
# ── Статус ───────────────────────────────────────────────────────────────────
|
||||
menu_status() {
|
||||
show_proxy_info
|
||||
|
||||
# Дополнительно для stealth
|
||||
# Дополнительно для pro
|
||||
local mode
|
||||
mode=$(config_get mode 2>/dev/null)
|
||||
if [ "$mode" = "stealth" ]; then
|
||||
if [ "$mode" = "pro" ]; then
|
||||
local domain
|
||||
domain=$(config_get domain 2>/dev/null)
|
||||
if [ -n "$domain" ]; then
|
||||
@@ -396,7 +499,7 @@ menu_restart() {
|
||||
restart_telemt
|
||||
local mode
|
||||
mode=$(config_get mode 2>/dev/null)
|
||||
if [ "$mode" = "stealth" ]; then
|
||||
if [ "$mode" = "pro" ]; then
|
||||
restart_nginx
|
||||
fi
|
||||
}
|
||||
@@ -417,16 +520,16 @@ menu_change_mode() {
|
||||
echo ""
|
||||
echo -e " ${WHITE}Текущий режим:${NC} ${CYAN}${current_mode}${NC}"
|
||||
echo ""
|
||||
echo -e " ${CYAN}1)${NC} Сменить шаблон сайта (только stealth)"
|
||||
echo -e " ${CYAN}2)${NC} Переключить режим (quick ↔ stealth)"
|
||||
echo -e " ${CYAN}0)${NC} Назад"
|
||||
echo -e " ${CYAN}1${NC}) Сменить шаблон сайта (только pro)"
|
||||
echo -e " ${CYAN}2${NC}) Переключить режим (lite ↔ pro)"
|
||||
echo -e " ${CYAN}0${NC}) Назад"
|
||||
echo -ne " ${WHITE}Выбор:${NC} "
|
||||
read -r ch
|
||||
|
||||
case "$ch" in
|
||||
1)
|
||||
if [ "$current_mode" != "stealth" ]; then
|
||||
log_error "Смена шаблона доступна только в stealth-режиме"
|
||||
if [ "$current_mode" != "pro" ]; then
|
||||
log_error "Смена шаблона доступна только в pro-режиме"
|
||||
return
|
||||
fi
|
||||
local template_dir
|
||||
@@ -443,12 +546,13 @@ menu_change_mode() {
|
||||
esac
|
||||
}
|
||||
|
||||
# ── Управление сайтом ───────────────────────────────────────────────────────
|
||||
# ── Управление сайтом ────────────────────────────────────────────────────────
|
||||
menu_website() {
|
||||
local mode
|
||||
mode=$(config_get mode 2>/dev/null)
|
||||
if [ "$mode" != "stealth" ]; then
|
||||
log_info "Управление сайтом доступно только в stealth-режиме"
|
||||
|
||||
if [ "$mode" != "pro" ]; then
|
||||
log_info "Управление сайтом доступно только в pro-режиме"
|
||||
return
|
||||
fi
|
||||
|
||||
@@ -460,10 +564,10 @@ menu_website() {
|
||||
echo -e " Домен: ${CYAN}${domain}${NC}"
|
||||
echo -e " SSL до: $(get_ssl_expiry "$domain")"
|
||||
echo ""
|
||||
echo -e " ${CYAN}1)${NC} Обновить SSL сертификат"
|
||||
echo -e " ${CYAN}2)${NC} Перезапустить nginx"
|
||||
echo -e " ${CYAN}3)${NC} Сменить шаблон"
|
||||
echo -e " ${CYAN}0)${NC} Назад"
|
||||
echo -e " ${CYAN}1${NC}) Обновить SSL сертификат"
|
||||
echo -e " ${CYAN}2${NC}) Перезапустить nginx"
|
||||
echo -e " ${CYAN}3${NC}) Сменить шаблон"
|
||||
echo -e " ${CYAN}0${NC}) Назад"
|
||||
echo -ne " ${WHITE}Выбор:${NC} "
|
||||
read -r ch
|
||||
|
||||
@@ -484,10 +588,10 @@ menu_remove() {
|
||||
echo ""
|
||||
echo -e " ${BOLD}${RED}🗑 Удаление GoTelegram${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
|
||||
echo -e " ${CYAN}1)${NC} Удалить только прокси (telemt)"
|
||||
echo -e " ${CYAN}2)${NC} Удалить только Telegram-бота"
|
||||
echo -e " ${CYAN}3)${NC} Удалить всё (прокси + бот + настройки)"
|
||||
echo -e " ${CYAN}0)${NC} Назад"
|
||||
echo -e " ${CYAN}1${NC}) Удалить только прокси (telemt)"
|
||||
echo -e " ${CYAN}2${NC}) Удалить только Telegram-бота"
|
||||
echo -e " ${CYAN}3${NC}) Удалить всё (прокси + бот + настройки)"
|
||||
echo -e " ${CYAN}0${NC}) Назад"
|
||||
echo -ne " ${WHITE}Выбор:${NC} "
|
||||
read -r rm_choice
|
||||
|
||||
@@ -501,8 +605,8 @@ menu_remove() {
|
||||
remove_telemt
|
||||
local mode
|
||||
mode=$(config_get mode 2>/dev/null)
|
||||
if [ "$mode" = "stealth" ]; then
|
||||
remove_stealth_mode
|
||||
if [ "$mode" = "pro" ]; then
|
||||
remove_pro_mode
|
||||
fi
|
||||
rm -f "$GOTELEGRAM_CONFIG"
|
||||
log_success "Прокси удалён"
|
||||
@@ -520,8 +624,8 @@ menu_remove() {
|
||||
remove_telemt
|
||||
local mode
|
||||
mode=$(config_get mode 2>/dev/null)
|
||||
if [ "$mode" = "stealth" ]; then
|
||||
remove_stealth_mode
|
||||
if [ "$mode" = "pro" ]; then
|
||||
remove_pro_mode
|
||||
fi
|
||||
rm -f "$GOTELEGRAM_CONFIG"
|
||||
# Бот
|
||||
@@ -563,21 +667,21 @@ menu_bot() {
|
||||
running)
|
||||
echo -e " Статус: ${GREEN}● Работает${NC}"
|
||||
echo ""
|
||||
echo -e " ${CYAN}1)${NC} 📊 Статус бота"
|
||||
echo -e " ${CYAN}2)${NC} 📋 Логи бота"
|
||||
echo -e " ${CYAN}3)${NC} 🔄 Перезапустить бота"
|
||||
echo -e " ${CYAN}4)${NC} ⏹ Остановить бота"
|
||||
echo -e " ${CYAN}5)${NC} ⚙️ Настройки (.env)"
|
||||
echo -e " ${CYAN}6)${NC} 🗑 Удалить бота"
|
||||
echo -e " ${CYAN}1${NC}) 📊 Статус бота"
|
||||
echo -e " ${CYAN}2${NC}) 📋 Логи бота"
|
||||
echo -e " ${CYAN}3${NC}) 🔄 Перезапустить бота"
|
||||
echo -e " ${CYAN}4${NC}) ⏹ Остановить бота"
|
||||
echo -e " ${CYAN}5${NC}) ⚙️ Настройки (.env)"
|
||||
echo -e " ${CYAN}6${NC}) 🗑 Удалить бота"
|
||||
;;
|
||||
stopped)
|
||||
echo -e " Статус: ${YELLOW}○ Остановлен${NC}"
|
||||
echo ""
|
||||
echo -e " ${CYAN}1)${NC} 📊 Статус бота"
|
||||
echo -e " ${CYAN}2)${NC} 📋 Логи бота"
|
||||
echo -e " ${CYAN}3)${NC} ▶️ Запустить бота"
|
||||
echo -e " ${CYAN}5)${NC} ⚙️ Настройки (.env)"
|
||||
echo -e " ${CYAN}6)${NC} 🗑 Удалить бота"
|
||||
echo -e " ${CYAN}1${NC}) 📊 Статус бота"
|
||||
echo -e " ${CYAN}2${NC}) 📋 Логи бота"
|
||||
echo -e " ${CYAN}3${NC}) ▶️ Запустить бота"
|
||||
echo -e " ${CYAN}5${NC}) ⚙️ Настройки (.env)"
|
||||
echo -e " ${CYAN}6${NC}) 🗑 Удалить бота"
|
||||
;;
|
||||
*)
|
||||
echo -e " Статус: ${RED}✗ Не установлен${NC}"
|
||||
@@ -585,11 +689,11 @@ menu_bot() {
|
||||
echo -e " ${DIM}Бот позволяет управлять прокси прямо из Telegram:${NC}"
|
||||
echo -e " ${DIM}статус, перезапуск, смена режима, бекап, QR-код.${NC}"
|
||||
echo ""
|
||||
echo -e " ${CYAN}1)${NC} 🔧 Установить бота"
|
||||
echo -e " ${CYAN}1${NC}) 🔧 Установить бота"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo -e " ${CYAN}0)${NC} « Назад"
|
||||
echo -e " ${CYAN}0${NC}) « Назад"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..55})${NC}"
|
||||
echo -ne " ${WHITE}Выбор:${NC} "
|
||||
read -r ch
|
||||
@@ -762,9 +866,9 @@ bot_edit_config() {
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e " ${CYAN}1)${NC} Сменить BOT_TOKEN"
|
||||
echo -e " ${CYAN}2)${NC} Изменить ALLOWED_IDS"
|
||||
echo -e " ${CYAN}0)${NC} Назад"
|
||||
echo -e " ${CYAN}1${NC}) Сменить BOT_TOKEN"
|
||||
echo -e " ${CYAN}2${NC}) Изменить ALLOWED_IDS"
|
||||
echo -e " ${CYAN}0${NC}) Назад"
|
||||
echo -ne " ${WHITE}Выбор:${NC} "
|
||||
read -r ch
|
||||
|
||||
@@ -842,33 +946,74 @@ main() {
|
||||
while true; do
|
||||
clear
|
||||
show_main_menu
|
||||
# Auto-refresh: 30 sec timeout
|
||||
if read -t 30 -r choice; then
|
||||
# Auto-refresh: 1 sec timeout
|
||||
if read -t 1 -r choice; then
|
||||
case "$choice" in
|
||||
1) menu_install ;;
|
||||
2) menu_status ;;
|
||||
3) menu_link ;;
|
||||
4) menu_share ;;
|
||||
5) menu_restart ;;
|
||||
6) menu_logs ;;
|
||||
7) menu_change_mode ;;
|
||||
8) interactive_backup ;;
|
||||
9) interactive_restore ;;
|
||||
10) update_telemt ;;
|
||||
11) menu_website ;;
|
||||
12) menu_bot ;;
|
||||
13) menu_remove ;;
|
||||
14) menu_promo ;;
|
||||
1) submenu_proxy ;;
|
||||
2) submenu_stats ;;
|
||||
3) submenu_manage ;;
|
||||
4) menu_bot ;;
|
||||
5) submenu_about ;;
|
||||
0|q|exit) echo ""; log_info "До встречи! 👋"; exit 0 ;;
|
||||
*) log_error "Неверный выбор" ;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
echo -ne " ${DIM}Нажмите Enter для возврата в меню...${NC}"
|
||||
read -r
|
||||
fi
|
||||
# If read timed out, loop refreshes the dashboard
|
||||
done
|
||||
}
|
||||
|
||||
# ── Статистика (авто-обновление 1 сек) ──────────────────────────────────────
|
||||
submenu_stats() {
|
||||
# Инициализируем статистику при первом входе
|
||||
if type stats_init &>/dev/null; then
|
||||
stats_init 2>/dev/null
|
||||
fi
|
||||
|
||||
while true; do
|
||||
clear
|
||||
echo ""
|
||||
echo -e " ${BOLD}${WHITE}📊 Статистика трафика${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..54})${NC}"
|
||||
|
||||
if type show_traffic_stats &>/dev/null; then
|
||||
show_traffic_stats
|
||||
else
|
||||
echo -e " ${DIM}Модуль статистики не загружен.${NC}"
|
||||
echo -e " ${DIM}Файл lib/stats.sh не найден.${NC}"
|
||||
fi
|
||||
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..54})${NC}"
|
||||
local stats_on="вкл"
|
||||
if type toggle_stats &>/dev/null; then
|
||||
local cfg_val
|
||||
cfg_val=$(config_get stats_enabled 2>/dev/null || echo "true")
|
||||
[ "$cfg_val" = "false" ] && stats_on="выкл"
|
||||
fi
|
||||
echo -e " ${CYAN}1${NC}) Вкл/Выкл подсчёт (сейчас: ${stats_on})"
|
||||
echo -e " ${CYAN}2${NC}) Установить/обновить сборщик статистики"
|
||||
echo -e " ${CYAN}0${NC}) ${DIM}← Назад${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..54})${NC}"
|
||||
echo -e " ${DIM}Обновление через 1 сек${NC}"
|
||||
echo -ne " ${WHITE}▸ ${NC}"
|
||||
|
||||
if read -t 1 -r ch; then
|
||||
case "$ch" in
|
||||
1)
|
||||
if type toggle_stats &>/dev/null; then
|
||||
toggle_stats
|
||||
echo -ne " ${DIM}Нажмите Enter...${NC}"; read -r
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
if type install_stats_collector &>/dev/null; then
|
||||
install_stats_collector
|
||||
echo -ne " ${DIM}Нажмите Enter...${NC}"; read -r
|
||||
fi
|
||||
;;
|
||||
0|"") return ;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
||||
Reference in New Issue
Block a user