From 8b4b4892a439c33bb10552631e32b39445cdbf26 Mon Sep 17 00:00:00 2001 From: anten-ka Date: Thu, 9 Apr 2026 10:54:06 +0300 Subject: [PATCH] v2.3.1: bot install with spinner waiting for first admin + auto/manual choice --- install.sh | 76 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 67 insertions(+), 9 deletions(-) diff --git a/install.sh b/install.sh index f86c9f2..5867e1c 100755 --- a/install.sh +++ b/install.sh @@ -799,20 +799,25 @@ bot_install() { [ -z "$token" ] && log_error "Токен не может быть пустым" done - echo -ne " ${WHITE}ID администраторов (через пробел/запятую, Enter = авто):${NC} " - read -r admin_ids - # Нормализуем: пробелы и запятые → запятые - admin_ids=$(echo "$admin_ids" | tr ' ' ',' | sed 's/,,*/,/g; s/^,//; s/,$//') + echo "" + echo -e " ${WHITE}Как добавить администратора?${NC}" + echo -e " ${CYAN}1${NC}) Автоматически — бот определит ID при первом /start" + echo -e " ${CYAN}2${NC}) Вручную — ввести ID сейчас" + echo -ne " ${WHITE}Выбор [1]:${NC} " + read -r admin_mode + admin_mode="${admin_mode:-1}" + + local admin_ids="" + if [ "$admin_mode" = "2" ]; then + echo -ne " ${WHITE}ID администраторов (через пробел/запятую):${NC} " + read -r admin_ids + admin_ids=$(echo "$admin_ids" | tr ' ' ',' | sed 's/,,*/,/g; s/^,//; s/,$//') + fi { echo "BOT_TOKEN=$token" [ -n "$admin_ids" ] && echo "ALLOWED_IDS=$admin_ids" } > "$BOT_DIR/.env" - - if [ -z "$admin_ids" ]; then - echo -e " ${YELLOW}Авто-режим: первый кто напишет /start станет админом${NC}" - fi - chmod 600 "$BOT_DIR/.env" log_success ".env создан" else @@ -841,6 +846,59 @@ SVCEOF systemctl enable "$BOT_SERVICE" &>/dev/null systemctl restart "$BOT_SERVICE" 2>/dev/null || systemctl start "$BOT_SERVICE" + # Если авто-режим — ждём пока бот словит первого админа + local has_ids + has_ids=$(grep "^ALLOWED_IDS=" "$BOT_DIR/.env" 2>/dev/null | cut -d= -f2) + if [ -z "$has_ids" ]; then + echo "" + echo -e " ${YELLOW}╔══════════════════════════════════════════════════════╗${NC}" + echo -e " ${YELLOW}║${NC} ${BOLD}Ожидание администратора${NC} ${YELLOW}║${NC}" + echo -e " ${YELLOW}║${NC} ${YELLOW}║${NC}" + echo -e " ${YELLOW}║${NC} Откройте бота в Telegram и отправьте ${CYAN}/start${NC} ${YELLOW}║${NC}" + echo -e " ${YELLOW}║${NC} Бот автоматически назначит вас администратором ${YELLOW}║${NC}" + echo -e " ${YELLOW}║${NC} ${YELLOW}║${NC}" + echo -e " ${YELLOW}║${NC} ${DIM}Нажмите Ctrl+C чтобы пропустить${NC} ${YELLOW}║${NC}" + echo -e " ${YELLOW}╚══════════════════════════════════════════════════════╝${NC}" + echo "" + + local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏') + local i=0 + local waited=0 + local max_wait=300 # 5 минут максимум + + # Ловим Ctrl+C чтобы выйти из ожидания без убийства скрипта + local interrupted=0 + trap 'interrupted=1' INT + + while [ $waited -lt $max_wait ] && [ $interrupted -eq 0 ]; do + printf "\r ${CYAN}${frames[$i]}${NC} Ожидание... напишите /start боту (%d сек) " "$waited" >&2 + i=$(( (i+1) % ${#frames[@]} )) + sleep 1 + waited=$((waited + 1)) + + # Проверяем появился ли ALLOWED_IDS + has_ids=$(grep "^ALLOWED_IDS=" "$BOT_DIR/.env" 2>/dev/null | cut -d= -f2) + if [ -n "$has_ids" ]; then + break + fi + done + + trap - INT + printf "\r\033[K" >&2 # очистить строку со спиннером + + if [ -n "$has_ids" ]; then + echo "" + log_success "Администратор назначен!" + echo -e " ${WHITE}ID:${NC} ${GREEN}${has_ids}${NC}" + elif [ $interrupted -eq 1 ]; then + echo "" + log_warning "Пропущено. Добавить админа позже: меню → Telegram-бот → Настройки" + else + echo "" + log_warning "Таймаут (5 мин). Добавить админа: меню → Telegram-бот → Настройки" + fi + fi + echo "" log_success "Бот установлен и запущен!" echo -e " ${DIM}Проверка: systemctl status $BOT_SERVICE${NC}"