mirror of
https://github.com/anten-ka/gotelegram_pro.git
synced 2026-05-19 15:46:02 +00:00
feat: dashboard with live status, proxy link, QR, auto-refresh 30s
This commit is contained in:
166
install.sh
166
install.sh
@@ -23,45 +23,109 @@ source "$LIB_DIR/backup.sh"
|
|||||||
|
|
||||||
# ── Главное меню ─────────────────────────────────────────────────────────────
|
# ── Главное меню ─────────────────────────────────────────────────────────────
|
||||||
show_main_menu() {
|
show_main_menu() {
|
||||||
local proxy_status bot_status
|
local proxy_status bot_status nginx_st mode domain secret port ip link ssl_expiry
|
||||||
proxy_status=$(telemt_status)
|
proxy_status=$(telemt_status)
|
||||||
bot_status=$(bot_service_status)
|
bot_status=$(bot_service_status)
|
||||||
|
nginx_st=$(nginx_status 2>/dev/null || echo "stopped")
|
||||||
|
mode=$(config_get mode 2>/dev/null || echo "—")
|
||||||
|
domain=$(config_get domain 2>/dev/null || echo "")
|
||||||
|
secret=$(get_config_value secret 2>/dev/null || echo "")
|
||||||
|
port=$(get_config_value port 2>/dev/null || echo "443")
|
||||||
|
ip=$(get_server_ip 2>/dev/null || echo "N/A")
|
||||||
|
|
||||||
local proxy_badge bot_badge
|
# Proxy badge
|
||||||
|
local proxy_badge
|
||||||
case "$proxy_status" in
|
case "$proxy_status" in
|
||||||
running) proxy_badge="${GREEN}● Работает${NC}" ;;
|
running) proxy_badge="${GREEN}● Работает${NC}" ;;
|
||||||
stopped) proxy_badge="${YELLOW}○ Остановлен${NC}" ;;
|
stopped) proxy_badge="${YELLOW}○ Остановлен${NC}" ;;
|
||||||
*) proxy_badge="${RED}✗ Не установлен${NC}" ;;
|
*) proxy_badge="${RED}✗ Не установлен${NC}" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
# nginx badge
|
||||||
|
local nginx_badge
|
||||||
|
case "$nginx_st" in
|
||||||
|
running) nginx_badge="${GREEN}● nginx${NC}" ;;
|
||||||
|
*) nginx_badge="${RED}✗ nginx${NC}" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Bot badge
|
||||||
|
local bot_badge
|
||||||
case "$bot_status" in
|
case "$bot_status" in
|
||||||
running) bot_badge="${GREEN}● Бот работает${NC}" ;;
|
running) bot_badge="${GREEN}● Бот${NC}" ;;
|
||||||
stopped) bot_badge="${YELLOW}○ Бот остановлен${NC}" ;;
|
stopped) bot_badge="${YELLOW}○ Бот${NC}" ;;
|
||||||
*) bot_badge="${DIM}нет${NC}" ;;
|
*) bot_badge="" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " ${BOLD}${WHITE}Главное меню${NC} │ Proxy: ${proxy_badge} │ ${bot_badge}"
|
echo -e " ${BOLD}${WHITE}╔══════════════════════════════════════════════════════════╗${NC}"
|
||||||
echo -e " ${DIM}$(printf '─%.0s' {1..60})${NC}"
|
echo -e " ${BOLD}${WHITE}║${NC} ${BOLD}GoTelegram v${GOTELEGRAM_VERSION}${NC} — Мониторинг ${BOLD}${WHITE}║${NC}"
|
||||||
echo -e " ${DIM}── Прокси ──${NC}"
|
echo -e " ${BOLD}${WHITE}╠══════════════════════════════════════════════════════════╣${NC}"
|
||||||
echo -e " ${CYAN} 1)${NC} 🔧 Установить / Обновить прокси"
|
|
||||||
echo -e " ${CYAN} 2)${NC} 📊 Статус"
|
# Status line
|
||||||
echo -e " ${CYAN} 3)${NC} 🔗 Ссылка для подключения"
|
echo -ne " ${BOLD}${WHITE}║${NC} Прокси: ${proxy_badge}"
|
||||||
echo -e " ${CYAN} 4)${NC} 📤 Поделиться ключом"
|
echo -ne " │ ${nginx_badge}"
|
||||||
echo -e " ${CYAN} 5)${NC} 🔄 Перезапуск"
|
[ -n "$bot_badge" ] && echo -ne " │ ${bot_badge}"
|
||||||
echo -e " ${CYAN} 6)${NC} 📋 Логи"
|
echo -e " ${BOLD}${WHITE}║${NC}"
|
||||||
echo -e " ${CYAN} 7)${NC} 🎭 Сменить режим / шаблон"
|
|
||||||
echo -e " ${DIM}── Управление ──${NC}"
|
# Mode & IP
|
||||||
echo -e " ${CYAN} 8)${NC} 💾 Бекап конфигурации"
|
echo -e " ${BOLD}${WHITE}║${NC} Режим: ${CYAN}${mode}${NC} │ IP: ${CYAN}${ip}${NC} │ Порт: ${CYAN}${port}${NC} ${BOLD}${WHITE}║${NC}"
|
||||||
echo -e " ${CYAN} 9)${NC} 📦 Восстановить из бекапа"
|
|
||||||
echo -e " ${CYAN}10)${NC} ⬆️ Обновить telemt"
|
# Domain & SSL (stealth only)
|
||||||
echo -e " ${CYAN}11)${NC} 🌐 Управление сайтом (SSL)"
|
if [ "$mode" = "stealth" ] && [ -n "$domain" ]; then
|
||||||
echo -e " ${DIM}── Бот и прочее ──${NC}"
|
ssl_expiry=$(get_ssl_expiry "$domain" 2>/dev/null || echo "N/A")
|
||||||
echo -e " ${CYAN}12)${NC} 🤖 Telegram-бот"
|
local site_ok
|
||||||
echo -e " ${CYAN}13)${NC} 🗑 Удалить всё"
|
if curl -sk --connect-timeout 3 "https://${domain}/" -o /dev/null 2>/dev/null; then
|
||||||
echo -e " ${CYAN}14)${NC} 🏷 Промо"
|
site_ok="${GREEN}● OK${NC}"
|
||||||
echo -e " ${CYAN} 0)${NC} 🚪 Выход"
|
else
|
||||||
echo -e " ${DIM}$(printf '─%.0s' {1..60})${NC}"
|
site_ok="${RED}✗ Down${NC}"
|
||||||
echo -ne " ${WHITE}Выбор:${NC} "
|
fi
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} Домен: ${CYAN}${domain}${NC} │ SSL: ${ssl_expiry} ${BOLD}${WHITE}║${NC}"
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} Сайт: ${site_ok} │ ${GREEN}https://${domain}${NC} ${BOLD}${WHITE}║${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e " ${BOLD}${WHITE}╠══════════════════════════════════════════════════════════╣${NC}"
|
||||||
|
|
||||||
|
# Proxy link
|
||||||
|
if [ -n "$secret" ] && [ "$proxy_status" = "running" ]; then
|
||||||
|
if [ "$mode" = "stealth" ] && [ -n "$domain" ]; then
|
||||||
|
local raw_secret faketls_secret domain_hex
|
||||||
|
raw_secret="$secret"
|
||||||
|
domain_hex=$(printf '%s' "$domain" | xxd -p | tr -d '\n')
|
||||||
|
faketls_secret="ee${raw_secret}${domain_hex}"
|
||||||
|
link="tg://proxy?server=${domain}&port=${port}&secret=${faketls_secret}"
|
||||||
|
else
|
||||||
|
link="tg://proxy?server=${ip}&port=${port}&secret=${secret}"
|
||||||
|
fi
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${WHITE}Ссылка для Telegram:${NC} ${BOLD}${WHITE}║${NC}"
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${GREEN}${link}${NC}"
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${BOLD}${WHITE}║${NC}"
|
||||||
|
|
||||||
|
# QR code
|
||||||
|
if command -v qrencode &>/dev/null; then
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${DIM}QR-код:${NC} ${BOLD}${WHITE}║${NC}"
|
||||||
|
qrencode -t UTF8 -m 1 "$link" 2>/dev/null | while IFS= read -r qr_line; do
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${qr_line}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${DIM}Прокси не настроен. Выберите п.1 для установки.${NC} ${BOLD}${WHITE}║${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e " ${BOLD}${WHITE}╠══════════════════════════════════════════════════════════╣${NC}"
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${DIM}── Прокси ──${NC} ${BOLD}${WHITE}║${NC}"
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${CYAN} 1)${NC} 🔧 Установить / Обновить ${CYAN} 5)${NC} 🔄 Перезапуск ${BOLD}${WHITE}║${NC}"
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${CYAN} 2)${NC} 📊 Статус подробно ${CYAN} 6)${NC} 📋 Логи ${BOLD}${WHITE}║${NC}"
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${CYAN} 3)${NC} 🔗 Скопировать ссылку ${CYAN} 7)${NC} 🎭 Сменить режим ${BOLD}${WHITE}║${NC}"
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${CYAN} 4)${NC} 📤 Поделиться ключом ${BOLD}${WHITE}║${NC}"
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${DIM}── Управление ──${NC} ${BOLD}${WHITE}║${NC}"
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${CYAN} 8)${NC} 💾 Бекап ${CYAN}10)${NC} ⬆️ Обновить telemt ${BOLD}${WHITE}║${NC}"
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${CYAN} 9)${NC} 📦 Восстановить ${CYAN}11)${NC} 🌐 Сайт (SSL) ${BOLD}${WHITE}║${NC}"
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${DIM}── Бот и прочее ──${NC} ${BOLD}${WHITE}║${NC}"
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${CYAN}12)${NC} 🤖 Telegram-бот ${CYAN}14)${NC} 🏷 Промо ${BOLD}${WHITE}║${NC}"
|
||||||
|
echo -e " ${BOLD}${WHITE}║${NC} ${CYAN}13)${NC} 🗑 Удалить всё ${CYAN} 0)${NC} 🚪 Выход ${BOLD}${WHITE}║${NC}"
|
||||||
|
echo -e " ${BOLD}${WHITE}╚══════════════════════════════════════════════════════════╝${NC}"
|
||||||
|
echo -e " ${DIM}Авто-обновление каждые 30 сек. Введите номер:${NC}"
|
||||||
|
echo -ne " ${WHITE}▸ ${NC}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# ── Установка: выбор режима ──────────────────────────────────────────────────
|
# ── Установка: выбор режима ──────────────────────────────────────────────────
|
||||||
@@ -766,30 +830,34 @@ main() {
|
|||||||
check_disk_space 500
|
check_disk_space 500
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
|
clear
|
||||||
show_main_menu
|
show_main_menu
|
||||||
read -r choice
|
# Auto-refresh: 30 sec timeout
|
||||||
case "$choice" in
|
if read -t 30 -r choice; then
|
||||||
1) menu_install ;;
|
case "$choice" in
|
||||||
2) menu_status ;;
|
1) menu_install ;;
|
||||||
3) menu_link ;;
|
2) menu_status ;;
|
||||||
4) menu_share ;;
|
3) menu_link ;;
|
||||||
5) menu_restart ;;
|
4) menu_share ;;
|
||||||
6) menu_logs ;;
|
5) menu_restart ;;
|
||||||
7) menu_change_mode ;;
|
6) menu_logs ;;
|
||||||
8) interactive_backup ;;
|
7) menu_change_mode ;;
|
||||||
9) interactive_restore ;;
|
8) interactive_backup ;;
|
||||||
10) update_telemt ;;
|
9) interactive_restore ;;
|
||||||
11) menu_website ;;
|
10) update_telemt ;;
|
||||||
12) menu_bot ;;
|
11) menu_website ;;
|
||||||
13) menu_remove ;;
|
12) menu_bot ;;
|
||||||
14) menu_promo ;;
|
13) menu_remove ;;
|
||||||
0|q|exit) echo ""; log_info "До встречи! 👋"; exit 0 ;;
|
14) menu_promo ;;
|
||||||
*) log_error "Неверный выбор" ;;
|
0|q|exit) echo ""; log_info "До встречи! 👋"; exit 0 ;;
|
||||||
esac
|
*) log_error "Неверный выбор" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo -ne " ${DIM}Нажмите Enter для возврата в меню...${NC}"
|
echo -ne " ${DIM}Нажмите Enter для возврата в меню...${NC}"
|
||||||
read -r
|
read -r
|
||||||
|
fi
|
||||||
|
# If read timed out, loop refreshes the dashboard
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user