05автоматизация канала2026
Бот сам ведётновостной канал
Собирает новости, пишет пост, находит картинку и несёт черновик модератору. Человеку остаётся одно нажатие.
Pythonaiogram 3yt-dlpPillowSQLiteLLM



01Сбор: пять источников каждые пятнадцать минут
У каждого источника свой сборщик, на выходе — одинаковая запись: заголовок, текст, медиа, тип новости. Дубли отсекаются по отпечатку: одна новость с трёх сайтов даёт один черновик.
- Сайт игры
- читаются данные самой страницы, без разбора вёрстки; со статьи — до девяти картинок в полном размере
- API данных игры
- сравнение версий: новый набор или агент находятся раньше, чем о них напишут
- YouTube
- лента канала, ролик через yt-dlp, субтитры становятся текстом для пересказа
- VLR.gg и спортивные медиа
- турниры, результаты, трансферы
$ python -m pipeline.probe ✓ playvalorant: получено 200 · первый опрос, всё помечено увиденным [esports] 2026-09-16T12:45 · Открытие Champions Shanghai · 🖼 1 [trailer] 2026-09-16T12:35 · Если Солнце Сегодня Сгорит // VALORANT · 🖼 1 ✓ valorant_api: получено 0 · первый опрос, всё помечено увиденным ✓ youtube: получено 15 · первый опрос, всё помечено увиденным [short] 2026-09-17T15:30 · Wingman explains the new Performance Score · 🖼 1 [short] 2026-09-17T15:00 · Wingman explains the new game mode · 🖼 1 ✓ vlr: получено 1 · первый опрос, всё помечено увиденным [news] 2026-09-14T16:00 · Riot introduces new rifle Warden in patch 13.06 ✓ championat: получено 0 · первый опрос, всё помечено увиденным Итого новых: 0 · источников с ошибкой: 0
02Текст: пишет модель, проверяют правила и редактор
пришло из источника
Spin set to leave Team Secret after Stage 2 stint↓ушло модератору
Spin покидает Team SecretКонтракт тренера истекает, он ищет новую команду на сезон 2027 года.CODESPOTправила, которые проверяет код
- Пост про видео — только с видео
- Патч — номер версии в первой фразе
- Набор, агент, оружие — название в первой фразе
- Источник в посте не называется
- Турниры, карты, оружие — латиницей
- Без эмодзи и хештегов
log 14:59:34 INFO Run polling for bot @CodeSpotNewsbot
log 14:59:36 WARN compose.llm: LLM gemini-2.5-flash HTTP 503:
"This model is currently experiencing high demand"
log 14:59:36 WARN compose.llm: попытка 1: gemini-2.5-flash: HTTP 503
db 15:01:46 draft #36 · model gemini-3-flash-preview · published
db 15:02:51 draft #37 · model gemini-2.5-flash · pending
log 15:02:35 INFO Update is handled. Duration 1560 msМодель подключена по общему OpenAI-протоколу и меняется одной строкой настроек: основная, запасная, следующая — цепочкой, если первая перегружена или кончилась квота. Канал уже менял поставщика модели — без правок кода.
После правил — второй проход модели в роли редактора: оценка от одного до десяти, порог восемь, одна переписка по замечаниям. Слабый черновик до человека не доходит.
03Медиа: пост без картинки не уходит


трейлеры и обзоры скачиваются через yt-dlp в H.264 и ужимаются под лимит Telegram в 50 МБ
картинки запрашиваются у сети доставки сразу в нужной ширине и формате
после публикации или отказа файлы удаляются с диска
04Модерация: человек решает одним нажатием

черновик ждёт решения · кнопки рабочие
Черновик приходит модератору в личные сообщения ровно таким, каким выйдет в канале, а под ним три кнопки.
«Опубликовать» не шлёт пост сразу, а ставит в очередь: канал выдерживает паузу между постами, даже если одобрено пять подряд. «Переписать» возвращает текст модели. «Отказаться» закрывает новость навсегда.
05Канал и сервер: бот работает как служба






[Service] User=codespot-news ExecStart=/opt/bots/codespot-news/.venv/bin/python -m bot Restart=always ProtectSystem=strict ReadWritePaths=/opt/bots/codespot-news/data Environment=HOME=/opt/bots/codespot-news/data
Бот живёт системной службой под отдельным пользователем в песочнице: писать может только в папку с данными, код и секреты ему недоступны для записи. После сбоя встаёт сам, версии библиотек закреплены.
Одна форма на всё — патчи, коллекции, турниры, трансферы: заголовок, фраза, пункты, подпись. Подпись в каждом посте ведёт в магазин.