# News Bot для Linux Gaming

Автоматизированный бот для публикации новостей с сайта linux-gaming.ru в Telegram, VK и опционально в Discord.

## ✨ Особенности

- **Модульная архитектура** - каждая платформа в отдельном модуле
- **Опциональный Discord** - можно включать/отключать через конфигурацию
- **Обработка контента** - автоматическая конвертация HTML в markdown
- **Дедупликация** - исключение повторных публикаций
- **Планировщик** - автоматическое выполнение каждые 30 минут
- **Цветное логирование** - удобная отладка и мониторинг

## 🚀 Быстрый старт

### 1. Установка зависимостей

```bash
# Основные зависимости
pip3 install telethon requests schedule colorlog html2text beautifulsoup4

# Для Discord (опционально)
pip3 install discord.py
```

### 2. Конфигурация

```bash
# Скопировать пример конфигурации
cp keys_example.py keys.py

# Отредактировать keys.py с вашими API ключами
nano keys.py
```

### 3. Запуск

```bash
# Новый модульный бот (рекомендуется)
python3 news-bot-modular.py

# Или старый монолитный бот
python3 news-bot.py
```

## 📁 Структура проекта

```
├── news-bot-modular.py     # Новый основной файл
├── news-bot.py            # Старый монолитный файл
├── config.py              # Централизованная конфигурация
├── logger.py              # Настройка логирования
├── content_processor.py   # Обработка контента
├── telegram_client.py     # Telegram API клиент
├── vk_client.py          # VK API клиент
├── discord_client.py     # Discord API клиент (опциональный)
├── site_api.py           # API сайта linux-gaming.ru
├── del-tests.py          # Утилита очистки каналов
├── keys_example.py       # Пример конфигурации
└── keys.py               # Реальная конфигурация (создается вручную)
```

## ⚙️ Конфигурация

Настройки в файле `keys.py`:

| Параметр | Описание | Обязательный |
|----------|----------|--------------|
| `api_key_site` | Ключ API сайта | ✅ |
| `api_id_tg` | Telegram API ID | ✅ |
| `api_hash_tg` | Telegram API Hash | ✅ |
| `channel_username_tg` | Telegram канал | ✅ |
| `api_key_vk` | VK API ключ | ✅ |
| `user_token_vk` | VK пользовательский токен | ✅ |
| `own_id` | ID VK группы/страницы | ✅ |
| `discord_enabled` | Включить Discord | ❌ (по умолчанию False) |
| `discord_token` | Discord бот токен | ❌ (если Discord включен) |
| `dicord_channel` | Discord канал ID | ❌ (если Discord включен) |
| `cat_num` | Номер категории новостей | ✅ (по умолчанию 8) |
| `start_topic_id` | Стартовый ID темы | ✅ (по умолчанию 0) |

## 🔧 Модули

### ContentProcessor
Обрабатывает и форматирует контент:
- Конвертация HTML → Markdown
- Удаление дубликатов ссылок
- Форматирование под каждую платформу

### TelegramNewsClient  
- Асинхронная работа с Telegram API
- Обработка FloodWait ошибок
- Проверка существующих сообщений

### VKClient
- Публикация в VK
- Специальная обработка для постов о скриптах
- Прикрепление ссылок и изображений

### DiscordClient (опциональный)
- Включается/выключается через конфигурацию
- Автоматическая проверка зависимостей
- Разбивка длинных сообщений

### SiteAPI
- Получение новостей с сайта
- Мониторинг новых версий скриптов
- Публикация обновлений

## 🎯 Использование

```python
from news_bot_modular import NewsBot

bot = NewsBot()

# Проверить статус модулей
print("Telegram:", bot.telegram_client.is_enabled())
print("VK:", bot.vk_client.is_enabled()) 
print("Discord:", bot.discord_client.is_enabled())

# Запустить бота
bot.start()
```

## ⚡ Быстрые команды

```bash
# Полная переустановка
rm -rf venv keys.py *.session
bash setup_venv.sh
cp keys_example.py keys.py

# Обновление зависимостей
source venv/bin/activate
pip install --upgrade -r requirements.txt

# Проверка всех модулей
python3 -c "from news_bot_modular import NewsBot; bot = NewsBot(); print('✓ Все модули загружены успешно')"
```

## 🛠 Утилиты и скрипты

### Управление ботом
```bash
# Запуск бота через виртуальное окружение
bash run_bot.sh

# Прямой запуск (если venv активировано)
python3 news-bot-modular.py

# Системная установка как сервис
bash install-service.sh

# Управление сервисом
bash service-control.sh start    # Запуск
bash service-control.sh stop     # Остановка
bash service-control.sh restart  # Перезапуск
bash service-control.sh status   # Статус
```

### Обслуживание
```bash
# Очистка каналов от тестовых сообщений
python3 del-tests.py

# Переустановка виртуального окружения
rm -rf venv
bash setup_venv.sh

# Проверка синтаксиса
python3 -m py_compile news-bot-modular.py
python3 -m py_compile telegram_client.py
```

## 🐛 Отладка

Логи с цветовой маркировкой:
- 🔵 DEBUG - детальная информация
- 🟢 INFO - основные события  
- 🟡 WARNING - предупреждения
- 🔴 ERROR - ошибки
- ⚪ CRITICAL - критические ошибки

## 🚀 Развертывание на сервере

### Быстрое развертывание
```bash
# 1. Клонирование репозитория
git clone <repository-url>
cd bot-news-linux-gaming

# 2. Автоматическая установка
bash setup_venv.sh

# 3. Конфигурация
cp keys_example.py keys.py
nano keys.py  # Заполнить все API ключи

# 4. Тестовый запуск
bash run_bot.sh
```

### Установка как системный сервис
```bash
# После настройки конфигурации
bash install-service.sh

# Управление сервисом
sudo systemctl start bot-news-linux-gaming
sudo systemctl enable bot-news-linux-gaming  # Автозапуск
sudo systemctl status bot-news-linux-gaming   # Проверка статуса

# Просмотр логов
journalctl -u bot-news-linux-gaming -f
```

### Требования к серверу
- **ОС**: Ubuntu 20.04+ / Debian 11+
- **Python**: 3.8+
- **Память**: минимум 512MB RAM
- **Диск**: 100MB свободного места
- **Сеть**: доступ к интернету для API запросов

## 🔧 Конфигурация топиков Telegram

Для публикации в конкретном топике супергруппы:

```python
# В файле keys.py добавить:
telegram_topic_id = 123456  # ID первого сообщения топика
```

ID топика можно получить:
1. Перейти в топик супергруппы
2. Скопировать ссылку на первое сообщение топика
3. ID будет в конце ссылки: `/c/channel_id/topic_id`

## 📝 Лицензия

Этот проект является частной разработкой для автоматизации публикации новостей Linux Gaming.