fix: admin ID при установке бота, check_port с полными путями ss, промо хостинг #2 в боте

Made-with: Cursor
This commit is contained in:
anten-ka
2026-03-06 19:42:52 +03:00
parent 45d9287780
commit 938daf7bb7

View File

@@ -395,9 +395,19 @@ menu_setup_bot() {
if systemctl is-active --quiet "$SERVICE_NAME" 2>/dev/null; then
echo -e " Статус бота: ${GREEN}работает${NC}"
echo ""
# Показываем текущие настройки
local cur_ids
cur_ids=$(grep "^ALLOWED_IDS=" "$BOT_DIR/.env" 2>/dev/null | cut -d= -f2)
if [ -n "$cur_ids" ]; then
echo -e " Администратор(ы): ${WHITE}$cur_ids${NC}"
else
echo -e " Администратор: ${YELLOW}не задан (бот доступен всем)${NC}"
fi
echo ""
echo -e " 1) Обновить файлы бота и перезапустить"
echo -e " 2) Изменить BOT_TOKEN"
echo -e " 3) Остановить бота"
echo -e " 3) Изменить администратора (ALLOWED_IDS)"
echo -e " 4) Остановить бота"
echo -e " 0) Назад"
local sub
read -p " Выбор: " sub
@@ -414,7 +424,7 @@ menu_setup_bot() {
read -r tok
tok=$(echo "$tok" | tr -d '[:space:]')
if [ -n "$tok" ]; then
echo "BOT_TOKEN=$tok" > "$BOT_DIR/.env"
sed -i "s/^BOT_TOKEN=.*/BOT_TOKEN=$tok/" "$BOT_DIR/.env"
chmod 600 "$BOT_DIR/.env"
systemctl restart "$SERVICE_NAME"
echo -e "${GREEN}[*] Токен обновлён, бот перезапущен.${NC}"
@@ -423,6 +433,23 @@ menu_setup_bot() {
fi
;;
3)
echo -e "${YELLOW}Введите Telegram ID администратора (или несколько через запятую):${NC}"
echo -e " ${CYAN}Узнать ID: @userinfobot, @getmyid_bot или @RawDataBot${NC}"
echo -e " ${CYAN}Оставьте пустым — бот будет доступен всем.${NC}"
local new_ids
read -r new_ids
new_ids=$(echo "$new_ids" | tr -d '[:space:]')
# Удаляем старую строку ALLOWED_IDS
sed -i "/^ALLOWED_IDS=/d" "$BOT_DIR/.env"
if [ -n "$new_ids" ]; then
echo "ALLOWED_IDS=$new_ids" >> "$BOT_DIR/.env"
echo -e "${GREEN}[*] Администратор(ы): $new_ids. Перезапуск...${NC}"
else
echo -e "${GREEN}[*] Ограничение снято, бот доступен всем. Перезапуск...${NC}"
fi
systemctl restart "$SERVICE_NAME"
;;
4)
systemctl stop "$SERVICE_NAME"
echo -e "${YELLOW}Бот остановлен.${NC}"
;;
@@ -466,19 +493,41 @@ menu_setup_bot() {
# venv + pip
install_bot_deps
# BOT_TOKEN
# BOT_TOKEN + ALLOWED_IDS
if [ ! -f "$BOT_DIR/.env" ]; then
echo ""
echo -e "${YELLOW}Введите BOT_TOKEN от @BotFather:${NC}"
echo -e " ${CYAN}(Откройте @BotFather в Telegram → /newbot → скопируйте токен)${NC}"
local TOKEN=""
while [ -z "$TOKEN" ]; do
read -r TOKEN
TOKEN=$(echo "$TOKEN" | tr -d '[:space:]')
[ -z "$TOKEN" ] && echo -e "${RED}Токен не может быть пустым.${NC}"
done
echo "BOT_TOKEN=$TOKEN" > "$BOT_DIR/.env"
echo ""
echo -e "${YELLOW}Введите ваш Telegram ID (администратор бота):${NC}"
echo -e " ${CYAN}Как узнать свой ID:${NC}"
echo -e " • Бот ${WHITE}@userinfobot${NC} — напишите ему /start"
echo -e " • Бот ${WHITE}@getmyid_bot${NC} — напишите ему /start"
echo -e " • Бот ${WHITE}@RawDataBot${NC} — напишите ему /start"
echo -e " ${CYAN}Можно указать несколько через запятую: 123456,789012${NC}"
echo -e " ${CYAN}Оставьте пустым, чтобы бот был доступен всем.${NC}"
local ADMIN_IDS=""
read -r ADMIN_IDS
ADMIN_IDS=$(echo "$ADMIN_IDS" | tr -d '[:space:]')
{
echo "BOT_TOKEN=$TOKEN"
[ -n "$ADMIN_IDS" ] && echo "ALLOWED_IDS=$ADMIN_IDS"
} > "$BOT_DIR/.env"
chmod 600 "$BOT_DIR/.env"
echo -e "${GREEN}[*] .env создан.${NC}"
if [ -n "$ADMIN_IDS" ]; then
echo -e "${GREEN}[*] .env создан. Администратор(ы): $ADMIN_IDS${NC}"
else
echo -e "${GREEN}[*] .env создан. Бот доступен всем пользователям.${NC}"
fi
else
echo -e "${GREEN}[*] .env уже есть — используем существующий.${NC}"
fi
@@ -586,10 +635,12 @@ async def check_port(port):
if await proxy_running():
hp = await docker_val("{{range $p,$c := .HostConfig.PortBindings}}{{(index $c 0).HostPort}} {{end}}")
if str(port) in hp.split(): return None
code, out, _ = await sh("ss","-tlnp", timeout=5)
if code != 0: code, out, _ = await sh("netstat","-tlnp", timeout=5)
for cmd in ["/usr/sbin/ss", "/sbin/ss", "ss", "netstat"]:
code, out, _ = await sh(cmd, "-tlnp", timeout=5)
if code == 0 and out:
for line in out.splitlines():
if f":{port} " in line or f":{port}\t" in line: return line
if re.search(rf":{port}\b", line): return line
return None
return None
async def docker_containers_info():
@@ -763,8 +814,12 @@ async def cmd_promo(update, ctx):
msg = update.message or (update.callback_query and update.callback_query.message)
if not update.effective_user or not msg: return
if not _ok(update.effective_user.id): return
text = ("💰 <b>Хостинг со скидкой до -60%</b>\n"
f"Ссылка: {PROMO_LINK}\n\nПромокоды: OFF60, antenka20, antenka6, antenka12\n\nДонат: {TIP_LINK}")
text = ("💰 <b>Хостинг со скидкой до -60%</b>\n\n"
f"<b>Хостинг #1:</b> {PROMO_LINK}\n"
"Промокоды: OFF60, antenka20, antenka6, antenka12\n\n"
"<b>Хостинг #2:</b> https://vk.cc/cUxAhj\n"
"Промокод: OFF60\n\n"
f"☕ Донат: {TIP_LINK}")
kb = InlineKeyboardMarkup([[InlineKeyboardButton("◀️ Меню", callback_data="menu_main")]])
if update.callback_query:
await update.callback_query.edit_message_text(text, parse_mode="HTML", reply_markup=kb)