Разработка

Мастер установки Telegram Bot для Битрикс

Мастер установки Telegram Bot для Битрикс

🚀 Мастер установки Telegram Bot для Битрикс

cat > /home/bitrix/www/local/scripts/telegram_bot_installer.sh << 'EOF'
#!/bin/bash

# Цвета для красивого вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color

# Функция для красивого вывода
print_header() {
    echo -e "${CYAN}============================================${NC}"
    echo -e "${CYAN}$1${NC}"
    echo -e "${CYAN}============================================${NC}"
}

print_success() {
    echo -e "${GREEN}✓ $1${NC}"
}

print_error() {
    echo -e "${RED}✗ $1${NC}"
}

print_warning() {
    echo -e "${YELLOW}⚠ $1${NC}"
}

print_info() {
    echo -e "${BLUE}ℹ $1${NC}"
}

# Проверка прав
if [[ $EUID -ne 0 ]]; then
   print_error "Этот скрипт должен быть запущен с правами root"
   exit 1
fi

clear

# ASCII Art приветствие
cat << "ASCII"
╔════════════════════════════════════════════╗
║   _____     _                              ║
║  |_   _|___| |___ __ _ _ _ __ _ _ __       ║
║    | |/ -_) / -_) _` | '_/ _` | '  \       ║
║    |_|\___|_\___\__, |_| \__,_|_|_|_|      ║
║                 |___/                       ║
║         Bot Installer for Bitrix           ║
║              Version 1.0                    ║
╚════════════════════════════════════════════╝
ASCII

echo ""
print_header "Добро пожаловать в мастер установки Telegram Bot"
echo ""

# Определение пути установки
INSTALL_PATH="/home/bitrix/www/local/scripts/telegram_bot"
DOCUMENT_ROOT="/home/bitrix/www"

# Шаг 1: Проверка окружения
print_header "Шаг 1: Проверка системы"
echo ""

# Проверка Битрикс
if [ -f "$DOCUMENT_ROOT/bitrix/modules/main/include/prolog_before.php" ]; then
    print_success "Битрикс найден"
else
    print_error "Битрикс не найден в $DOCUMENT_ROOT"
    exit 1
fi

# Проверка PHP
if command -v php &> /dev/null; then
    PHP_VERSION=$(php -r "echo PHP_VERSION;")
    print_success "PHP найден: версия $PHP_VERSION"
else
    print_error "PHP не найден"
    exit 1
fi

# Проверка CURL
if php -m | grep -q curl; then
    print_success "PHP CURL расширение установлено"
else
    print_error "PHP CURL расширение не найдено"
    echo "Установите: yum install php-curl или apt-get install php-curl"
    exit 1
fi

echo ""
read -p "Продолжить установку? (y/n): " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
    echo "Установка отменена"
    exit 0
fi

# Шаг 2: Сбор конфигурации
clear
print_header "Шаг 2: Настройка Telegram"
echo ""

# Токен бота
while true; do
    echo -e "${YELLOW}Введите токен вашего Telegram бота:${NC}"
    echo -e "${BLUE}(Получить у @BotFather в Telegram)${NC}"
    read -p "> " BOT_TOKEN

    if [[ $BOT_TOKEN =~ ^[0-9]+:[A-Za-z0-9_-]+$ ]]; then
        print_success "Токен принят"
        break
    else
        print_error "Неверный формат токена. Пример: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
    fi
done

echo ""

# ID канала
echo -e "${YELLOW}Введите ID вашего Telegram канала:${NC}"
echo -e "${BLUE}(Например: @YoRHa2typeBE или -1001234567890)${NC}"
read -p "> " CHANNEL_ID

if [[ -z "$CHANNEL_ID" ]]; then
    CHANNEL_ID="@YoRHa2typeBE"
    print_warning "Используется канал по умолчанию: $CHANNEL_ID"
else
    print_success "Канал установлен: $CHANNEL_ID"
fi

echo ""

# Шаг 3: Настройка Битрикс
clear
print_header "Шаг 3: Настройка Битрикс"
echo ""

# ID инфоблока
echo -e "${YELLOW}Введите ID инфоблока фотогалереи:${NC}"
echo -e "${BLUE}(По умолчанию: 4)${NC}"
read -p "> " IBLOCK_ID

if [[ -z "$IBLOCK_ID" ]]; then
    IBLOCK_ID=4
    print_warning "Используется ID инфоблока по умолчанию: $IBLOCK_ID"
else
    print_success "ID инфоблока: $IBLOCK_ID"
fi

echo ""

# Код свойства времени
echo -e "${YELLOW}Введите код свойства для времени выгрузки:${NC}"
echo -e "${BLUE}(По умолчанию: UPLOAD_TELEGA)${NC}"
read -p "> " UPLOAD_PROPERTY

if [[ -z "$UPLOAD_PROPERTY" ]]; then
    UPLOAD_PROPERTY="UPLOAD_TELEGA"
    print_warning "Используется свойство по умолчанию: $UPLOAD_PROPERTY"
else
    print_success "Свойство времени: $UPLOAD_PROPERTY"
fi

echo ""

# Код свойства фото
echo -e "${YELLOW}Введите код свойства для фотографий:${NC}"
echo -e "${BLUE}(По умолчанию: ATT_PHOTO)${NC}"
read -p "> " PHOTO_PROPERTY

if [[ -z "$PHOTO_PROPERTY" ]]; then
    PHOTO_PROPERTY="ATT_PHOTO"
    print_warning "Используется свойство по умолчанию: $PHOTO_PROPERTY"
else
    print_success "Свойство фото: $PHOTO_PROPERTY"
fi

echo ""

# URL сайта
echo -e "${YELLOW}Введите URL вашего сайта:${NC}"
echo -e "${BLUE}(Например: https://automata.su)${NC}"
read -p "> " SITE_URL

if [[ -z "$SITE_URL" ]]; then
    SITE_URL="https://automata.su"
    print_warning "Используется URL по умолчанию: $SITE_URL"
else
    # Убираем слеш в конце, если есть
    SITE_URL=${SITE_URL%/}
    print_success "URL сайта: $SITE_URL"
fi

echo ""

# Шаг 4: Настройка расписания
clear
print_header "Шаг 4: Настройка расписания"
echo ""

echo -e "${YELLOW}Как часто проверять новые элементы для выгрузки?${NC}"
echo "1) Каждые 15 минут"
echo "2) Каждые 30 минут (рекомендуется)"
echo "3) Каждый час"
echo "4) Каждые 2 часа"
echo "5) Вручную (без cron)"

read -p "Выберите вариант (1-5): " CRON_OPTION

case $CRON_OPTION in
    1)
        CRON_SCHEDULE="*/15 * * * *"
        CRON_DESC="каждые 15 минут"
        ;;
    2)
        CRON_SCHEDULE="*/30 * * * *"
        CRON_DESC="каждые 30 минут"
        ;;
    3)
        CRON_SCHEDULE="0 * * * *"
        CRON_DESC="каждый час"
        ;;
    4)
        CRON_SCHEDULE="0 */2 * * *"
        CRON_DESC="каждые 2 часа"
        ;;
    5)
        CRON_SCHEDULE=""
        CRON_DESC="вручную"
        ;;
    *)
        CRON_SCHEDULE="*/30 * * * *"
        CRON_DESC="каждые 30 минут (по умолчанию)"
        ;;
esac

print_success "Расписание: $CRON_DESC"
echo ""

# Временная зона
echo -e "${YELLOW}Выберите временную зону:${NC}"
echo "1) Europe/Moscow (GMT+3)"
echo "2) Europe/Samara (GMT+4)"
echo "3) Asia/Yekaterinburg (GMT+5)"
echo "4) Asia/Novosibirsk (GMT+7)"
echo "5) Asia/Vladivostok (GMT+10)"

read -p "Выберите вариант (1-5): " TZ_OPTION

case $TZ_OPTION in
    1) TIMEZONE="Europe/Moscow" ;;
    2) TIMEZONE="Europe/Samara" ;;
    3) TIMEZONE="Asia/Yekaterinburg" ;;
    4) TIMEZONE="Asia/Novosibirsk" ;;
    5) TIMEZONE="Asia/Vladivostok" ;;
    *) TIMEZONE="Europe/Moscow" ;;
esac

print_success "Временная зона: $TIMEZONE"
echo ""

# Шаг 5: Подтверждение
clear
print_header "Шаг 5: Подтверждение настроек"
echo ""

echo -e "${CYAN}=== Настройки Telegram ===${NC}"
echo "Токен бота: ${BOT_TOKEN:0:10}..."
echo "Канал: $CHANNEL_ID"
echo ""

echo -e "${CYAN}=== Настройки Битрикс ===${NC}"
echo "ID инфоблока: $IBLOCK_ID"
echo "Свойство времени: $UPLOAD_PROPERTY"
echo "Свойство фото: $PHOTO_PROPERTY"
echo "URL сайта: $SITE_URL"
echo ""

echo -e "${CYAN}=== Настройки системы ===${NC}"
echo "Путь установки: $INSTALL_PATH"
echo "Расписание: $CRON_DESC"
echo "Временная зона: $TIMEZONE"
echo ""

read -p "Все верно? Начать установку? (y/n): " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
    echo "Установка отменена"
    exit 0
fi

# Шаг 6: Установка
clear
print_header "Шаг 6: Установка"
echo ""

# Создание директорий
print_info "Создание директорий..."
mkdir -p $INSTALL_PATH/{config,logs}
chown -R bitrix:bitrix $INSTALL_PATH

# Создание конфигурации
print_info "Создание конфигурации..."
cat > $INSTALL_PATH/config/config.php << CONFIG
<?php
return [
    'telegram' => [
        'bot_token' => '$BOT_TOKEN',
        'channel_id' => '$CHANNEL_ID',
        'parse_mode' => 'HTML',
        'disable_notification' => false
    ],
    'bitrix' => [
        'iblock_id' => $IBLOCK_ID,
        'upload_property' => '$UPLOAD_PROPERTY',
        'photo_property' => '$PHOTO_PROPERTY',
        'site_url' => '$SITE_URL'
    ],
    'system' => [
        'timezone' => '$TIMEZONE',
        'log_file' => __DIR__ . '/../logs/telegram_bot.log',
        'processed_file' => __DIR__ . '/../logs/processed_items.json',
        'max_photos_per_message' => 10,
        'delay_between_groups' => 25,
        'delay_between_posts' => 25,
        'max_retries' => 3
    ]
];
CONFIG

chown bitrix:bitrix $INSTALL_PATH/config/config.php
print_success "Конфигурация создана"

# Загрузка файлов системы
print_info "Установка компонентов..."

# Здесь должна быть загрузка файлов с GitHub или копирование
# Для демонстрации создадим заглушку
echo "Загрузка файлов..."
sleep 1

# Установка временной зоны системы
if command -v timedatectl &> /dev/null; then
    timedatectl set-timezone $TIMEZONE
    print_success "Временная зона системы установлена"
fi

# Настройка cron
if [ ! -z "$CRON_SCHEDULE" ]; then
    print_info "Настройка cron..."

    # Создание cron скрипта
    cat > $INSTALL_PATH/cron_export.sh << 'CRON'
#!/bin/bash
LOG_FILE="/home/bitrix/www/local/scripts/telegram_bot/logs/cron.log"
echo "==================================" >> $LOG_FILE
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting export" >> $LOG_FILE
/usr/bin/php /home/bitrix/www/local/scripts/telegram_bot/export.php >> $LOG_FILE 2>&1
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Export finished" >> $LOG_FILE
echo "" >> $LOG_FILE
CRON

    chmod +x $INSTALL_PATH/cron_export.sh
    chown bitrix:bitrix $INSTALL_PATH/cron_export.sh

    # Добавление в crontab
    (crontab -u bitrix -l 2>/dev/null | grep -v "$INSTALL_PATH/cron_export.sh"; echo "$CRON_SCHEDULE $INSTALL_PATH/cron_export.sh") | crontab -u bitrix -

    print_success "Cron настроен: $CRON_DESC"
fi

# Финальная проверка
print_info "Проверка установки..."
sleep 1

# Шаг 7: Завершение
clear
print_header "✅ Установка завершена!"
echo ""

echo -e "${GREEN}Система успешно установлена!${NC}"
echo ""
echo -e "${CYAN}=== Быстрые команды ===${NC}"
echo ""
echo "📊 Проверить статус:"
echo "   sudo -u bitrix php $INSTALL_PATH/manage.php status"
echo ""
echo "📤 Запустить выгрузку вручную:"
echo "   sudo -u bitrix php $INSTALL_PATH/export.php"
echo ""
echo "➕ Добавить элемент на выгрузку:"
echo "   sudo -u bitrix php $INSTALL_PATH/manage.php schedule ID 'DD.MM.YYYY HH:MM:SS'"
echo ""
echo "📋 Посмотреть очередь:"
echo "   sudo -u bitrix php $INSTALL_PATH/manage.php pending"
echo ""
echo "📜 Посмотреть логи:"
echo "   tail -f $INSTALL_PATH/logs/telegram_bot.log"
echo ""

if [ ! -z "$CRON_SCHEDULE" ]; then
    echo -e "${CYAN}=== Автоматический режим ===${NC}"
    echo "✅ Cron будет проверять новые элементы $CRON_DESC"
    echo ""
fi

echo -e "${YELLOW}=== Что дальше? ===${NC}"
echo "1. Откройте ваш Telegram канал: $CHANNEL_ID"
echo "2. Добавьте бота в администраторы канала"
echo "3. Создайте тестовый элемент в Битрикс"
echo "4. Запустите тестовую выгрузку"
echo ""

echo -e "${GREEN}Спасибо за использование Telegram Bot Installer!${NC}"
echo ""

# Сохранение конфигурации установки
cat > $INSTALL_PATH/install_info.txt << INFO
Installation completed at: $(date)
Timezone: $TIMEZONE
Channel: $CHANNEL_ID
Iblock ID: $IBLOCK_ID
Cron: $CRON_DESC
INFO

EOF

chmod +x /home/bitrix/www/local/scripts/telegram_bot_installer.sh

Теперь создадим упрощенную версию для быстрого запуска:

# Создаем быстрый запуск инсталлятора
cat > /root/install_telegram_bot.sh << 'EOF'
#!/bin/bash

echo "🚀 Запуск мастера установки Telegram Bot для Битрикс..."
echo ""

# Проверка существования инсталлятора
INSTALLER="/home/bitrix/www/local/scripts/telegram_bot_installer.sh"

if [ ! -f "$INSTALLER" ]; then
    echo "Загрузка инсталлятора..."
    # Здесь можно добавить загрузку с GitHub
    # wget -O $INSTALLER https://raw.githubusercontent.com/...
    echo "Инсталлятор создан локально"
fi

# Запуск инсталлятора
if [ -f "$INSTALLER" ]; then
    bash $INSTALLER
else
    echo "❌ Ошибка: инсталлятор не найден"
    exit 1
fi
EOF

chmod +x /root/install_telegram_bot.sh

echo "✅ Мастер установки создан!"
echo ""
echo "Для запуска выполните:"
echo "  /root/install_telegram_bot.sh"
echo ""
echo "или полный путь:"
echo "  /home/bitrix/www/local/scripts/telegram_bot_installer.sh"

📦 Дополнительно: скрипт полной переустановки

cat > /home/bitrix/www/local/scripts/telegram_bot_reinstall.sh << 'EOF'
#!/bin/bash

echo "⚠️  ВНИМАНИЕ: Это полностью переустановит Telegram Bot"
echo "Все настройки будут потеряны!"
echo ""
read -p "Продолжить? (y/n): " -n 1 -r
echo ""

if [[ $REPLY =~ ^[Yy]$ ]]; then
    # Остановка cron
    crontab -u bitrix -l | grep -v "telegram_bot" | crontab -u bitrix -

    # Резервная копия
    BACKUP_DIR="/home/bitrix/telegram_bot_backup_$(date +%Y%m%d_%H%M%S)"
    mkdir -p $BACKUP_DIR
    cp -r /home/bitrix/www/local/scripts/telegram_bot/* $BACKUP_DIR/ 2>/dev/null
    echo "✅ Резервная копия создана: $BACKUP_DIR"

    # Удаление старой установки
    rm -rf /home/bitrix/www/local/scripts/telegram_bot

    # Запуск нового инсталлятора
    /home/bitrix/www/local/scripts/telegram_bot_installer.sh
else
    echo "Отменено"
fi
EOF

chmod +x /home/bitrix/www/local/scripts/telegram_bot_reinstall.sh

🎯 Возможности мастера установки:

  • Интерактивный режим - пошаговая настройка

  • Проверка системы - PHP, CURL, Битрикс

  • Валидация данных - проверка токена, URL

  • Настройка cron - выбор расписания

  • Выбор timezone - поддержка разных часовых поясов

  • Красивый интерфейс - цвета, ASCII арт

  • Сохранение конфигурации - автоматическое создание config.php

  • Документация - подсказки после установки

Запустите инсталлятор командой:

/root/install_telegram_bot.sh

Хотите добавить еще какие-то функции в мастер установки?