Files
MSWP/install-bot.sh
T
grendervill 6b52501b8d version 1.4.2: фикс кнопок бота и pip-таймауты
- bot.py: лимит 100 кнопок — имена пользователей вместо 2 кнопок на каждого, user_ меню
- install-panel.sh: --retries 1, --timeout 5, timeout 30 на pip, зеркало aliyun
- install-bot.sh: те же таймауты и зеркала
- README: обновлён
2026-06-29 00:36:32 +03:00

187 lines
7.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# =============================================================================
# Установка Telegram-бота для управления mita
# =============================================================================
set -euo pipefail
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'
BLUE='\033[0;34m'; CYAN='\033[0;36m'; BOLD='\033[1m'; NC='\033[0m'
info() { echo -e "${BLUE}[INFO]${NC} $*"; }
ok() { echo -e "${GREEN}[OK]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERROR]${NC} $*"; exit 1; }
section() { echo -e "\n${CYAN}══════ $* ══════${NC}"; }
[[ $EUID -ne 0 ]] && error "Запустите от root: sudo bash install-bot.sh"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BOT_DIR="/opt/mita-bot"
BOT_CONFIG="/etc/mita/bot.json"
# ── поиск bot.py ────────────────────────────────────────────────────
BOT_SRC=""
for candidate in "$SCRIPT_DIR/bot.py" "$SCRIPT_DIR/mita-bot-pkg/bot.py"; do
if [[ -f "$candidate" ]]; then
BOT_SRC="$candidate"
break
fi
done
if [[ -z "$BOT_SRC" ]]; then
error "bot.py не найден рядом со скриптом. Убедитесь что bot.py лежит в одной папке с install-bot.sh"
fi
# ═══════════════════════════════════════════════════════════════════════
section "Установка Telegram-бота mita"
# ── неинтерактивный режим (вызов из веб-панели или API) ────────────
if [[ -n "${BOT_TOKEN_NONINTERACTIVE:-}" && -n "${BOT_ADMIN_NONINTERACTIVE:-}" ]]; then
BOT_TOKEN="$BOT_TOKEN_NONINTERACTIVE"
ADMIN_ID="$BOT_ADMIN_NONINTERACTIVE"
info "Неинтерактивный режим"
else
echo ""
echo -e " ${BOLD}Для работы бота нужны:${NC}"
echo -e " ${YELLOW}1.${NC} Токен бота от @BotFather"
echo -e " ${YELLOW}2.${NC} Ваш Telegram ID (узнать: @userinfobot)"
echo ""
# ── токен ───────────────────────────────────────────────────────────
read -r -p "Введите токен бота (от @BotFather): " BOT_TOKEN
if [[ -z "$BOT_TOKEN" ]]; then
error "Токен не может быть пустым"
fi
# ── admin ID ─────────────────────────────────────────────────────────
read -r -p "Введите ваш Telegram ID (число, узнать через @userinfobot): " ADMIN_ID
if [[ -z "$ADMIN_ID" || ! "$ADMIN_ID" =~ ^[0-9]+$ ]]; then
error "Telegram ID должен быть числом"
fi
fi
echo ""
info "Токен: ${BOT_TOKEN:0:8}..."
info "Admin ID: $ADMIN_ID"
# ── зависимости ─────────────────────────────────────────────────────
section "Установка зависимостей"
apt-get update -qq
apt-get install -y -qq python3 python3-pip python3-venv
BOT_VENV="$BOT_DIR/venv"
if [[ ! -d "$BOT_VENV" ]]; then
python3 -m venv "$BOT_VENV"
fi
info "Установка python-telegram-bot (может занять до минуты)..."
_bot_pip() {
PIP_RETRIES=0 timeout 30 "$BOT_VENV/bin/pip" install -q --disable-pip-version-check --timeout 5 --retries 1 "$@"
}
bot_pip_ok=false
for mirror in "https://pypi.org/simple/" "https://mirrors.aliyun.com/pypi/simple/"; do
if _bot_pip --index-url "$mirror" python-telegram-bot psutil 2>/dev/null; then
bot_pip_ok=true
break
fi
done
if ! $bot_pip_ok; then
warn "pip не смог установить python-telegram-bot. Пробую через apt..."
rm -rf "$BOT_VENV"
python3 -m venv --system-site-packages "$BOT_VENV"
apt-get install -y -qq python3-psutil 2>/dev/null
apt-get install -y -qq python3-telegram-bot 2>/dev/null || \
"$BOT_VENV/bin/pip" install --timeout 15 --index-url https://mirrors.aliyun.com/pypi/simple/ python-telegram-bot 2>/dev/null || {
warn "Не удалось установить зависимости бота."
warn "Установите вручную: /opt/mita-bot/venv/bin/pip install python-telegram-bot psutil"
}
fi
ok "Python-зависимости бота установлены"
# ── копирование файлов ──────────────────────────────────────────────
section "Установка бота"
mkdir -p "$BOT_DIR"
cp "$BOT_SRC" "$BOT_DIR/bot.py"
chmod +x "$BOT_DIR/bot.py"
ok "bot.py скопирован в $BOT_DIR/"
# ── конфиг ──────────────────────────────────────────────────────────
mkdir -p /etc/mita
if [[ -f "$BOT_CONFIG" ]]; then
python3 -c "
import json
with open('$BOT_CONFIG') as f: d=json.load(f)
d['token']='$BOT_TOKEN'
admin_ids=d.get('admin_ids',[])
if '$ADMIN_ID' not in admin_ids: admin_ids.append('$ADMIN_ID')
d['admin_ids']=admin_ids
with open('$BOT_CONFIG','w') as f: json.dump(d,f,indent=2)
"
ok "Конфиг обновлён"
else
cat > "$BOT_CONFIG" <<JSON
{
"token": "$BOT_TOKEN",
"admin_ids": ["$ADMIN_ID"]
}
JSON
ok "Конфиг создан: $BOT_CONFIG"
fi
# ── env файл ────────────────────────────────────────────────────────
cat > "$BOT_DIR/env" <<EOF
BOT_CONFIG=$BOT_CONFIG
BOT_TOKEN=$BOT_TOKEN
EOF
# ── systemd unit ────────────────────────────────────────────────────
cat > /etc/systemd/system/mita-bot.service <<UNIT
[Unit]
Description=mita Telegram Bot
After=network.target
[Service]
Type=simple
WorkingDirectory=$BOT_DIR
EnvironmentFile=$BOT_DIR/env
ExecStart=$BOT_VENV/bin/python3 $BOT_DIR/bot.py
Restart=always
RestartSec=10
User=root
[Install]
WantedBy=multi-user.target
UNIT
systemctl daemon-reload
systemctl enable mita-bot
systemctl restart mita-bot
sleep 2
if systemctl is-active --quiet mita-bot; then
ok "Бот запущен и добавлен в автозагрузку"
else
warn "Бот не запустился. Проверьте: journalctl -u mita-bot -f"
fi
# ═══════════════════════════════════════════════════════════════════════
section "Установка завершена"
echo ""
echo -e " ${GREEN}Бот установлен!${NC}"
echo ""
echo -e " ${BOLD}Команды управления:${NC}"
echo -e " ${YELLOW}systemctl status mita-bot${NC} — статус бота"
echo -e " ${YELLOW}systemctl restart mita-bot${NC} — перезапустить"
echo -e " ${YELLOW}journalctl -u mita-bot -f${NC} — логи"
echo ""
echo -e " ${BOLD}Файлы:${NC}"
echo -e " Бот: ${YELLOW}$BOT_DIR/bot.py${NC}"
echo -e " Конфиг: ${YELLOW}$BOT_CONFIG${NC}"
echo -e " Unit: ${YELLOW}/etc/systemd/system/mita-bot.service${NC}"
echo ""
echo -e " ${BOLD}Для добавления других админов:${NC}"
echo -e " Отредактируйте ${YELLOW}$BOT_CONFIG${NC} и добавьте ID в массив admin_ids,"
echo -e " затем: ${YELLOW}systemctl restart mita-bot${NC}"
echo ""