From 3b7765124aa7b27a43ac72dbcc1b821f99f41dd5 Mon Sep 17 00:00:00 2001 From: anten-ka Date: Sun, 22 Mar 2026 16:58:02 +0300 Subject: [PATCH] Simplify bot: single Chat ID, remove multi-admin, auto-detect without Enter (polls 30s) Made-with: Cursor --- warp.sh | 134 ++++++++++++++------------------------------------------ 1 file changed, 34 insertions(+), 100 deletions(-) diff --git a/warp.sh b/warp.sh index 8f6c181..d33d2c5 100644 --- a/warp.sh +++ b/warp.sh @@ -1636,14 +1636,14 @@ bot_daemon() { cbi=$(echo "$upd" | jq -r '.callback_query.id') cci=$(echo "$upd" | jq -r '.callback_query.message.chat.id') cmi=$(echo "$upd" | jq -r '.callback_query.message.message_id') - if ! is_bot_admin "$cci"; then tg_answer_cb "$cbi" "Нет доступа" > /dev/null; continue; fi + [ -n "$BOT_CHAT_ID" ] && [ "$cci" != "$BOT_CHAT_ID" ] && { tg_answer_cb "$cbi" "Нет доступа" > /dev/null; continue; } bot_handle_callback "$cci" "$cmi" "$cbi" "$cbd" else local mci mtx mci=$(echo "$upd" | jq -r '.message.chat.id // empty') mtx=$(echo "$upd" | jq -r '.message.text // empty') if [ -n "$mci" ] && [ -n "$mtx" ]; then - if ! is_bot_admin "$mci"; then tg_send "$mci" "⛔ Нет доступа.\nChat ID: $mci" "" > /dev/null; continue; fi + [ -n "$BOT_CHAT_ID" ] && [ "$mci" != "$BOT_CHAT_ID" ] && { tg_send "$mci" "⛔ Нет доступа.\nChat ID: $mci" "" > /dev/null; continue; } if [[ "$mtx" == "/start" || "$mtx" == "/menu" ]]; then bot_main_menu "$mci" else @@ -1686,45 +1686,6 @@ stop_bot() { echo -e "${GREEN}[OK] Бот остановлен.${NC}"; log_action "Bot stopped" } -is_bot_admin() { - local id="$1" - [ -z "${BOT_CHAT_ID:-}" ] && return 0 - local admin - for admin in $BOT_CHAT_ID; do - [ "$admin" = "$id" ] && return 0 - done - return 1 -} - -bot_add_admin() { - local new_id="$1" - [ -z "$new_id" ] && return 1 - local already=0 - local admin - for admin in $BOT_CHAT_ID; do - [ "$admin" = "$new_id" ] && already=1 && break - done - if [ "$already" -eq 0 ]; then - if [ -n "${BOT_CHAT_ID:-}" ]; then - BOT_CHAT_ID="${BOT_CHAT_ID} ${new_id}" - else - BOT_CHAT_ID="$new_id" - fi - save_config_val "BOT_CHAT_ID" "$BOT_CHAT_ID" - fi - return 0 -} - -bot_remove_admin() { - local rm_id="$1" - local -a new_list=() - for admin in $BOT_CHAT_ID; do - [ "$admin" != "$rm_id" ] && new_list+=("$admin") - done - BOT_CHAT_ID="${new_list[*]+"${new_list[*]}"}" - save_config_val "BOT_CHAT_ID" "$BOT_CHAT_ID" -} - bot_auto_chatid() { systemctl disable warp-bot 2>/dev/null systemctl stop warp-bot 2>/dev/null @@ -1735,15 +1696,24 @@ bot_auto_chatid() { if [ -n "$last_uid" ]; then curl -s "https://api.telegram.org/bot${BOT_TOKEN}/getUpdates?offset=$((last_uid + 1))&limit=1" >/dev/null 2>&1 fi - echo -e "${YELLOW} Отправьте боту 3 любых сообщения в Telegram.${NC}" - echo -e "${YELLOW} Затем нажмите Enter.${NC}" - read -p " > " _ - sleep 1 - local resp; resp=$(curl -s --max-time 10 "https://api.telegram.org/bot${BOT_TOKEN}/getUpdates?limit=10") - local c; c=$(echo "$resp" | jq -r '[.result[].message.chat.id // empty] | map(select(. != "")) | unique | first // empty' 2>/dev/null) + echo -e "${YELLOW} Отправьте боту любое сообщение в Telegram.${NC}" + echo -e "${YELLOW} Ожидаю до 30 секунд...${NC}" + local attempts=0 + local c="" + while [ "$attempts" -lt 6 ]; do + sleep 5 + local resp; resp=$(curl -s --max-time 5 "https://api.telegram.org/bot${BOT_TOKEN}/getUpdates?limit=5") + c=$(echo "$resp" | jq -r '[.result[].message.chat.id // empty] | map(select(. != "")) | unique | first // empty' 2>/dev/null) + if [ -n "$c" ] && [[ "$c" =~ ^[0-9-]+$ ]]; then + break + fi + ((attempts++)) + echo -ne " ${DIM}Жду сообщение... ($((attempts*5))/30с)${NC}\r" + done + echo "" if [ -n "$c" ] && [[ "$c" =~ ^[0-9-]+$ ]]; then - bot_add_admin "$c" - echo -e " ${GREEN}✓ Chat ID: $c (добавлен как админ)${NC}" + 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}" @@ -1752,14 +1722,14 @@ bot_auto_chatid() { echo -e " ${CYAN}1.${NC} Откройте ${GREEN}@userinfobot${NC} в Telegram" echo -e " ${CYAN}2.${NC} Нажмите /start" echo -e " ${CYAN}3.${NC} Скопируйте число ${WHITE}Id: XXXXXXXX${NC}" - echo -e " ${CYAN}4.${NC} Впишите через меню бота (п. Добавить админа)" + echo -e " ${CYAN}4.${NC} Впишите через меню бота (п.4)" return 1 fi } bot_wizard() { clear - echo -e "\n${CYAN}━━━ Настройка Telegram-бота (быстрый старт) ━━━${NC}\n" + echo -e "\n${CYAN}━━━ Настройка Telegram-бота ━━━${NC}\n" echo -e "${YELLOW}Шаг 1/3.${NC} Введите токен бота" echo -e "${DIM} Получить: @BotFather → /newbot → скопировать токен${NC}\n" @@ -1768,10 +1738,10 @@ bot_wizard() { save_config_val "BOT_TOKEN" "$t"; BOT_TOKEN="$t" echo -e " ${GREEN}✓ Токен сохранён${NC}\n" - echo -e "${YELLOW}Шаг 2/3.${NC} Определение Chat ID (авто)" + echo -e "${YELLOW}Шаг 2/3.${NC} Определение Chat ID" + echo -e "${DIM} Отправьте боту сообщение в Telegram — ID определится автоматически${NC}\n" if ! bot_auto_chatid; then - echo -e "\n ${YELLOW}Chat ID не определён — бот будет доступен всем.${NC}" - echo -e " ${WHITE}Можно задать вручную позже через меню бота (п.3).${NC}" + echo -e "\n ${YELLOW}Можно задать вручную через меню бота (п.4).${NC}" fi echo "" @@ -1791,20 +1761,6 @@ bot_wizard() { read -p " Enter..." } -bot_show_admins() { - echo -e "\n ${CYAN}Администраторы бота:${NC}" - if [ -z "${BOT_CHAT_ID:-}" ]; then - echo -e " ${YELLOW}Нет (бот доступен всем)${NC}" - else - local i=1 - for admin in $BOT_CHAT_ID; do - echo -e " ${GREEN}$i)${NC} $admin" - ((i++)) - done - fi - echo "" -} - bot_menu() { source "$WARP_CONF" 2>/dev/null if [ -z "${BOT_TOKEN:-}" ]; then @@ -1817,26 +1773,17 @@ bot_menu() { local bs="${RED}Выкл${NC}" systemctl is-active warp-bot &>/dev/null && bs="${GREEN}Вкл${NC}" local td="***${BOT_TOKEN: -6}" - local admin_count=0 - [ -n "${BOT_CHAT_ID:-}" ] && admin_count=$(echo "$BOT_CHAT_ID" | wc -w) echo -e "\n${CYAN}━━━ Telegram Bot ━━━${NC}\n" echo -e " Статус: $bs" echo -e " Токен: ${YELLOW}$td${NC}" - echo -e " Админов: ${YELLOW}${admin_count}${NC}\n" - - echo -e " ${CYAN}── Управление ──${NC}" + echo -e " Chat ID: ${YELLOW}${BOT_CHAT_ID:-нет (доступен всем)}${NC}\n" echo -e " 1) ${GREEN}Запустить${NC}" echo -e " 2) ${RED}Остановить${NC}" echo -e " 3) Изменить токен" - - echo -e "\n ${CYAN}── Администраторы ──${NC}" - echo -e " 4) Показать админов" - echo -e " 5) Добавить админа (авто — по сообщению)" - echo -e " 6) Добавить админа (вручную — Chat ID)" - echo -e " 7) Убрать админа" - - echo -e "\n 0) Назад" + echo -e " 4) Задать Chat ID (вручную)" + echo -e " 5) Определить Chat ID (авто)" + echo -e " 0) Назад" echo "" read -p " Выбор: " ch case $ch in @@ -1845,31 +1792,18 @@ bot_menu() { 3) echo " Токен:"; read -p " > " t [ -n "$t" ] && save_config_val "BOT_TOKEN" "$t" && BOT_TOKEN="$t" && echo -e " ${GREEN}OK${NC}" read -p " Enter..." ;; - 4) bot_show_admins; read -p " Enter..." ;; - 5) bot_auto_chatid; read -p " Enter..." ;; - 6) echo -e "\n ${WHITE}Как узнать Chat ID: откройте ${GREEN}@userinfobot${WHITE} → /start → скопируйте Id${NC}" + 4) echo -e "\n ${WHITE}Узнать Chat ID: ${GREEN}@userinfobot${WHITE} → /start → скопируйте Id${NC}" echo " Chat ID:"; read -p " > " c if [ -n "$c" ] && [[ "$c" =~ ^[0-9-]+$ ]]; then - bot_add_admin "$c" - echo -e " ${GREEN}✓ Админ $c добавлен${NC}" + save_config_val "BOT_CHAT_ID" "$c"; BOT_CHAT_ID="$c" + echo -e " ${GREEN}✓ Chat ID: $c${NC}" + echo -e " ${YELLOW}Перезапустите бота (п.1) чтобы применить.${NC}" else echo -e " ${RED}Некорректный ID${NC}" fi read -p " Enter..." ;; - 7) if [ -z "${BOT_CHAT_ID:-}" ]; then - echo -e "\n ${YELLOW}Нет админов.${NC}"; read -p " Enter..."; continue - fi - bot_show_admins - echo " Номер для удаления (0 — отмена):" - read -p " > " num - if [ "$num" != "0" ] && [[ "$num" =~ ^[0-9]+$ ]]; then - local -a admins=($BOT_CHAT_ID) - if (( num >= 1 && num <= ${#admins[@]} )); then - local rm_id="${admins[$((num-1))]}" - bot_remove_admin "$rm_id" - echo -e " ${GREEN}✓ Админ $rm_id удалён${NC}" - fi - fi + 5) bot_auto_chatid + echo -e " ${YELLOW}Перезапустите бота (п.1) чтобы применить.${NC}" read -p " Enter..." ;; 0) return ;; esac