diff --git a/warp.sh b/warp.sh
index b46a40c..f48def9 100644
--- a/warp.sh
+++ b/warp.sh
@@ -1452,9 +1452,29 @@ bot_handle_callback() {
fi ;;
cl)
+ awg_discover_containers 2>/dev/null
+ if [ ${#AWG_ALL_CONTAINERS[@]} -gt 1 ]; then
+ local t="📦 Выберите контейнер:\n\n"
+ local kbd="["
+ local first=1
+ for ci in "${!AWG_ALL_CONTAINERS[@]}"; do
+ local cn="${AWG_ALL_CONTAINERS[$ci]}"
+ local has_w="☐"
+ docker exec "$cn" sh -c "[ -f '/opt/warp/warp.conf' ]" 2>/dev/null && has_w="✅"
+ [ "$first" -eq 0 ] && kbd+=","
+ kbd+="[{\"text\":\"${has_w} ${cn}\",\"callback_data\":\"cc:${ci}\"}]"
+ t+="${has_w} ${cn}\n"
+ first=0
+ done
+ kbd+=",[{\"text\":\"⬅️ Меню\",\"callback_data\":\"m\"}]]"
+ tg_edit "$chat_id" "$msg_id" "$t" "$kbd"
+ return
+ fi
+ ;&
+ cl_show)
awg_get_client_ips; awg_parse_clients_table; awg_load_clients
local warp_set=" ${AWG_SELECTED_IPS[*]+"${AWG_SELECTED_IPS[*]}"} "
- local t="👥 Клиенты WARP (${#AWG_SELECTED_IPS[@]} из ${#AWG_CLIENT_IPS[@]})\n\n"
+ local t="👥 Клиенты WARP — ${CONTAINER}\n(${#AWG_SELECTED_IPS[@]} из ${#AWG_CLIENT_IPS[@]})\n\n"
local kbd=""
if [ ${#AWG_CLIENT_IPS[@]} -eq 0 ]; then
t+="Нет клиентов в конфиге VPN."
@@ -1483,10 +1503,24 @@ bot_handle_callback() {
first=0
done
kbd+=",[{\"text\":\"✅ Все\",\"callback_data\":\"ct:all\"},{\"text\":\"☐ Никого\",\"callback_data\":\"ct:none\"}]"
- kbd+=",[{\"text\":\"⬅️ Меню\",\"callback_data\":\"m\"}]]"
+ if [ ${#AWG_ALL_CONTAINERS[@]} -gt 1 ]; then
+ kbd+=",[{\"text\":\"📦 Контейнеры\",\"callback_data\":\"cl\"},{\"text\":\"⬅️ Меню\",\"callback_data\":\"m\"}]]"
+ else
+ kbd+=",[{\"text\":\"⬅️ Меню\",\"callback_data\":\"m\"}]]"
+ fi
fi
tg_edit "$chat_id" "$msg_id" "$t" "$kbd" ;;
+ cc:*)
+ local ci="${data#cc:}"
+ awg_discover_containers 2>/dev/null
+ if [[ "$ci" =~ ^[0-9]+$ ]] && (( ci < ${#AWG_ALL_CONTAINERS[@]} )); then
+ CONTAINER="${AWG_ALL_CONTAINERS[$ci]}"
+ save_config_val "CONTAINER" "$CONTAINER"
+ awg_load_container_data 2>/dev/null
+ fi
+ bot_handle_callback "$chat_id" "$msg_id" "" "cl_show" ;;
+
ct:*)
local idx="${data#ct:}"
awg_get_client_ips; awg_load_clients
@@ -1513,19 +1547,25 @@ bot_handle_callback() {
docker restart "$CONTAINER" >/dev/null 2>&1
local _a=0; while [ "$_a" -lt 15 ]; do docker exec "$CONTAINER" sh -c "true" 2>/dev/null && break; sleep 1; ((_a++)); done
log_action "BOT AWG TOGGLE: ${#AWG_SELECTED_IPS[@]}, container restarted"
- bot_handle_callback "$chat_id" "$msg_id" "" "cl" ;;
+ bot_handle_callback "$chat_id" "$msg_id" "" "cl_show" ;;
rc)
if ! has_awg_mode; then
tg_edit "$chat_id" "$msg_id" "ℹ️ Только для AmneziaWG." "$(kbd_back)"; return
fi
- tg_edit "$chat_id" "$msg_id" "🔄 Перезапуск контейнера..." ""
- docker restart "$CONTAINER" >/dev/null 2>&1; sleep 5
- if docker exec "$CONTAINER" sh -c "true" 2>/dev/null; then
- tg_edit "$chat_id" "$msg_id" "✅ Контейнер перезапущен." "$(kbd_back)"; log_action "BOT AWG RESTART"
- else
- tg_edit "$chat_id" "$msg_id" "⚠️ Контейнер не отвечает." "$(kbd_back)"
- fi ;;
+ awg_discover_containers 2>/dev/null
+ local result=""
+ for cn in "${AWG_ALL_CONTAINERS[@]}"; do
+ tg_edit "$chat_id" "$msg_id" "🔄 Перезапуск ${cn}..." ""
+ docker restart "$cn" >/dev/null 2>&1; sleep 5
+ if docker exec "$cn" sh -c "true" 2>/dev/null; then
+ result+="✅ ${cn} перезапущен\n"
+ else
+ result+="⚠️ ${cn} не отвечает\n"
+ fi
+ done
+ tg_edit "$chat_id" "$msg_id" "🔄 Перезапуск контейнеров\n\n${result}" "$(kbd_back)"
+ log_action "BOT AWG RESTART: ${#AWG_ALL_CONTAINERS[@]} containers" ;;
sys)
local s; s=$(get_system_stats)