pip in stall -r requirements.txt
Автоматизация ведения Telegram-каналов: сбор новостей из RSS, обработка текстов генеративным ИИ (рерайт/форматирование) и публикация по расписанию. Поддержка нескольких каналов, гибкие настройки и административная панель.
- Возможности
- Технологический стек
- Быстрый старт
- Переменные окружения
- Как пользоваться
- Структура проекта
- Политика по изображениям
- Логи и отладка
- Типичные ошибки и решения
- Роадмап
- Лицензия
- Мульти-канальность: неограниченное число каналов с отдельными настройками.
- Ручное управление источниками: вы сами добавляете/удаляете RSS-ленты на канал.
- ИИ-обработка: рерайт новостей (GPT-совместимые модели), автоэмодзи и хештеги.
- Автоформатирование:
- Заголовок — жирным,
- ключевая мысль — курсивной цитатой,
- добавляются релевантные эмодзи и хештеги.
- Постинг по расписанию: индивидуальные интервалы публикаций для каждого канала.
- Жёсткая политика изображений: публикуются только новости с картинкой в RSS.
- Админ-панель: статистика пользователей, каналов и постов.
- Python 3.10+
- Aiogram 3.x — Telegram-бот (async).
- SQLAlchemy — ORM.
- APScheduler — планировщик фоновых задач.
- G4F — доступ к генеративным моделям (коммьюнити-библиотека; при желании можно подключить официальный OpenAI API).
- Feedparser, aiohttp, BeautifulSoup4, Pillow
- python-dotenv, markdown2
git clone <URL_ВАШЕГО_РЕПО>
cd <ПАПКА_ПРОЕКТА># Windows
python -m venv .venv
.venv\Scripts\activate
# macOS/Linux
python3 -m venv .venv
source .venv/bin/activateУбедитесь, что requirements.txt содержит:
aiogram
g4f
feedparser
apscheduler
sqlalchemy
aiohttp
beautifulsoup4
Pillow
python-dotenv
markdown2
Затем:
pip install -r requirements.txt
Создайте файл .env (не коммитьте его в репозиторий):
# Токен бота от @BotFather
BOT_TOKEN=YOUR_TELEGRAM_BOT_TOKEN
# Строка подключения к БД
DATABASE_URL=sqlite:///bot.db
# ID администраторов (через запятую, без пробелов)
ADMIN_IDS=123456789,987654321
# Необязательно: временная зона и уровень логов
TZ=Europe/Kyiv
LOG_LEVEL=INFO
# Необязательно: ключ для официального OpenAI API (если решите использовать)
# OPENAI_API_KEY=sk-...
⚠️ Безопасность: Никогда не публикуйте реальныеBOT_TOKEN/ключи в README, коммитах или скриншотах.
python main.py- Запустите бота и отправьте
/start. - Откроется главное меню с опциями «Мои каналы» и «Добавить канал».
- Нажмите «➕ Добавить канал».
- Добавьте бота в администраторы нужного канала с правом публикации.
- Отправьте:
@usernameканала, или- публичную ссылку
https://t.me/<channel>, или - пересланное сообщение из вашего канала.
- Укажите тематику (например, «IT-новости») — это улучшает форматирование постов ИИ.
- 📝 Очередь постов — просмотр ожидающих публикаций.
- 📰 RSS источники — добавление/удаление лент.
- 🤖 Настройки AI — выбор модели и системного промпта.
- ⏰ Расписание — интервал между постами.
- ✍️ Создать пост — разовый поиск/обработка/публикация из RSS.
- ⏸️ Пауза/Старт — остановка/возобновление автопостинга.
- 🗑️ Удалить канал — полное удаление данных канала у бота.
/start— главное меню/my_channels— список ваших каналов/add_channel— добавление канала/admin— админ-панель (для ID изADMIN_IDS)
├── admin/ # Админ-панель
│ ├── auth.py
│ └── panel.py
├── bot/ # Хендлеры, клавиатуры
│ ├── handlers.py
│ └── keyboards.py
├── config/ # Конфигурация/настройки
│ └── settings.py
├── core/ # Бизнес-логика
│ ├── ai_processor.py # Рерайт/форматирование ИИ
│ ├── publisher.py # Публикация в Telegram
│ ├── rss_parser.py # Парсинг RSS
│ └── scheduler.py # Планировщик задач
├── database/ # Доступ к БД
│ ├── crud.py
│ └── models.py
├── utils/ # Утилиты/хелперы
│ └── helpers.py
├── main.py # Точка входа
├── requirements.txt
└── .env # Переменные окружения (локально, в .gitignore)
Бот публикует только те материалы, где в RSS уже присутствует изображение (enclosure/media:content/og:image и т.д.). Посты без картинок игнорируются для единообразия ленты и визуальной целостности канала.
- Рекомендуется настраивать уровень логов через
LOG_LEVEL(DEBUG/INFO/WARNING/ERROR). - Планировщик (APScheduler) пишет события о старте/пропуске/ошибках задач.
- Для продакшена можно:
- запускать бота под
systemd/pm2/supervisor; - включить ротацию логов (например,
logging.handlers.RotatingFileHandler); - фиксировать таймзону
TZдля единообразия расписания.
- запускать бота под
-
Бот не публикует в канал
- Проверьте, добавлен ли бот в администраторы канала с правом публикации.
- Убедитесь, что выбран правильный канал в меню.
- Ошибки вида
ChatAdminRequired— не хватает прав.
-
Дубли постов / пропуски
- Убедитесь, что в планировщике не создаются двойные задания для одного и того же канала.
- Следите за временем выполнения задач: если обработка дольше интервала — увеличьте интервал.
-
Пост без изображения не публикуется
- Это ожидаемо по политике: берутся только элементы с картинками.
-
Ошибки G4F/провайдеров
- Попробуйте сменить провайдера/повторить запрос.
- Рассмотрите официальный OpenAI API (
OPENAI_API_KEY) как более стабильную альтернативу.
-
Flood-limit / Too Many Requests
- Добавьте
asyncio.sleep()между публикациями или используйте бэк-офф.
- Добавьте
- Шаблоны форматирования для разных тематик каналов
- Превью поста перед публикацией
- Интеграция с OpenAI API как опциональный бэкенд
- Поддержка UTM-меток/шортлинков
- Импорт/экспорт настроек каналов и RSS
- Веб-панель управления (FastAPI + Admin UI)
Примечание по безопасности: не храните реальные токены и ключи в коде/README. Используйте .env и добавьте его в .gitignore.