Я ложусь поздно и просыпаюсь уже ближе к середине дня. За ночь и утро в Telegram успевает накопиться приличный хвост сообщений: часть новостей повторяется в пяти–десяти каналах почти одинаково, часть появляется только в одном месте, а что-то важное легко пропустить просто потому, что оно потерялось в ленте. При этом я не хотел подписываться ещё на десятки каналов только ради редких тематических подборок. Сегодня мне может быть интересен ИИ, завтра спорт, послезавтра кино или дорамы, а раздувать список подписок ради разового поиска не хотелось.

Из этой бытовой задачи и вырос Unofficial TelegramNewsAI. Это неофициальный проект, не связанный с Telegram FZ-LLC. В актуальной стабильной версии 5.5.0 программа поддерживает до 50 выбранных каналов и источников. Идея по-прежнему не в том, чтобы сделать ещё один «пересказчик Telegram», а в том, чтобы собрать сообщения за нужный период без ручного листания ленты, сохранить первоисточники и подготовить материал так, чтобы из него можно было быстро получить понятную картину событий.

Что я хотел получить

Главное требование к итоговому дайджесту я сформулировал для себя просто: больше фактов, меньше аналитики, прогнозов и выводов. Если десять каналов написали об одном событии, мне не нужны десять почти одинаковых абзацев. Но если в одном из сообщений появилась новая цифра, уточнение, комментарий стороны или важная деталь, она не должна потеряться. То же самое с противоречиями: лучше показать две версии и оставить возможность перейти к источнику, чем сделать вид, что одна из них автоматически «правильная».

Простая суммаризация пачки сообщений эту задачу решает не полностью. Мне нужна не краткость сама по себе, а скомпонованная и структурированная информация, а при необходимости — тематическая выборка по конкретному вопросу. Поэтому задачу я разделил на два независимых этапа:

Telegram → локальный архив → Markdown/JSON → внешний ИИ или ручной разбор → итоговый дайджест

Unofficial TelegramNewsAI отвечает за сбор, хранение, поиск и подготовку исходного материала. Встроенного ИИ-API и обязательного облачного сервиса в программе нет. Она сама никуда не отправляет содержимое Telegram: внешний анализ запускается только пользователем, когда он сам передаёт подготовленный файл выбранному ИИ-ассистенту или разбирает его вручную.

Почему Telethon

Мне нужен был доступ к публичным Telegram-каналам от имени обычного аккаунта, в том числе к тем, на которые я не подписан, поэтому в основе используется Telethon и протокол MTProto. При первом запуске пользователь вводит собственные Telegram API ID и API Hash, номер телефона и код подтверждения. После создания сессии программа работает напрямую с Telegram; устанавливать Telegram Desktop на компьютер не обязательно.

Публичные каналы можно добавлять по @username, обычной ссылке t.me или ссылке на конкретный пост, а несколько каналов — одной строкой через запятую. Начинать я советую с 5–10 источников, проверить свой сценарий, а затем постепенно расширять список. Поддерживаемый проектом максимум — 50 выбранных источников; это лимит программы, а не гарантия Telegram. Запросы идут последовательно, а при первом FloodWait, PEER_FLOOD или сигнале проблемы с сессией этап останавливается, чтобы не усугублять ограничение.

Локальный архив вместо постоянного сервиса

Один из принципов проекта — локальность. Я не хотел отдельный сервер, обязательный платный API, постоянный фоновый сервис и привязку к одной конкретной модели ИИ. Программа работает на Windows 10/11 и хранит историю локально в SQLite. Её не нужно держать запущенной постоянно: можно закрыть программу, а при следующем запуске она догрузит пропущенные публикации в пределах доступной истории.

Для личного инструмента SQLite оказался достаточным и удобным вариантом: один файл базы, индексы, транзакции, простое резервное копирование и отсутствие отдельной службы базы данных. Для полнотекстового поиска используется SQLite FTS5. Поиск работает по уже собранной истории, поэтому, если меня интересует конкретная тема или факт, я могу не строить общий дайджест, а сделать отдельную поисковую выборку.

общий мониторинг → дайджест за последние 8 часов

или

локальный поиск → только тема X → отдельная выборка → тематический дайджест

Тематический режим оказался для меня не менее полезным, чем обычный ежедневный дайджест.

Что оказалось самым трудным

Самая сложная часть была не в получении сообщений из Telegram, а в подготовке материала для нормального итогового дайджеста. Первая проблема — повторы: одна новость может выйти в десятке каналов разными словами, и если оставить всё как есть, итог получается раздутым и бесполезным. Вторая — не переборщить с анализом. ИИ охотно объясняет, строит прогнозы и добавляет выводы, а мне чаще нужен ответ на более приземлённые вопросы: что произошло, что нового появилось, какие есть важные цифры и детали, откуда информация, что подтверждено, а что пока нет и где источники расходятся.

Поэтому правила дайджеста постепенно сместились в сторону фактов и структуры. Отдельно пришлось следить за тем, чтобы не терялся первоисточник: если какая-то деталь вызывает сомнение или просто хочется прочитать сообщение полностью, должна оставаться возможность вернуться к исходной публикации. Ссылки на конкретные Telegram-посты сохраняются в экспортированных данных, когда это возможно.

Как это выглядит в реальной жизни

Мой основной сценарий очень простой: я просыпаюсь, запускаю программу и выбираю период примерно за последние восемь часов. Пока пью утренний кофе, читаю уже не ленту из сотен сообщений, а готовый дайджест того, что пропустил. Второй типичный запуск — вечером, после работы и тренировки.

Если за день появилась отдельная тема, которая меня заинтересовала, я использую программу иначе: добавляю подходящие публичные каналы, собираю сообщения, формирую отдельную выборку и прошу выбранного ИИ-ассистента сделать итоговый дайджест именно по этому вопросу. Темы могут быть совершенно разными — новости, спорт, кино, ИИ, сериалы, дорамы: программа к тематике не привязана.

После обработки программа открывает папку результата и выделяет основной пользовательский файл ДАЙДЖЕСТ_ДЛЯ_ИИ.md. Историческое имя сохранено ради совместимости, но файл не привязан к конкретному сервису: его можно передать любому внешнему ИИ-ассистенту, открыть в редакторе или обработать самостоятельно. Полные структурированные данные остаются рядом в ДАЙДЖЕСТ_ПОСЛЕДНИЙ.json, а результат локального поиска — в ПОИСК_ПОСЛЕДНИЙ.json.

Обычно дальше достаточно приложить Markdown-файл и написать коротко:

Подготовь дайджест

Основные правила анализа уже находятся внутри подготовленного файла, поэтому каждый раз составлять большой промпт не нужно.

Почему исходники хранятся отдельно от ИИ

Для меня это принципиально: ИИ может ошибиться в интерпретации, выбрать неудачную формулировку или сделать слишком смелый вывод, но исходные сообщения при этом должны оставаться нетронутыми. Если результат не нравится, тот же набор данных можно отправить другой модели, попросить сделать более короткий вариант, убрать аналитику, выделить только одну тему или отдельно разобрать противоречия между источниками.

Сам архив не зависит от конкретной модели. Сегодня это может быть один облачный ассистент, завтра — другой сервис или локальная модель. ИИ остаётся сменным и необязательным последним звеном, а собранные сообщения и история находятся отдельно.

Установка и обновление

Для первого запуска достаточно скачать ZIP последнего Stable-релиза, распаковать его и запустить INSTALL.bat. Нужна Windows 10/11 и Python 3.10 или новее; при необходимости установщик может поставить Python 3.13 через winget. После установки пользователь вводит свои Telegram API ID и API Hash и создаёт сессию.

Обновление теперь не требует вручную скачивать и распаковывать новый архив. Для этого есть переносимый файл TelegramNewsAI_Update.cmd: он находит установленную программу либо просит указать её папку, ждёт закрытия приложения и обновляет код, сохраняя сессию, учётные данные, настройки, выбранные каналы, базу, дайджесты, логи и виртуальное окружение.

Безопасность

Поскольку программа работает от пользовательского Telegram-аккаунта, API Hash и файл сессии являются чувствительными данными. Учётные данные, Telegram-сессия, база, настройки, выбранные каналы, логи и дайджесты остаются на компьютере пользователя. В проекте есть отдельный SECURITY.md, а проверки репозитория не дают локальным данным вроде файлов сессии, базы и настроек случайно попасть в Git.

У программы нет своей серверной части с пользовательскими сообщениями и нет фоновой отправки данных в ИИ. Что именно передавать внешнему сервису и передавать ли вообще, решает сам пользователь.

Что уже работает

Версия 5.5.0 Stable собирает публикации за выбранный период, догружает доступную историю, читает публичные каналы без обязательной подписки, ищет по локальному архиву, формирует общий или тематический экспорт, сохраняет ссылки на источники и поддерживает до 50 выбранных каналов.

На этом этапе проект находится в режиме стабильной эксплуатации и наблюдения. Следующая работа нужна не ради формального роста номера версии, а при появлении воспроизводимого дефекта либо понятного улучшения качества или безопасности.

Итог

Unofficial TelegramNewsAI появился не как попытка сделать большую систему анализа новостей. Я просто хотел перестать тратить время на ручное перелистывание накопившейся ленты, не терять важные детали и первоисточники и при необходимости анализировать публичные каналы, на которые не подписан.

до 50 выбранных источников

↓

локальный архив

↓

выбранный период или тема

↓

Markdown и JSON

↓

любой внешний ИИ или ручной разбор

↓

понятный дайджест за чашкой кофе

Если вы решаете похожую задачу по-другому, особенно интересно было бы сравнить подходы к дедупликации, тематическому поиску и разделению «сбор данных / интерпретация ИИ».

Исходный код, Windows-релиз, инструкция по установке и файл обновления находятся в репозитории Unofficial TelegramNewsAI. Последний стабильный выпуск доступен на странице Latest release.