Пункт 7: полное меню удаления (контейнер или контейнер+Docker), 2 подтверждения

Made-with: Cursor
This commit is contained in:
anten-ka
2026-03-06 19:04:02 +03:00
parent 11d9cf6772
commit ea6400540c

View File

@@ -929,6 +929,202 @@ install_bot_deps() {
echo -e " ${GREEN}${NC} Зависимости установлены"
}
# ── 7) Полное меню удаления ────────────────────────────────────────────────────
menu_remove() {
clear
echo -e "${RED}╔══════════════════════════════════════════════════════════════╗${NC}"
echo -e "${RED}║ УДАЛЕНИЕ КОМПОНЕНТОВ ║${NC}"
echo -e "${RED}╚══════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo -e " ${YELLOW}1)${NC} Удалить только контейнер MTProxy"
echo -e " (Docker и другие контейнеры останутся)"
echo ""
echo -e " ${RED}2)${NC} Удалить контейнер MTProxy + Docker полностью"
echo -e " ${RED}ВСЕ контейнеры и образы будут уничтожены!${NC}"
echo ""
echo -e " ${WHITE}0)${NC} Назад"
echo ""
local choice
read -p " Выбор: " choice
case $choice in
1) remove_container_only ;;
2) remove_with_docker ;;
*) return ;;
esac
}
remove_container_only() {
clear
echo -e "${YELLOW}╔══════════════════════════════════════════════════════════════╗${NC}"
echo -e "${YELLOW}║ Удаление контейнера MTProxy ║${NC}"
echo -e "${YELLOW}╚══════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo -e " Будет удалено:"
echo -e " • Контейнер ${WHITE}$CONTAINER_NAME${NC}"
echo -e " • Telegram-бот (сервис ${WHITE}$SERVICE_NAME${NC})"
echo -e " • Файлы бота (${WHITE}$BOT_DIR${NC})"
echo -e " • Скрипт ${WHITE}/usr/local/bin/gotelegram${NC}"
echo ""
echo -e " Docker и другие контейнеры ${GREEN}НЕ будут затронуты${NC}."
echo ""
# Подтверждение 1
local yn
read -p " Вы уверены? (y/N): " yn
if [ "$yn" != "y" ] && [ "$yn" != "Y" ]; then
echo -e " ${GREEN}Отменено.${NC}"
read -p " Нажмите Enter..."
return
fi
# Подтверждение 2 — случайное слово
local words=("УДАЛИТЬ" "СТЕРЕТЬ" "ПРОКСИ" "ОЧИСТКА" "ФИНАЛ" "СБРОС")
local confirm_word="${words[$((RANDOM % ${#words[@]}))]}"
echo ""
echo -e " ${RED}Для подтверждения введите слово:${NC} ${WHITE}${confirm_word}${NC}"
local input_word
read -p " >>> " input_word
if [ "$input_word" != "$confirm_word" ]; then
echo -e " ${GREEN}Слово не совпало. Удаление отменено.${NC}"
read -p " Нажмите Enter..."
return
fi
echo ""
# Удаление
spinner_start "Остановка и удаление контейнера..."
docker stop "$CONTAINER_NAME" &>/dev/null
docker rm "$CONTAINER_NAME" &>/dev/null
spinner_stop
echo -e " ${GREEN}${NC} Контейнер удалён"
spinner_start "Остановка Telegram-бота..."
systemctl stop "$SERVICE_NAME" 2>/dev/null
systemctl disable "$SERVICE_NAME" 2>/dev/null
rm -f "/etc/systemd/system/${SERVICE_NAME}.service"
systemctl daemon-reload 2>/dev/null
spinner_stop
echo -e " ${GREEN}${NC} Сервис бота удалён"
rm -rf "$BOT_DIR"
echo -e " ${GREEN}${NC} Файлы бота удалены"
rm -f /usr/local/bin/gotelegram
echo -e " ${GREEN}${NC} Скрипт gotelegram удалён"
echo ""
echo -e "${GREEN}══════════════════════════════════════════════════${NC}"
echo -e "${GREEN} Удаление завершено. Docker остался на месте.${NC}"
echo -e "${GREEN}══════════════════════════════════════════════════${NC}"
read -p " Нажмите Enter..."
}
remove_with_docker() {
clear
echo -e "${RED}╔══════════════════════════════════════════════════════════════╗${NC}"
echo -e "${RED}║ ⚠ ПОЛНОЕ УДАЛЕНИЕ: MTProxy + Docker + всё ⚠ ║${NC}"
echo -e "${RED}╚══════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo -e " ${RED}ВНИМАНИЕ! Будет удалено ВСЁ:${NC}"
echo -e " • Контейнер ${WHITE}$CONTAINER_NAME${NC}"
echo -e " • Telegram-бот и файлы"
echo -e " • Скрипт gotelegram"
echo -e "${RED}Docker Engine полностью${NC}"
echo -e "${RED}ВСЕ Docker-контейнеры, образы и тома${NC}"
echo ""
# Показываем что ещё есть в Docker
local other_containers
other_containers=$(docker ps -a --format '{{.Names}}\t{{.Image}}\t{{.Status}}' 2>/dev/null | grep -v "^${CONTAINER_NAME}")
if [ -n "$other_containers" ]; then
echo -e " ${RED}На сервере есть ДРУГИЕ контейнеры, которые тоже будут уничтожены:${NC}"
echo -e " ${RED}────────────────────────────────────────────────────────────────${NC}"
echo "$other_containers" | while IFS= read -r line; do
echo -e " ${WHITE}$line${NC}"
done
echo -e " ${RED}────────────────────────────────────────────────────────────────${NC}"
echo ""
fi
# Подтверждение 1
local yn
echo -e " ${RED}Это действие НЕОБРАТИМО.${NC}"
read -p " Вы точно уверены? (y/N): " yn
if [ "$yn" != "y" ] && [ "$yn" != "Y" ]; then
echo -e " ${GREEN}Отменено.${NC}"
read -p " Нажмите Enter..."
return
fi
# Подтверждение 2 — случайное слово
local words=("УНИЧТОЖИТЬ" "ПОЛНЫЙ-СБРОС" "СТЕРЕТЬ-ВСЁ" "ПОДТВЕРЖДАЮ" "DOCKER-УДАЛИТЬ" "ТОЧНО-ДА")
local confirm_word="${words[$((RANDOM % ${#words[@]}))]}"
echo ""
echo -e " ${RED}████████████████████████████████████████████████████████████${NC}"
echo -e " ${RED}██${NC} Для подтверждения введите: ${WHITE}${confirm_word}${NC}"
echo -e " ${RED}████████████████████████████████████████████████████████████${NC}"
local input_word
read -p " >>> " input_word
if [ "$input_word" != "$confirm_word" ]; then
echo -e " ${GREEN}Слово не совпало. Удаление отменено.${NC}"
read -p " Нажмите Enter..."
return
fi
echo ""
# Удаление MTProxy
spinner_start "Удаление контейнера MTProxy..."
docker stop "$CONTAINER_NAME" &>/dev/null
docker rm "$CONTAINER_NAME" &>/dev/null
spinner_stop
echo -e " ${GREEN}${NC} Контейнер MTProxy удалён"
# Удаление бота
spinner_start "Удаление Telegram-бота..."
systemctl stop "$SERVICE_NAME" 2>/dev/null
systemctl disable "$SERVICE_NAME" 2>/dev/null
rm -f "/etc/systemd/system/${SERVICE_NAME}.service"
systemctl daemon-reload 2>/dev/null
rm -rf "$BOT_DIR"
spinner_stop
echo -e " ${GREEN}${NC} Telegram-бот удалён"
# Удаление всех контейнеров Docker
spinner_start "Остановка всех контейнеров Docker..."
docker stop $(docker ps -aq) &>/dev/null
docker rm $(docker ps -aq) &>/dev/null
spinner_stop
echo -e " ${GREEN}${NC} Все контейнеры остановлены и удалены"
# Удаление Docker
spinner_start "Удаление Docker Engine..."
systemctl stop docker 2>/dev/null
if command -v apt-get &>/dev/null; then
apt-get purge -y -qq docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin 2>/dev/null
apt-get autoremove -y -qq 2>/dev/null
elif command -v dnf &>/dev/null; then
dnf remove -y docker-ce docker-ce-cli containerd.io 2>/dev/null
elif command -v yum &>/dev/null; then
yum remove -y docker-ce docker-ce-cli containerd.io 2>/dev/null
fi
rm -rf /var/lib/docker /var/lib/containerd /etc/docker
spinner_stop
echo -e " ${GREEN}${NC} Docker полностью удалён"
# Удаление скрипта
rm -f /usr/local/bin/gotelegram
echo -e " ${GREEN}${NC} Скрипт gotelegram удалён"
echo ""
echo -e "${GREEN}══════════════════════════════════════════════════${NC}"
echo -e "${GREEN} Полное удаление завершено.${NC}"
echo -e "${GREEN}══════════════════════════════════════════════════${NC}"
echo -e " Для повторной установки используйте команду curl."
read -p " Нажмите Enter для выхода..."
exit 0
}
# ── Выход ────────────────────────────────────────────────────────────────────
show_exit() {
clear
@@ -983,7 +1179,7 @@ while true; do
echo -e " ${GREEN}4)${NC} Перезапустить прокси"
echo -e " ${GREEN}5)${NC} Логи прокси"
echo -e " ${YELLOW}6)${NC} Показать PROMO"
echo -e " ${RED}7)${NC} Удалить прокси"
echo -e " ${RED}7)${NC} Удалить (полное меню удаления)"
echo -e " ${WHITE}0)${NC} Выход"
echo ""
read -p " Пункт: " m_idx
@@ -1008,16 +1204,7 @@ while true; do
read -p "Нажмите Enter..."
;;
6) show_promo ;;
7)
if proxy_is_running; then
docker stop "$CONTAINER_NAME" &>/dev/null
docker rm "$CONTAINER_NAME" &>/dev/null
echo -e "${GREEN}Прокси удалён.${NC}"
else
echo -e "${YELLOW}Прокси не был запущен.${NC}"
fi
read -p "Нажмите Enter..."
;;
7) menu_remove ;;
0) show_exit ;;
*) echo -e "${RED}Неверный ввод.${NC}" ;;
esac