From d84271110cced8b37a50971b0cef276c60ef9e9d Mon Sep 17 00:00:00 2001 From: mirivlad Date: Wed, 25 Feb 2026 14:57:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=D1=87=D0=B0=D1=82=20=D1=81=20=D0=98?= =?UTF-8?q?=D0=98=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= =?UTF-8?q?=20+=20systemd=20=D1=81=D0=B5=D1=80=D0=B2=D0=B8=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Изменения: 1. Чат с ИИ агентом теперь включен по умолчанию (ai_chat_mode=True) - При первом запуске бота чат с ИИ активен - Кнопка в меню показывает '✅ Выключить чат с ИИ' - Пользователь может выключить через настройки 2. Systemd сервис для автозапуска бота - telegram-bot.service - шаблон сервиса - install-systemd-service.sh - скрипт установки - Поддержка start/stop/restart/status - Логирование через journalctl - Security hardening (NoNewPrivileges, ProtectSystem) 3. Обновлена документация в README - Добавлен раздел про systemd сервис - Версия обновлена до 0.7.0 Co-authored-by: Qwen-Coder --- README.md | 50 ++++++++++++++++++++++++++- bot/models/user_state.py | 2 +- install-systemd-service.sh | 71 ++++++++++++++++++++++++++++++++++++++ telegram-bot.service | 24 +++++++++++++ 4 files changed, 145 insertions(+), 2 deletions(-) create mode 100755 install-systemd-service.sh create mode 100644 telegram-bot.service diff --git a/README.md b/README.md index fc6c750..c67fc1b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Бот для выполнения CLI команд на вашем ПК через Telegram с многоуровневым меню и гибкой настройкой. -**Версия:** 0.6.0 +**Версия:** 0.7.0 ## Возможности @@ -51,6 +51,54 @@ nano .env --- +## 🔧 Установка как systemd сервис (автозапуск) + +Для работы бота в фоновом режиме и автоматического запуска после перезагрузки: + +### 1. Настройка .env + +Убедитесь что `.env` файл существует и содержит все необходимые переменные: + +```bash +cp .env.example .env +nano .env +``` + +### 2. Установка сервиса + +```bash +sudo ./install-systemd-service.sh +``` + +Скрипт: +- Создаст systemd сервис в `/etc/systemd/system/telegram-bot.service` +- Включит автозапуск при загрузке +- Настроит логирование через journalctl + +### 3. Управление сервисом + +```bash +# Запуск +sudo systemctl start telegram-bot + +# Остановка +sudo systemctl stop telegram-bot + +# Перезапуск +sudo systemctl restart telegram-bot + +# Статус +sudo systemctl status telegram-bot + +# Автозапуск при загрузке +sudo systemctl enable telegram-bot + +# Просмотр логов +sudo journalctl -u telegram-bot -f +``` + +--- + ## 📦 Подробная установка ### Требования diff --git a/bot/models/user_state.py b/bot/models/user_state.py index 44b1512..c986fe5 100644 --- a/bot/models/user_state.py +++ b/bot/models/user_state.py @@ -16,7 +16,7 @@ class UserState: working_directory: Optional[str] = None current_server: str = "local" # Имя текущего сервера editing_server: Optional[str] = None # Имя сервера, который редактируем - ai_chat_mode: bool = False # Режим чата с ИИ агентом + ai_chat_mode: bool = True # Режим чата с ИИ агентом (включен по умолчанию) ai_chat_history: List[str] = field(default_factory=list) # История диалога с ИИ messages_since_fact_extract: int = 0 # Счётчик для извлечения фактов diff --git a/install-systemd-service.sh b/install-systemd-service.sh new file mode 100755 index 0000000..61e7fdb --- /dev/null +++ b/install-systemd-service.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# Скрипт установки systemd сервиса для Telegram CLI Bot + +set -e + +BOT_USER="${BOT_USER:-$USER}" +BOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BOT_VENV="${BOT_DIR}/venv" +SERVICE_FILE="${BOT_DIR}/telegram-bot.service" +SYSTEMD_SERVICE="/etc/systemd/system/telegram-bot.service" + +echo "🔧 Установка systemd сервиса для Telegram CLI Bot" +echo "==================================================" +echo "Пользователь: $BOT_USER" +echo "Директория: $BOT_DIR" +echo "Venv: $BOT_VENV" +echo "" + +# Проверка что скрипт запущен от root или через sudo +if [ "$EUID" -ne 0 ]; then + echo "❌ Запустите скрипт от имени root (sudo ./install-systemd-service.sh)" + exit 1 +fi + +# Проверка существования файлов +if [ ! -f "$BOT_DIR/bot.py" ]; then + echo "❌ bot.py не найден в $BOT_DIR" + exit 1 +fi + +if [ ! -f "$BOT_VENV/bin/python" ]; then + echo "❌ Venv не найден в $BOT_VENV" + echo " Запустите: source $BOT_DIR/venv/bin/activate && pip install -r requirements.txt" + exit 1 +fi + +if [ ! -f "$BOT_DIR/.env" ]; then + echo "⚠️ .env файл не найден. Создайте его:" + echo " cp $BOT_DIR/.env.example $BOT_DIR/.env" + echo " и отредактируйте переменные окружения" + exit 1 +fi + +# Создаём systemd сервис из шаблона +echo "📝 Создание systemd сервиса..." +sed -e "s|%USER%|$BOT_USER|g" \ + -e "s|%WORKDIR%|$BOT_DIR|g" \ + -e "s|%VENV_PATH%|$BOT_VENV/bin|g" \ + "$SERVICE_FILE" > "$SYSTEMD_SERVICE" + +echo "✅ Сервис установлен в $SYSTEMD_SERVICE" + +# Перезагружаем systemd и включаем сервис +echo "🔄 Перезагрузка systemd..." +systemctl daemon-reload + +echo "🚀 Включение сервиса..." +systemctl enable telegram-bot + +echo "" +echo "✅ Установка завершена!" +echo "" +echo "Управление сервисом:" +echo " sudo systemctl start telegram-bot - Запустить бота" +echo " sudo systemctl stop telegram-bot - Остановить бота" +echo " sudo systemctl restart telegram-bot - Перезапустить бота" +echo " sudo systemctl status telegram-bot - Проверить статус" +echo "" +echo "Просмотр логов:" +echo " sudo journalctl -u telegram-bot -f - Логи в реальном времени" +echo " sudo journalctl -u telegram-bot --since today - Логи за сегодня" diff --git a/telegram-bot.service b/telegram-bot.service new file mode 100644 index 0000000..8d56160 --- /dev/null +++ b/telegram-bot.service @@ -0,0 +1,24 @@ +[Unit] +Description=Telegram CLI Bot +After=network.target + +[Service] +Type=simple +User=%USER% +WorkingDirectory=%WORKDIR% +Environment="PATH=%VENV_PATH%" +ExecStart=%VENV_PATH%/python bot.py +Restart=always +RestartSec=10 +StandardOutput=journal +StandardError=journal +SyslogIdentifier=telegram-bot + +# Security hardening +NoNewPrivileges=true +ProtectSystem=strict +ProtectHome=read-only +PrivateTmp=true + +[Install] +WantedBy=multi-user.target