Я ложусь поздно и просыпаюсь уже ближе к середине дня. За ночь и утро в Telegram успевает накопиться приличный хвост сообщений: часть новостей повторяется в пяти–десяти каналах почти одинаково, часть появляется только в одном месте, а что-то важное легко пропустить просто потому, что оно потерялось в ленте. При этом я не хотел подписываться ещё на десятки каналов только ради редких тематических подборок. Сегодня мне может быть интересен ИИ, завтра спорт, послезавтра кино или дорамы, а раздувать список подписок ради разового поиска не хотелось.
Из этой бытовой задачи и вырос TelegramNewsAI. Сейчас у меня в постоянном мониторинге около 25 каналов, на которые я подписан, и ещё примерно 10 публичных каналов, которые программа читает без подписки. Идея была не в том, чтобы сделать ещё один «пересказчик Telegram», а в том, чтобы собрать сообщения за нужный период без ручного листания ленты, сохранить первоисточники и подготовить материал так, чтобы из него можно было быстро получить понятную картину событий.
Что я хотел получить
Главное требование к итоговому дайджесту я сформулировал для себя просто: больше фактов, меньше аналитики, прогнозов и выводов. Если десять каналов написали об одном событии, мне не нужны десять почти одинаковых абзацев. Но если в одном из сообщений появилась новая цифра, уточнение, комментарий стороны или важная деталь, она не должна потеряться. То же самое с противоречиями: лучше показать две версии и оставить возможность перейти к источнику, чем сделать вид, что одна из них автоматически «правильная».
Простая суммаризация пачки сообщений эту задачу решает не полностью. Мне нужна не краткость сама по себе, а скомпонованная и структурированная информация, а при необходимости — тематическая выборка по конкретному вопросу. Допустим, за несколько часов вышло 200 сообщений: 60 из них повторяют пять крупных сюжетов, 30 — мелкие новости, остальное — комментарии, уточнения и продолжение уже начавшихся историй. Сократить всё это до двадцати абзацев недостаточно: нужно сначала понять, какие сообщения относятся к одному событию, что появилось первым, что позже уточнилось и где источники расходятся.
Поэтому я разделил задачу на две части:
Telegram → локальный архив → структурированный JSON → ИИ → итоговый дайджест
TelegramNewsAI отвечает за сбор, хранение, поиск и подготовку исходного материала. ИИ уже работает не с хаотичной лентой, а с подготовленными данными и правилами оформления, которые я сам задаю.
Почему Telethon
Мне нужен был доступ к публичным Telegram-каналам от имени обычного аккаунта, в том числе к тем, на которые я не подписан, поэтому в основе используется Telethon. При первом запуске пользователь вводит свои Telegram API ID и API Hash, номер телефона и код подтверждения. После этого программа работает напрямую с Telegram; устанавливать Telegram Desktop на компьютер не обязательно.
Публичные каналы можно добавлять по @username, обычной ссылке t.me или ссылке на конкретный пост, а несколько каналов — одной строкой через запятую. Для моего сценария это важно: если появляется интерес к какой-то теме, я могу через ИИ быстро получить список подходящих публичных каналов, добавить их в TelegramNewsAI и собрать тематическую выборку, не превращая основной Telegram в свалку подписок.

Локальный архив вместо постоянного сервиса
Один из принципов проекта — локальность. Я не хотел отдельный сервер, обязательный платный API, постоянный фоновый сервис и привязку к одной конкретной модели ИИ. Программа работает на Windows 10/11 и хранит историю локально в SQLite. Её не нужно держать запущенной постоянно: можно закрыть программу, а при следующем запуске она догрузит пропущенные публикации в пределах доступной истории.
Для личного инструмента SQLite оказался достаточным и удобным вариантом: один файл базы, индексы, транзакции, простое резервное копирование и отсутствие отдельной службы базы данных. Для полнотекстового поиска используется SQLite FTS5. Поиск работает по уже собранной истории, поэтому, если меня интересует конкретная тема или факт, я могу не строить общий дайджест, а сделать отдельную поисковую выборку и отправить её ИИ.
Например:
общий мониторинг → дайджест за последние 8 часов или локальный поиск → только тема X → отдельный JSON → тематический дайджест
Тематический режим оказался для меня не менее полезным, чем обычный ежедневный дайджест.
Что оказалось самым трудным
Самая сложная часть была не в получении сообщений из Telegram, а в том, чтобы добиться нормального итогового дайджеста. Первая проблема — повторы: одна новость может выйти в десятке каналов разными словами, и если оставить всё как есть, итог получается раздутым и бесполезным. Вторая — не переборщить с анализом. ИИ охотно объясняет, строит прогнозы и добавляет выводы, а мне чаще нужен ответ на более приземлённые вопросы: что произошло, что нового появилось, какие есть важные цифры и детали, откуда информация, что подтверждено, а что пока нет и где источники расходятся.
Поэтому правила дайджеста постепенно сместились в сторону фактов и структуры. Отдельно пришлось следить за тем, чтобы не терялся первоисточник: если какая-то деталь вызывает сомнение или просто хочется прочитать сообщение полностью, должна оставаться возможность вернуться к исходной публикации. Поэтому в подготовленных данных сохраняются ссылки на конкретные Telegram-посты, когда это возможно.
Как это выглядит в реальной жизни
Мой основной сценарий очень простой: я просыпаюсь, запускаю TelegramNewsAI и выбираю период примерно за последние восемь часов. Пока пью утренний кофе, читаю уже не ленту из сотен сообщений, а готовый дайджест того, что пропустил. Второй типичный запуск — вечером, после работы и тренировки.
Если за день появилась отдельная тема, которая меня заинтересовала, я использую программу иначе. Через ИИ получаю список каналов по нужной тематике, добавляю подходящие публичные каналы в TelegramNewsAI, собираю сообщения, формирую отдельную выборку и прошу ИИ сделать итоговый дайджест именно по этому вопросу. При необходимости уточняю, чему уделить особое внимание. Темы могут быть совершенно разными — новости, спорт, кино, ИИ, сериалы, дорамы: программа к тематике не привязана.

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

Почему исходники хранятся отдельно от ИИ
Для меня это принципиально: ИИ может ошибиться в интерпретации, выбрать неудачную формулировку или сделать слишком смелый вывод, но исходные сообщения при этом должны оставаться нетронутыми. Если результат не нравится, тот же набор данных можно отправить другой модели, попросить сделать более короткий вариант, убрать аналитику, выделить только одну тему или отдельно разобрать противоречия между источниками.
Сам архив при этом не зависит от конкретной модели. Сегодня это может быть ChatGPT, завтра — другой сервис или локальная модель. ИИ остаётся сменным последним звеном, а собранные сообщения и история находятся отдельно.
Безопасность
Поскольку TelegramNewsAI работает от пользовательского Telegram-аккаунта, API Hash и файл сессии являются чувствительными данными. Учётные данные сохраняются локально, а credentials.bin защищён Windows DPAPI. База, Telegram-сессия, настройки, выбранные каналы, логи и сами дайджесты тоже остаются на компьютере пользователя.
В проекте есть отдельный SECURITY.md, а CI проверяет, что локальные данные вроде credentials.bin, *.session, news.db и файлов настроек случайно не попали в Git. Для такого проекта это было важнее, чем строить сложную серверную архитектуру. При необходимости программу можно просто удалить вместе с её папкой и ярлыком — отдельной серверной части с пользовательскими данными нет.
Что уже работает и что дальше
На текущем этапе программа уже работает так, как я изначально хотел: собирает публикации за выбранный период, догружает пропущенную историю, читает публичные каналы без обязательной подписки, ищет по локальному архиву, формирует общий или тематический JSON, сохраняет ссылки на источники и подключает ИИ только на финальном этапе анализа.
Сейчас я скорее думаю не о полном переписывании проекта, а о следующих направлениях — Android-версии и английской версии интерфейса и документации. При этом главный принцип хочется сохранить тем же: локальный архив должен оставаться простым, надёжным и независимым от конкретного ИИ.
Итог
TelegramNewsAI появился не как попытка сделать большую систему анализа новостей. Я просто хотел перестать тратить время на ручное перелистывание накопившейся ленты, не терять важные детали и первоисточники и при необходимости анализировать публичные каналы, на которые не подписан.
Для меня рабочая схема сейчас выглядит так:
35 каналов ↓ локальный архив ↓ выбранный период или тема ↓ структурированные данные ↓ ИИ ↓ понятный дайджест за чашкой кофе
Если вы решаете похожую задачу по-другому, особенно интересно было бы сравнить подходы к дедупликации, тематическому поиску и разделению «сбор данных / интерпретация ИИ».
Исходный код, Windows-релиз и инструкция по установке находятся в репозитории TelegramNewsAI.
Комментарии (16)

neiromand
19.09.2026 11:53А какие лимиты? Разве телега нынче не банит всякие кроулеры?

ccuriu Автор
19.09.2026 11:53Тут немного не тот случай с кроулерами :) Telethon работает через MTProto API под обычным аккаунтом, то есть веб-страницы Telegram мы не парсим.
Фиксированного лимита вида «столько-то запросов в минуту» Telegram не публикует — ограничения динамические. Если переборщить с запросами, прилетает
FLOOD_WAITс временем, сколько нужно подождать. Telethon это умеет учитывать.На моих нынешних 35–50 каналах это пока вообще не узкое место. А вот если проект реально пойдёт к 150+ каналам и большим периодам, тогда уже надо будет отдельно смотреть и на частоту запросов к Telegram, и на объём данных перед ИИ. То есть масштабирование там потребуется с двух сторон :)
Сейчас программа именно читает выбранные каналы и историю, а не пытается массово обходить весь Telegram.

neiromand
19.09.2026 11:53У телеги какими-то волнами идут блокировки. Ещё в 2020м делали прогу на tdlib, только скачивание каналов и чатов, никакого спама и криминала. То работает месяц-два, то банят каждый день. API ID и API Hash и регали и от андроид-телеги подставляли.
Даже физическую симку могло забанить в первые же пару минут после первого логина. Про online-sim и подобное молчу.
Причём "добавить 50 каналов в день" это для них уже подозрительная активность была. При этом нигде ничего не расписано. Формально это не было нарушением никаких правил.
А если вводить в прогу креды от основной симки, то забанят вместе с основным аккаунтом и фиг восстановишь.

ccuriu Автор
19.09.2026 11:53Вот это уже серьёзный аргумент, спасибо. Я выше действительно слишком упростил всё до
FLOOD_WAIT.Посмотрел документацию и ваш опыт — раз Telegram сам точные критерии не раскрывает, решил пока закрыть репозиторий и нормально погонять программу на себе под разной нагрузкой. Если всё будет спокойно — открою обратно уже с предупреждениями и, если понадобится, более консервативной работой с API. Спасибо, комментарий реально полезный.

yardeff
19.09.2026 11:53Годная тема. Тоже периодически ловлю себя на мысли, что треть дня уходит просто на скролл одинаковых новостей в десятке каналов, и руки чешутся автоматизировать эту рутину. Локальная база под это дело отличная идея, хотя бы история не потеряется, если каналы потрут.

neiromand
19.09.2026 11:53Главное не сильно удивляться после:
If you didn’t violate the Terms of Service but your account does get banned after using the API, write to recover@telegram.org explaining what you intend to do with the API, asking to unban your account. Please note that emails are checked by a human, so automatically generated emails will be detected and banned.

RIG
19.09.2026 11:53Посты в публичных каналах можно парсить вообще без аккаунта, их можно выдернуть в превью канала на сайте t.me. Так, например, уже сделано в проекте нян https://github.com/NyanNyanovich/nyan
А удалять/объединять дубли постов можно через эмбеддинги и косинусное сходство.
Вообще сам задумывался о написании подобного проекта.

ccuriu Автор
19.09.2026 11:53Да, спасибо, НЯН посмотрел. Там действительно интересно сделано: сборщик ходит прямо в веб-превью канала и листает историю через
?before=, так что публичные каналы можно собирать вообще без пользовательской сессии.Для моего случая это, пожалуй, хороший кандидат на упрощённый режим без API ID/API Hash. Полностью Telethon заменять им не стал бы — веб-версия даёт более урезанные данные и зависит от HTML Telegram; например, в НЯН посты без текста вообще пропускаются. Но идею точно забрал, спасибо.

Newfeet
19.09.2026 11:53Поразительно, насколько точно у нас совпадают "хотелки", вплоть до мелких деталей. Но, возможно, это как с Римской Империей: все пользователи Telegram этого хотят и думают об одном и том же.

ccuriu Автор
19.09.2026 11:53Похоже, это действительно наша маленькая «Римская империя» :) Чем дольше делаю программу, тем чаще понимаю, что очередная моя «хотелка» — это ровно то, чего не хватает ещё кому-то.
Так что совпадение "хотелок " хороший признак — значит, решаем не выдуманную проблему)
mrprogre
Я в своего новостного бота добавлял ИИ, чтобы делать выдержки по темам, но что-то народу не зашло, убрал нафиг. Да и много токенов уходит, т.к. за сутки около 3 тысяч заголовков в среднем, а это капец сколько символов.
Похожие новости удаляю методом схожести строк Джаро-Винклера, никаких ИИ. Ставлю порог 85% и выбираю из нескольких похожих заголовков самое короткое сообщение.. для экономии трафика, ну и времени чтения.
И раньше пытался делать из телеграм каналов RSS с помощью сервисов, подмены ссылок и т.д., в итоге сделал загрузчик постов себе в БД с помощью Rome и Jsoup. Люди заходят и добавляют по 30 тг каналов и мониторят по ним свои новости.
ccuriu Автор
Да, у вас масштаб уже совсем другой — 3 тысячи заголовков в сутки через ИИ действительно можно довольно быстро превратить в заметный расход токенов :)
У меня задача немного отличается. Я не пытаюсь прогонять через ИИ непрерывный новостной поток. Идея скорее в том, чтобы после какого-то пропущенного периода взять сообщения из выбранных мной каналов и получить вместо десятков похожих постов нормальную картину событий: что произошло, что добавилось в следующих сообщениях, где источники расходятся, что пока только инсайд и т.д.
Поэтому простое удаление похожих заголовков здесь решает только часть задачи. Например, два сообщения могут быть очень похожи текстом, но во втором появится важная цифра или реакция другой стороны — такое хотелось бы не выбрасывать. И наоборот, одно и то же событие разные каналы могут описать совершенно разными словами.
Но идея с Джаро–Винклером мне нравится именно как предварительный фильтр перед ИИ. Сначала дешёвыми методами убрать очевидные дубли и только потом отдавать оставшееся на смысловую обработку. Возможно, со временем так и сделаю — это как раз тот случай, когда можно заметно уменьшить расход токенов без большой потери качества.
А свой загрузчик Telegram вы, по сути, сделали ровно по той же причине, что и я начал этот проект: в какой-то момент проще один раз сделать инструмент под себя, чем постоянно обходить ограничения чужих сервисов :)
mrprogre
Ну да, я понял суть, что получить выдержку по интересующим темам.
Свой загрузчик это класс.. а то от букв RSS уже поташнивает.. и куда не плюнь - везде заплати в долларах :)
ccuriu Автор
100% :)