# 🚦 Управление ботом — полная инструкция

## 📋 Скрипты управления

В папке `/home/matrixhasyou/domovoy_bot/` есть 3 скрипта:

| Скрипт | Описание |
|--------|----------|
| `./run.sh` | **Умный запуск** — проверяет на дубликаты, спрашивает что делать |
| `./start.sh` | **Жёсткий запуск** — убивает старый процесс, запускает новый |
| `./stop.sh` | **Остановка** — корректно останавливает бота |

---

## 🎯 В чём была проблема?

### Сценарий "Как ты создал двух ботов":

1. Ты запустил `./run.sh` → бот запустился (PID 1)
2. Ты **не закрыл терминал**, открыл новое окно
3. Запустил `./run.sh` снова → создался **второй процесс** (PID 2)
4. Telegram получал запросы от **двух ботов одновременно**
5. Ошибка: `Conflict: terminated by other getUpdates request`

### Почему так произошло?

**`run.sh` запускал бота в foreground** (на переднем плане):
```bash
python main.py  # Работает пока терминал открыт
```

Если открыть **второй терминал** и запустить снова — создаётся второй процесс!

---

## ✅ Как теперь (исправлено)

### `./run.sh` — умный запуск:

```bash
./run.sh
```

**Что делает:**
1. Проверяет — запущен ли бот
2. Если запущен — **спрашивает**: остановить или выйти
3. Запускает в **фоне** (nohup)
4. Показывает PID и логи

**Пример:**
```
⚠️  Бот уже запущен (PID: 12345)!

Выберите действие:
  1) Остановить и перезапустить бота
  2) Выйти (бот продолжит работать)

Ваш выбор (1/2):
```

---

### `./start.sh` — жёсткий запуск:

```bash
./start.sh
```

**Что делает:**
1. **Убивает все процессы бота** (pkill -9)
2. Запускает заново в фоне
3. Показывает логи

**Используй когда:**
- Бот "заглючил"
- Не знаешь сколько процессов запущено
- Хочешь просто перезапустить

---

### `./stop.sh` — остановка:

```bash
./stop.sh
```

**Что делает:**
1. Находит все процессы бота
2. Корректно останавливает
3. Если не получается — убивает силой

---

## 🧪 Проверка статуса

### Узнать запущен ли бот:
```bash
pgrep -f "python.*main.py"
```

Если вернёт число (PID) — бот работает.

### Посмотреть логи:
```bash
cd /home/matrixhasyou/domovoy_bot
tail -f logs/bot.log
```

### Посмотреть все процессы:
```bash
ps aux | grep "python.*main" | grep -v grep
```

---

## 📊 Типовые сценарии

### 1️⃣ Первый запуск:
```bash
cd /home/matrixhasyou/domovoy_bot
./run.sh
```

### 2️⃣ Перезапуск после изменений:
```bash
./start.sh
```

### 3️⃣ Остановка:
```bash
./stop.sh
```

### 4️⃣ Проверка работы:
```bash
tail -f logs/bot.log
```

---

## 🐛 Если что-то пошло не так

### "Бот не отвечает"

1. Проверь процессы:
   ```bash
   pgrep -f "python.*main.py"
   ```

2. Если пусто — бот не запущен:
   ```bash
   ./run.sh
   ```

3. Если есть PID — смотри логи:
   ```bash
   tail -f logs/bot.log
   ```

### "Ошибка Conflict: terminated by other getUpdates"

**Значит:** Запущено **два или больше процессов** бота.

**Решение:**
```bash
# Остановить всё
./stop.sh

# Запустить заново
./start.sh
```

### "Бот завис"

**Решение:**
```bash
# Убить силой
pkill -9 -f "python.*main.py"

# Запустить
./start.sh
```

---

## 💡 Почему теперь два бота не запустятся?

### В `run.sh`:
```bash
EXISTING_PID=$(pgrep -f "python.*main.py")

if [ -n "$EXISTING_PID" ]; then
    # Бот уже запущен!
    # Спрашиваем что делать
fi
```

### В `start.sh`:
```bash
# Убиваем ВСЕ процессы перед запуском
pkill -9 -f "python.*main.py"
```

### Запуск в фоне:
```bash
nohup python main.py >> logs/bot.log 2>&1 &
```

**`nohup`** — работает даже после закрытия терминала  
**`&`** — запускает в фоне  
**`>> logs/bot.log`** — пишет логи в файл

---

## 📚 Команды для управления

| Команда | Что делает |
|---------|------------|
| `./run.sh` | Умный запуск (спрашивает) |
| `./start.sh` | Жёсткий запуск (убивает старый) |
| `./stop.sh` | Остановка |
| `pgrep -f "python.*main.py"` | Проверка запущен ли |
| `tail -f logs/bot.log` | Смотреть логи |
| `pkill -f "python.*main.py"` | Остановить вручную |
| `pkill -9 -f "python.*main.py"` | Убить силой |

---

## ✅ Золотое правило

**Всегда используй скрипты!**

❌ **НЕ запускай напрямую:**
```bash
python main.py  # Плохо!
```

✅ **Используй скрипты:**
```bash
./run.sh    # Хорошо!
./start.sh  # Тоже хорошо!
```

---

**Теперь два бота никогда не запустятся одновременно!** 🎉
