telegram-cli-bot/install.sh

258 lines
9.6 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 CLI Bot
# Автоматически устанавливает зависимости (npm + pip) и qwen-code
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Функции вывода
info() { echo -e "${BLUE} $1${NC}"; }
success() { echo -e "${GREEN}$1${NC}"; }
warning() { echo -e "${YELLOW}⚠️ $1${NC}"; }
error() { echo -e "${RED}$1${NC}"; }
# Проверка: новая установка или обновление
if [ -f "$SCRIPT_DIR/.installed" ]; then
INSTALL_TYPE="update"
INSTALLED_VERSION=$(cat "$SCRIPT_DIR/.installed" 2>/dev/null || echo "unknown")
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🔄 Обновление Telegram CLI Bot"
echo "📦 Текущая версия: $INSTALLED_VERSION"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
else
INSTALL_TYPE="install"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🚀 Установка Telegram CLI Bot"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
fi
# ============================================================================
# Проверка системных требований
# ============================================================================
echo "📋 Проверка системных требований..."
# Проверка Python
if command -v python3 &> /dev/null; then
PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}')
success "Python: $PYTHON_VERSION"
else
error "Python3 не найден!"
echo "Установите Python 3.10 или выше:"
echo " Ubuntu/Debian: sudo apt install python3 python3-pip python3-venv"
echo " Fedora: sudo dnf install python3 python3-pip"
exit 1
fi
# Проверка pip
if command -v pip3 &> /dev/null || command -v pip &> /dev/null; then
PIP_CMD=$(command -v pip3 2>/dev/null || command -v pip 2>/dev/null)
success "pip: $(pip3 --version 2>&1 | head -1 || pip --version 2>&1 | head -1)"
else
error "pip не найден!"
echo "Установите pip:"
echo " Ubuntu/Debian: sudo apt install python3-pip"
exit 1
fi
# Проверка Node.js и npm
if command -v node &> /dev/null; then
NODE_VERSION=$(node --version)
success "Node.js: $NODE_VERSION"
else
warning "Node.js не найден"
echo "Node.js требуется для qwen-code (ИИ-агент)."
echo "Установить Node.js?"
read -p "y/n: " INSTALL_NODE
if [[ "$INSTALL_NODE" =~ ^[Yy]$ ]]; then
# Установка Node.js
if [ -f /etc/debian_version ]; then
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
elif [ -f /etc/redhat-release ]; then
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
sudo yum install -y nodejs
else
echo "Установите Node.js вручную: https://nodejs.org/"
exit 1
fi
success "Node.js установлен"
else
warning "Пропущена установка Node.js (qwen-code не будет работать)"
fi
fi
# Проверка npm
if command -v npm &> /dev/null; then
NPM_VERSION=$(npm --version)
success "npm: $NPM_VERSION"
else
warning "npm не найден (qwen-code не будет работать)"
fi
# ============================================================================
# Установка qwen-code через npm
# ============================================================================
if command -v npm &> /dev/null; then
echo ""
echo "📦 Установка qwen-code..."
# Проверяем установлен ли уже qwen-code
if npm list -g @qwen-code/qwen-code &> /dev/null; then
info "qwen-code уже установлен, проверяем обновления..."
npm update -g @qwen-code/qwen-code
success "qwen-code обновлён"
else
info "Установка qwen-code глобально..."
npm install -g @qwen-code/qwen-code
success "qwen-code установлен"
fi
# Проверка установки
if command -v qwen &> /dev/null; then
QWEN_VERSION=$(qwen --version 2>&1 | head -1 || echo "unknown")
success "qwen: $QWEN_VERSION"
else
warning "qwen не найден в PATH, пробуем добавить..."
# Пробуем найти qwen в глобальных npm
QWEN_PATH=$(npm root -g)/@qwen-code/qwen-code/cli.js
if [ -f "$QWEN_PATH" ]; then
export PATH="$PATH:$(npm root -g)/@qwen-code/qwen-code"
success "qwen добавлен в PATH"
fi
fi
else
warning "npm не найден — qwen-code не установлен"
echo "Для работы ИИ-агента установите npm и выполните:"
echo " npm install -g @qwen-code/qwen-code"
fi
# ============================================================================
# Создание/обновление виртуального окружения Python
# ============================================================================
echo ""
echo "🐍 Настройка Python окружения..."
if [ ! -d "venv" ]; then
info "Создание виртуального окружения..."
python3 -m venv venv
success "Виртуальное окружение создано"
else
info "Виртуальное окружение найдено"
fi
# Активация виртуального окружения
source venv/bin/activate
# Обновление pip
info "Обновление pip..."
pip install -q --upgrade pip
# Установка зависимостей
echo ""
echo "📦 Установка Python зависимостей..."
if [ -f "requirements.txt" ]; then
pip install -q -r requirements.txt
success "Зависимости установлены"
else
error "requirements.txt не найден!"
exit 1
fi
# ============================================================================
# Настройка .env файла
# ============================================================================
echo ""
echo "⚙️ Настройка конфигурации..."
if [ ! -f ".env" ]; then
if [ -f ".env.example" ]; then
info "Создание .env из .env.example..."
cp .env.example .env
warning "Требуется настроить .env файл!"
echo ""
echo "Отредактируйте .env и укажите:"
echo " 1. TELEGRAM_BOT_TOKEN — токен от @BotFather"
echo " 2. ALLOWED_USERS — ваш Telegram ID"
echo " 3. SERVERS — SSH серверы (опционально)"
echo ""
echo "Или запустите ./run.sh для интерактивной настройки"
fi
else
info ".env файл найден"
fi
# ============================================================================
# Сохранение версии
# ============================================================================
# Получаем версию из git или создаём timestamp
if command -v git &> /dev/null && [ -d ".git" ]; then
VERSION=$(git describe --tags --always 2>/dev/null || git rev-parse --short HEAD)
else
VERSION=$(date +%Y%m%d-%H%M%S)
fi
echo "$VERSION" > "$SCRIPT_DIR/.installed"
success "Версия: $VERSION"
# ============================================================================
# Итоги
# ============================================================================
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
if [ "$INSTALL_TYPE" = "update" ]; then
success "Обновление завершено!"
else
success "Установка завершена!"
fi
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "📁 Директория: $SCRIPT_DIR"
echo "📦 Версия: $VERSION"
echo ""
# Проверка готовности
READY=true
if [ ! -f ".env" ]; then
warning "Не настроен .env файл"
READY=false
fi
if ! grep -q "^TELEGRAM_BOT_TOKEN=" .env 2>/dev/null || grep -q "TELEGRAM_BOT_TOKEN=123456789" .env 2>/dev/null; then
warning "Не установлен TELEGRAM_BOT_TOKEN в .env"
READY=false
fi
if [ "$READY" = true ]; then
echo "✅ Бот готов к запуску!"
echo ""
echo "Запуск:"
echo " ./run.sh"
echo ""
echo "Или в фоновом режиме:"
echo " nohup ./run.sh > bot.log 2>&1 &"
else
echo "⚠️ Требуется настройка перед запуском:"
echo " 1. Отредактируйте .env"
echo " 2. Установите TELEGRAM_BOT_TOKEN"
echo " 3. Настройте ALLOWED_USERS"
echo ""
echo "Затем запустите:"
echo " ./run.sh"
fi
echo ""