v2.1: optional routing text, full promo codes, bot wizard, upgrade compat, 3-cycle audit fixes

Made-with: Cursor
This commit is contained in:
anten-ka
2026-03-20 17:49:40 +03:00
parent a0cc78cb1a
commit 29048e6f83

123
warp.sh
View File

@@ -430,7 +430,9 @@ show_3xui_guide() {
echo -e " ${CYAN}(пункт 1 основного подменю показывает полный JSON)${NC}" echo -e " ${CYAN}(пункт 1 основного подменю показывает полный JSON)${NC}"
echo -e "" echo -e ""
echo -e "${YELLOW}═══ НАСТРОЙКА МАРШРУТИЗАЦИИ ═══${NC}\n" echo -e "${YELLOW}═══ МАРШРУТИЗАЦИЯ (по желанию) ═══${NC}\n"
echo -e " ${DIM}По умолчанию WARP не используется пока нет маршрутизации.${NC}"
echo -e " ${DIM}Добавьте правило, чтобы указать какие сайты идут через WARP:${NC}\n"
echo -e "${YELLOW}Шаг 5.${NC} Перейдите в ${WHITE}Настройки Xray${NC}${WHITE}Routing Rules${NC}" echo -e "${YELLOW}Шаг 5.${NC} Перейдите в ${WHITE}Настройки Xray${NC}${WHITE}Routing Rules${NC}"
echo -e "${YELLOW}Шаг 6.${NC} Нажмите ${GREEN}+ Добавить правило${NC}" echo -e "${YELLOW}Шаг 6.${NC} Нажмите ${GREEN}+ Добавить правило${NC}"
echo -e "${YELLOW}Шаг 7.${NC} Заполните:" echo -e "${YELLOW}Шаг 7.${NC} Заполните:"
@@ -441,9 +443,11 @@ show_3xui_guide() {
echo -e " ${GREEN}geosite:netflix${NC}" echo -e " ${GREEN}geosite:netflix${NC}"
echo -e " ${GREEN}geosite:disney${NC}" echo -e " ${GREEN}geosite:disney${NC}"
echo -e " ${GREEN}geosite:spotify${NC}" echo -e " ${GREEN}geosite:spotify${NC}"
echo -e " ${GREEN}domain:chat.openai.com${NC}"
echo -e " ${GREEN}domain:claude.ai${NC}" echo -e " ${GREEN}domain:claude.ai${NC}"
echo -e "" echo -e ""
echo -e " ${DIM}Каждый домен на отдельной строке в поле Domain${NC}" echo -e " ${DIM}Каждый домен на отдельной строке.${NC}"
echo -e " ${DIM}Можно добавить свои домены или использовать network: tcp,udp для всего трафика.${NC}"
echo -e "" echo -e ""
echo -e "${YELLOW}═══ ПРИМЕНЕНИЕ ═══${NC}\n" echo -e "${YELLOW}═══ ПРИМЕНЕНИЕ ═══${NC}\n"
@@ -1453,7 +1457,7 @@ bot_handle_callback() {
tg_edit "$chat_id" "$msg_id" "$s" "$(kbd_back)" ;; tg_edit "$chat_id" "$msg_id" "$s" "$(kbd_back)" ;;
promo) promo)
local pt="<b>🏢 Хостинг</b>\n\n<b>🌍 РФ и Европа</b>\n👉 https://vk.cc/ct29NQ\n\n<code>OFF60</code> — 60%\n<code>antenka20</code> — +20% (ес)\n\n<b>🇧🇾 Беларусь</b>\n👉 https://vk.cc/cUxAhj\n<code>OFF60</code> — 60%" local pt="<b>🏢 Хостинг со скидкой до -60%</b>\n\n<b>🌍 РФ и Европа</b>\n👉 https://vk.cc/ct29NQ\n\n<code>OFF60</code> — 60% скидка\n<code>antenka20</code> — +20% к балансу (ес)\n<code>antenka6</code> — +15% к балансу (ес)\n<code>antenka12</code> — +5% к балансу (12мес)\n\n<b>🇧🇾 Беларусь</b>\n👉 https://vk.cc/cUxAhj\n<code>OFF60</code> — 60% скидка"
tg_edit "$chat_id" "$msg_id" "$pt" "$(kbd_back)" ;; tg_edit "$chat_id" "$msg_id" "$pt" "$(kbd_back)" ;;
esac esac
} }
@@ -1535,41 +1539,88 @@ stop_bot() {
echo -e "${GREEN}[OK] Бот остановлен.${NC}"; log_action "Bot stopped" echo -e "${GREEN}[OK] Бот остановлен.${NC}"; log_action "Bot stopped"
} }
bot_auto_chatid() {
echo -e "${YELLOW} Отправьте боту любое сообщение в Telegram, затем нажмите Enter.${NC}"
read -p " > " _
local c; c=$(curl -s "https://api.telegram.org/bot${BOT_TOKEN}/getUpdates?limit=1&offset=-1" | jq -r '.result[0].message.chat.id // empty')
if [ -n "$c" ]; then
save_config_val "BOT_CHAT_ID" "$c"; BOT_CHAT_ID="$c"
echo -e " ${GREEN}✓ Chat ID: $c${NC}"
return 0
else
echo -e " ${RED}Не удалось определить Chat ID.${NC}"
return 1
fi
}
bot_wizard() {
clear
echo -e "\n${CYAN}━━━ Настройка Telegram-бота (быстрый старт) ━━━${NC}\n"
echo -e "${YELLOW}Шаг 1/3.${NC} Введите токен бота"
echo -e "${DIM} Получить: @BotFather → /newbot → скопировать токен${NC}\n"
read -p " Токен: " t
if [ -z "$t" ]; then echo -e " ${RED}Отменено.${NC}"; read -p "Enter..."; return; fi
save_config_val "BOT_TOKEN" "$t"; BOT_TOKEN="$t"
echo -e " ${GREEN}✓ Токен сохранён${NC}\n"
echo -e "${YELLOW}Шаг 2/3.${NC} Определение Chat ID (авто)"
if ! bot_auto_chatid; then
echo -e "\n ${YELLOW}Chat ID не определён — бот будет доступен всем.${NC}"
echo -e " ${WHITE}Можно задать вручную позже через меню бота (п.3).${NC}"
fi
echo ""
echo -e "${YELLOW}Шаг 3/3.${NC} Запуск бота"
start_bot
echo ""
if systemctl is-active warp-bot &>/dev/null; then
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${GREEN} ✅ Бот настроен и запущен!${NC}"
echo -e "${GREEN} Откройте бота в Telegram и нажмите /start${NC}"
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
else
echo -e "${YELLOW} ⚠ Бот может не запуститься. Проверьте:${NC}"
echo -e " ${WHITE}journalctl -u warp-bot --no-pager -n 10${NC}"
fi
read -p " Enter..."
}
bot_menu() { bot_menu() {
source "$WARP_CONF" 2>/dev/null
if [ -z "${BOT_TOKEN:-}" ]; then
bot_wizard
return
fi
while true; do while true; do
clear; source "$WARP_CONF" 2>/dev/null clear; source "$WARP_CONF" 2>/dev/null
local bs="${RED}Выкл${NC}" local bs="${RED}Выкл${NC}"
[ -f "$BOT_PID_FILE" ] && kill -0 "$(cat "$BOT_PID_FILE" 2>/dev/null)" 2>/dev/null && bs="${GREEN}Вкл ($(cat "$BOT_PID_FILE"))${NC}" systemctl is-active warp-bot &>/dev/null && bs="${GREEN}Вкл${NC}"
local td="нет"; [ -n "${BOT_TOKEN:-}" ] && td="***${BOT_TOKEN: -6}" local td="***${BOT_TOKEN: -6}"
echo -e "${CYAN}━━━ Telegram Bot ━━━${NC}" echo -e "\n${CYAN}━━━ Telegram Bot ━━━${NC}\n"
echo -e "Статус: $bs" echo -e " Статус: $bs"
echo -e "Токен: ${YELLOW}$td${NC}" echo -e " Токен: ${YELLOW}$td${NC}"
echo -e "Chat ID: ${YELLOW}${BOT_CHAT_ID:-нет}${NC}\n" echo -e " Chat ID: ${YELLOW}${BOT_CHAT_ID:-нет}${NC}\n"
echo -e "1) Токен бота" echo -e " 1) Изменить токен"
echo -e "2) Chat ID (авто)" echo -e " 2) Chat ID (авто)"
echo -e "3) Chat ID (вручную)" echo -e " 3) Chat ID (вручную)"
echo -e "4) ${GREEN}Запустить${NC}" echo -e " 4) ${GREEN}Запустить${NC}"
echo -e "5) ${RED}Остановить${NC}" echo -e " 5) ${RED}Остановить${NC}"
echo -e "0) Назад" echo -e " 0) Назад"
read -p "Выбор: " ch echo ""
read -p " Выбор: " ch
case $ch in case $ch in
1) echo "Токен:"; read -p "> " t 1) echo " Токен:"; read -p " > " t
[ -n "$t" ] && save_config_val "BOT_TOKEN" "$t" && BOT_TOKEN="$t" && echo -e "${GREEN}OK${NC}" [ -n "$t" ] && save_config_val "BOT_TOKEN" "$t" && BOT_TOKEN="$t" && echo -e " ${GREEN}OK${NC}"
read -p "Enter..." ;; read -p " Enter..." ;;
2) [ -z "${BOT_TOKEN:-}" ] && echo -e "${RED}Сначала токен!${NC}" && read -p "" && continue 2) bot_auto_chatid; read -p " Enter..." ;;
echo -e "${YELLOW}Отправьте боту сообщение, нажмите Enter.${NC}"; read -p "" 3) echo " Chat ID:"; read -p " > " c
local c; c=$(curl -s "https://api.telegram.org/bot${BOT_TOKEN}/getUpdates?limit=1&offset=-1" | jq -r '.result[0].message.chat.id // empty') [ -n "$c" ] && save_config_val "BOT_CHAT_ID" "$c" && BOT_CHAT_ID="$c" && echo -e " ${GREEN}OK${NC}"
if [ -n "$c" ]; then read -p " Enter..." ;;
save_config_val "BOT_CHAT_ID" "$c"; BOT_CHAT_ID="$c"; echo -e "${GREEN}Chat ID: $c${NC}" 4) start_bot; read -p " Enter..." ;;
else 5) stop_bot; read -p " Enter..." ;;
echo -e "${RED}Не удалось.${NC}"
fi
read -p "Enter..." ;;
3) echo "Chat ID:"; read -p "> " c
[ -n "$c" ] && save_config_val "BOT_CHAT_ID" "$c" && BOT_CHAT_ID="$c" && echo -e "${GREEN}OK${NC}"
read -p "Enter..." ;;
4) start_bot; read -p "Enter..." ;;
5) stop_bot; read -p "Enter..." ;;
0) return ;; 0) return ;;
esac esac
done done
@@ -1759,10 +1810,14 @@ run_startup() {
((s++)) ((s++))
printf " ${CYAN}[%d/%d]${NC} ${YELLOW}${NC} Установка gowarp..." "$s" "$total" printf " ${CYAN}[%d/%d]${NC} ${YELLOW}${NC} Установка gowarp..." "$s" "$total"
local upgrade_msg="установлена"
if [ -f "/usr/local/bin/gowarp" ] && [ "$(readlink -f "$0" 2>/dev/null)" != "/usr/local/bin/gowarp" ]; then
upgrade_msg="обновлена (v${WARP_VERSION})"
fi
if [ "$(readlink -f "$0" 2>/dev/null)" != "/usr/local/bin/gowarp" ]; then if [ "$(readlink -f "$0" 2>/dev/null)" != "/usr/local/bin/gowarp" ]; then
cp -f "$0" "/usr/local/bin/gowarp"; chmod +x "/usr/local/bin/gowarp" cp -f "$0" "/usr/local/bin/gowarp"; chmod +x "/usr/local/bin/gowarp"
fi fi
printf "\r ${CYAN}[%d/%d]${NC} ${GREEN}${NC} Команда gowarp \n" "$s" "$total" printf "\r ${CYAN}[%d/%d]${NC} ${GREEN}${NC} Команда gowarp %s \n" "$s" "$total" "$upgrade_msg"
((s++)) ((s++))
printf " ${CYAN}[%d/%d]${NC} ${YELLOW}${NC} Определение IP..." "$s" "$total" printf " ${CYAN}[%d/%d]${NC} ${YELLOW}${NC} Определение IP..." "$s" "$total"