mirror of
https://github.com/anten-ka/go_warp_pro.git
synced 2026-05-19 19:46:10 +00:00
Simplify bot: single Chat ID, remove multi-admin, auto-detect without Enter (polls 30s)
Made-with: Cursor
This commit is contained in:
134
warp.sh
134
warp.sh
@@ -1636,14 +1636,14 @@ bot_daemon() {
|
|||||||
cbi=$(echo "$upd" | jq -r '.callback_query.id')
|
cbi=$(echo "$upd" | jq -r '.callback_query.id')
|
||||||
cci=$(echo "$upd" | jq -r '.callback_query.message.chat.id')
|
cci=$(echo "$upd" | jq -r '.callback_query.message.chat.id')
|
||||||
cmi=$(echo "$upd" | jq -r '.callback_query.message.message_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"
|
bot_handle_callback "$cci" "$cmi" "$cbi" "$cbd"
|
||||||
else
|
else
|
||||||
local mci mtx
|
local mci mtx
|
||||||
mci=$(echo "$upd" | jq -r '.message.chat.id // empty')
|
mci=$(echo "$upd" | jq -r '.message.chat.id // empty')
|
||||||
mtx=$(echo "$upd" | jq -r '.message.text // empty')
|
mtx=$(echo "$upd" | jq -r '.message.text // empty')
|
||||||
if [ -n "$mci" ] && [ -n "$mtx" ]; then
|
if [ -n "$mci" ] && [ -n "$mtx" ]; then
|
||||||
if ! is_bot_admin "$mci"; then tg_send "$mci" "⛔ Нет доступа.\nChat ID: <code>$mci</code>" "" > /dev/null; continue; fi
|
[ -n "$BOT_CHAT_ID" ] && [ "$mci" != "$BOT_CHAT_ID" ] && { tg_send "$mci" "⛔ Нет доступа.\nChat ID: <code>$mci</code>" "" > /dev/null; continue; }
|
||||||
if [[ "$mtx" == "/start" || "$mtx" == "/menu" ]]; then
|
if [[ "$mtx" == "/start" || "$mtx" == "/menu" ]]; then
|
||||||
bot_main_menu "$mci"
|
bot_main_menu "$mci"
|
||||||
else
|
else
|
||||||
@@ -1686,45 +1686,6 @@ stop_bot() {
|
|||||||
echo -e "${GREEN}[OK] Бот остановлен.${NC}"; log_action "Bot stopped"
|
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() {
|
bot_auto_chatid() {
|
||||||
systemctl disable warp-bot 2>/dev/null
|
systemctl disable warp-bot 2>/dev/null
|
||||||
systemctl stop warp-bot 2>/dev/null
|
systemctl stop warp-bot 2>/dev/null
|
||||||
@@ -1735,15 +1696,24 @@ bot_auto_chatid() {
|
|||||||
if [ -n "$last_uid" ]; then
|
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
|
curl -s "https://api.telegram.org/bot${BOT_TOKEN}/getUpdates?offset=$((last_uid + 1))&limit=1" >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
echo -e "${YELLOW} Отправьте боту 3 любых сообщения в Telegram.${NC}"
|
echo -e "${YELLOW} Отправьте боту любое сообщение в Telegram.${NC}"
|
||||||
echo -e "${YELLOW} Затем нажмите Enter.${NC}"
|
echo -e "${YELLOW} Ожидаю до 30 секунд...${NC}"
|
||||||
read -p " > " _
|
local attempts=0
|
||||||
sleep 1
|
local c=""
|
||||||
local resp; resp=$(curl -s --max-time 10 "https://api.telegram.org/bot${BOT_TOKEN}/getUpdates?limit=10")
|
while [ "$attempts" -lt 6 ]; do
|
||||||
local c; c=$(echo "$resp" | jq -r '[.result[].message.chat.id // empty] | map(select(. != "")) | unique | first // empty' 2>/dev/null)
|
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
|
if [ -n "$c" ] && [[ "$c" =~ ^[0-9-]+$ ]]; then
|
||||||
bot_add_admin "$c"
|
save_config_val "BOT_CHAT_ID" "$c"; BOT_CHAT_ID="$c"
|
||||||
echo -e " ${GREEN}✓ Chat ID: $c (добавлен как админ)${NC}"
|
echo -e " ${GREEN}✓ Chat ID: $c${NC}"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
echo -e " ${RED}✗ Не удалось определить Chat ID.${NC}"
|
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}1.${NC} Откройте ${GREEN}@userinfobot${NC} в Telegram"
|
||||||
echo -e " ${CYAN}2.${NC} Нажмите /start"
|
echo -e " ${CYAN}2.${NC} Нажмите /start"
|
||||||
echo -e " ${CYAN}3.${NC} Скопируйте число ${WHITE}Id: XXXXXXXX${NC}"
|
echo -e " ${CYAN}3.${NC} Скопируйте число ${WHITE}Id: XXXXXXXX${NC}"
|
||||||
echo -e " ${CYAN}4.${NC} Впишите через меню бота (п. Добавить админа)"
|
echo -e " ${CYAN}4.${NC} Впишите через меню бота (п.4)"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
bot_wizard() {
|
bot_wizard() {
|
||||||
clear
|
clear
|
||||||
echo -e "\n${CYAN}━━━ Настройка Telegram-бота (быстрый старт) ━━━${NC}\n"
|
echo -e "\n${CYAN}━━━ Настройка Telegram-бота ━━━${NC}\n"
|
||||||
|
|
||||||
echo -e "${YELLOW}Шаг 1/3.${NC} Введите токен бота"
|
echo -e "${YELLOW}Шаг 1/3.${NC} Введите токен бота"
|
||||||
echo -e "${DIM} Получить: @BotFather → /newbot → скопировать токен${NC}\n"
|
echo -e "${DIM} Получить: @BotFather → /newbot → скопировать токен${NC}\n"
|
||||||
@@ -1768,10 +1738,10 @@ bot_wizard() {
|
|||||||
save_config_val "BOT_TOKEN" "$t"; BOT_TOKEN="$t"
|
save_config_val "BOT_TOKEN" "$t"; BOT_TOKEN="$t"
|
||||||
echo -e " ${GREEN}✓ Токен сохранён${NC}\n"
|
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
|
if ! bot_auto_chatid; then
|
||||||
echo -e "\n ${YELLOW}Chat ID не определён — бот будет доступен всем.${NC}"
|
echo -e "\n ${YELLOW}Можно задать вручную через меню бота (п.4).${NC}"
|
||||||
echo -e " ${WHITE}Можно задать вручную позже через меню бота (п.3).${NC}"
|
|
||||||
fi
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
@@ -1791,20 +1761,6 @@ bot_wizard() {
|
|||||||
read -p " Enter..."
|
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() {
|
bot_menu() {
|
||||||
source "$WARP_CONF" 2>/dev/null
|
source "$WARP_CONF" 2>/dev/null
|
||||||
if [ -z "${BOT_TOKEN:-}" ]; then
|
if [ -z "${BOT_TOKEN:-}" ]; then
|
||||||
@@ -1817,26 +1773,17 @@ bot_menu() {
|
|||||||
local bs="${RED}Выкл${NC}"
|
local bs="${RED}Выкл${NC}"
|
||||||
systemctl is-active warp-bot &>/dev/null && bs="${GREEN}Вкл${NC}"
|
systemctl is-active warp-bot &>/dev/null && bs="${GREEN}Вкл${NC}"
|
||||||
local td="***${BOT_TOKEN: -6}"
|
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 "\n${CYAN}━━━ Telegram Bot ━━━${NC}\n"
|
||||||
echo -e " Статус: $bs"
|
echo -e " Статус: $bs"
|
||||||
echo -e " Токен: ${YELLOW}$td${NC}"
|
echo -e " Токен: ${YELLOW}$td${NC}"
|
||||||
echo -e " Админов: ${YELLOW}${admin_count}${NC}\n"
|
echo -e " Chat ID: ${YELLOW}${BOT_CHAT_ID:-нет (доступен всем)}${NC}\n"
|
||||||
|
|
||||||
echo -e " ${CYAN}── Управление ──${NC}"
|
|
||||||
echo -e " 1) ${GREEN}Запустить${NC}"
|
echo -e " 1) ${GREEN}Запустить${NC}"
|
||||||
echo -e " 2) ${RED}Остановить${NC}"
|
echo -e " 2) ${RED}Остановить${NC}"
|
||||||
echo -e " 3) Изменить токен"
|
echo -e " 3) Изменить токен"
|
||||||
|
echo -e " 4) Задать Chat ID (вручную)"
|
||||||
echo -e "\n ${CYAN}── Администраторы ──${NC}"
|
echo -e " 5) Определить Chat ID (авто)"
|
||||||
echo -e " 4) Показать админов"
|
echo -e " 0) Назад"
|
||||||
echo -e " 5) Добавить админа (авто — по сообщению)"
|
|
||||||
echo -e " 6) Добавить админа (вручную — Chat ID)"
|
|
||||||
echo -e " 7) Убрать админа"
|
|
||||||
|
|
||||||
echo -e "\n 0) Назад"
|
|
||||||
echo ""
|
echo ""
|
||||||
read -p " Выбор: " ch
|
read -p " Выбор: " ch
|
||||||
case $ch in
|
case $ch in
|
||||||
@@ -1845,31 +1792,18 @@ bot_menu() {
|
|||||||
3) echo " Токен:"; read -p " > " t
|
3) 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..." ;;
|
||||||
4) bot_show_admins; read -p " Enter..." ;;
|
4) echo -e "\n ${WHITE}Узнать Chat ID: ${GREEN}@userinfobot${WHITE} → /start → скопируйте Id${NC}"
|
||||||
5) bot_auto_chatid; read -p " Enter..." ;;
|
|
||||||
6) echo -e "\n ${WHITE}Как узнать Chat ID: откройте ${GREEN}@userinfobot${WHITE} → /start → скопируйте Id${NC}"
|
|
||||||
echo " Chat ID:"; read -p " > " c
|
echo " Chat ID:"; read -p " > " c
|
||||||
if [ -n "$c" ] && [[ "$c" =~ ^[0-9-]+$ ]]; then
|
if [ -n "$c" ] && [[ "$c" =~ ^[0-9-]+$ ]]; then
|
||||||
bot_add_admin "$c"
|
save_config_val "BOT_CHAT_ID" "$c"; BOT_CHAT_ID="$c"
|
||||||
echo -e " ${GREEN}✓ Админ $c добавлен${NC}"
|
echo -e " ${GREEN}✓ Chat ID: $c${NC}"
|
||||||
|
echo -e " ${YELLOW}Перезапустите бота (п.1) чтобы применить.${NC}"
|
||||||
else
|
else
|
||||||
echo -e " ${RED}Некорректный ID${NC}"
|
echo -e " ${RED}Некорректный ID${NC}"
|
||||||
fi
|
fi
|
||||||
read -p " Enter..." ;;
|
read -p " Enter..." ;;
|
||||||
7) if [ -z "${BOT_CHAT_ID:-}" ]; then
|
5) bot_auto_chatid
|
||||||
echo -e "\n ${YELLOW}Нет админов.${NC}"; read -p " Enter..."; continue
|
echo -e " ${YELLOW}Перезапустите бота (п.1) чтобы применить.${NC}"
|
||||||
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
|
|
||||||
read -p " Enter..." ;;
|
read -p " Enter..." ;;
|
||||||
0) return ;;
|
0) return ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
Reference in New Issue
Block a user