v2.3.1: bot install with spinner waiting for first admin + auto/manual choice

This commit is contained in:
anten-ka
2026-04-09 10:54:06 +03:00
parent 046a08fdb6
commit 8b4b4892a4

View File

@@ -799,20 +799,25 @@ bot_install() {
[ -z "$token" ] && log_error "Токен не может быть пустым" [ -z "$token" ] && log_error "Токен не может быть пустым"
done done
echo -ne " ${WHITE}ID администраторов (через пробел/запятую, Enter = авто):${NC} " echo ""
read -r admin_ids echo -e " ${WHITE}Как добавить администратора?${NC}"
# Нормализуем: пробелы и запятые → запятые echo -e " ${CYAN}1${NC}) Автоматически — бот определит ID при первом /start"
admin_ids=$(echo "$admin_ids" | tr ' ' ',' | sed 's/,,*/,/g; s/^,//; s/,$//') 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" echo "BOT_TOKEN=$token"
[ -n "$admin_ids" ] && echo "ALLOWED_IDS=$admin_ids" [ -n "$admin_ids" ] && echo "ALLOWED_IDS=$admin_ids"
} > "$BOT_DIR/.env" } > "$BOT_DIR/.env"
if [ -z "$admin_ids" ]; then
echo -e " ${YELLOW}Авто-режим: первый кто напишет /start станет админом${NC}"
fi
chmod 600 "$BOT_DIR/.env" chmod 600 "$BOT_DIR/.env"
log_success ".env создан" log_success ".env создан"
else else
@@ -841,6 +846,59 @@ SVCEOF
systemctl enable "$BOT_SERVICE" &>/dev/null systemctl enable "$BOT_SERVICE" &>/dev/null
systemctl restart "$BOT_SERVICE" 2>/dev/null || systemctl start "$BOT_SERVICE" 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 "" echo ""
log_success "Бот установлен и запущен!" log_success "Бот установлен и запущен!"
echo -e " ${DIM}Проверка: systemctl status $BOT_SERVICE${NC}" echo -e " ${DIM}Проверка: systemctl status $BOT_SERVICE${NC}"