mirror of
https://github.com/anten-ka/go_warp_pro.git
synced 2026-05-19 19:56:01 +00:00
Bot multi-container: container selector in cl, cc:* handler, rc restarts all, back to containers button
Made-with: Cursor
This commit is contained in:
56
warp.sh
56
warp.sh
@@ -1452,9 +1452,29 @@ bot_handle_callback() {
|
|||||||
fi ;;
|
fi ;;
|
||||||
|
|
||||||
cl)
|
cl)
|
||||||
|
awg_discover_containers 2>/dev/null
|
||||||
|
if [ ${#AWG_ALL_CONTAINERS[@]} -gt 1 ]; then
|
||||||
|
local t="📦 <b>Выберите контейнер:</b>\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} <code>${cn}</code>\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
|
awg_get_client_ips; awg_parse_clients_table; awg_load_clients
|
||||||
local warp_set=" ${AWG_SELECTED_IPS[*]+"${AWG_SELECTED_IPS[*]}"} "
|
local warp_set=" ${AWG_SELECTED_IPS[*]+"${AWG_SELECTED_IPS[*]}"} "
|
||||||
local t="👥 <b>Клиенты WARP</b> (${#AWG_SELECTED_IPS[@]} из ${#AWG_CLIENT_IPS[@]})\n\n"
|
local t="👥 <b>Клиенты WARP</b> — <code>${CONTAINER}</code>\n(${#AWG_SELECTED_IPS[@]} из ${#AWG_CLIENT_IPS[@]})\n\n"
|
||||||
local kbd=""
|
local kbd=""
|
||||||
if [ ${#AWG_CLIENT_IPS[@]} -eq 0 ]; then
|
if [ ${#AWG_CLIENT_IPS[@]} -eq 0 ]; then
|
||||||
t+="<i>Нет клиентов в конфиге VPN.</i>"
|
t+="<i>Нет клиентов в конфиге VPN.</i>"
|
||||||
@@ -1483,10 +1503,24 @@ bot_handle_callback() {
|
|||||||
first=0
|
first=0
|
||||||
done
|
done
|
||||||
kbd+=",[{\"text\":\"✅ Все\",\"callback_data\":\"ct:all\"},{\"text\":\"☐ Никого\",\"callback_data\":\"ct:none\"}]"
|
kbd+=",[{\"text\":\"✅ Все\",\"callback_data\":\"ct:all\"},{\"text\":\"☐ Никого\",\"callback_data\":\"ct:none\"}]"
|
||||||
|
if [ ${#AWG_ALL_CONTAINERS[@]} -gt 1 ]; then
|
||||||
|
kbd+=",[{\"text\":\"📦 Контейнеры\",\"callback_data\":\"cl\"},{\"text\":\"⬅️ Меню\",\"callback_data\":\"m\"}]]"
|
||||||
|
else
|
||||||
kbd+=",[{\"text\":\"⬅️ Меню\",\"callback_data\":\"m\"}]]"
|
kbd+=",[{\"text\":\"⬅️ Меню\",\"callback_data\":\"m\"}]]"
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
tg_edit "$chat_id" "$msg_id" "$t" "$kbd" ;;
|
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:*)
|
ct:*)
|
||||||
local idx="${data#ct:}"
|
local idx="${data#ct:}"
|
||||||
awg_get_client_ips; awg_load_clients
|
awg_get_client_ips; awg_load_clients
|
||||||
@@ -1513,19 +1547,25 @@ bot_handle_callback() {
|
|||||||
docker restart "$CONTAINER" >/dev/null 2>&1
|
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
|
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"
|
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)
|
rc)
|
||||||
if ! has_awg_mode; then
|
if ! has_awg_mode; then
|
||||||
tg_edit "$chat_id" "$msg_id" "ℹ️ Только для AmneziaWG." "$(kbd_back)"; return
|
tg_edit "$chat_id" "$msg_id" "ℹ️ Только для AmneziaWG." "$(kbd_back)"; return
|
||||||
fi
|
fi
|
||||||
tg_edit "$chat_id" "$msg_id" "🔄 Перезапуск контейнера..." ""
|
awg_discover_containers 2>/dev/null
|
||||||
docker restart "$CONTAINER" >/dev/null 2>&1; sleep 5
|
local result=""
|
||||||
if docker exec "$CONTAINER" sh -c "true" 2>/dev/null; then
|
for cn in "${AWG_ALL_CONTAINERS[@]}"; do
|
||||||
tg_edit "$chat_id" "$msg_id" "✅ Контейнер перезапущен." "$(kbd_back)"; log_action "BOT AWG RESTART"
|
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
|
else
|
||||||
tg_edit "$chat_id" "$msg_id" "⚠️ Контейнер не отвечает." "$(kbd_back)"
|
result+="⚠️ ${cn} не отвечает\n"
|
||||||
fi ;;
|
fi
|
||||||
|
done
|
||||||
|
tg_edit "$chat_id" "$msg_id" "🔄 <b>Перезапуск контейнеров</b>\n\n${result}" "$(kbd_back)"
|
||||||
|
log_action "BOT AWG RESTART: ${#AWG_ALL_CONTAINERS[@]} containers" ;;
|
||||||
|
|
||||||
sys)
|
sys)
|
||||||
local s; s=$(get_system_stats)
|
local s; s=$(get_system_stats)
|
||||||
|
|||||||
Reference in New Issue
Block a user