Какими инструментами, приложениями или библиотеками можно воспользоваться, чтобы оперативно отслеживать новые сообщения на публичных каналах telegram?

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

Официальный Bot API позволяет автоматизировать и вообще работать только если вы создатель/владелец/администратор канала (или бота, монопольно публикующего сообщения на канале)

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

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

Клиент нормально работает только с личными сообщениями и в некоторых (непонятных) ситуациях с группами, но чаще всего, при появлении сообщений на групповых каналах, никаких обновлений в интерфейс не присылает (зато весь экран забит сообщениями об online/offline пользователей, находящихся в контактах, которое присылается, когда пользователь сворачивает или возвращается назад к окну своего чата, что происходит очень часто).

Главная проблема - определение момента, когда на канале появляется сообщение. Есть возможность запросить список диалогов (команда dialog_list) и в текстовом режиме будет видно количество непрочитанных сообщений на каждом и получить историю сообщений для каждого (команда history имя_или_id_чата количество_последних).

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

<крик души>
Менеджер telegram - opensource только для галочки, это фактически тонкий терминал для действий пользователя к закрытым (с неизвестным кодом) серверам. Протоколы и коды переусложнены. Функционал групповых чатов похоже вообще добавлялся через левую ногу_за_плечо, изначально не предполагая, что они будут существовать.
</крик души>

... что абсолютно все команды отправляются на сервер telegram, даже такое простое как dialog_list, буквально! и именно количество ответов сервера ограничивают частоту запросов даже реже чем одно в секунду (десять за десять секунд уже вне лимита).

К сожалению, из-за сложности протокола, реализовать с нуля свой собственный чат у меня не получилось, а точнее это очень сложно. Я пробовал, используя библиотеку https://github.com/rubenlagus/TelegramApi , написать на java свой чат (это был сторонний проект), что в принципе получилось, если закрыть глаза на проблему сохранения авторизации (иначе как сохранять sms код и хеш первоначального подключения), клиент работает, но опять только для личных сообщений между пользователями. Получать обновления с каналов у меня не получилось (соответствующий callback не получает нужные updates, хотя туда сыпятся те же события online/offline и приватные сообщения).

Существуют еще opensource приложения - мобильное и официальный десктопный клиент, но их изучение я оставил напоследок, так как в конечном счете сервис должен работать на linux сервере, и желательно без необходимости запуска GUI.

Прошу помощи у сообщества!

p.s. я пробовал использовать web.telegram.org, если открыть его в браузере и инжектить в него свой javascript код, есть возможность отслеживать сообщения только с одного текущего канала, но с задержкой в 4-10 секунд, и с кучей нюансов, таких как отсутствие идентификаторов сообщений, верной пометки времени (только время без даты, дату вытаскивать только для старых сообщений, через появление разделителя суток в виде даты ит.п.). И вообще эстет-программист во мне вопит, так делать не надо.
  • Вопрос задан
  • 1862 просмотра
Решения вопроса 1
Да есть такая проблемма с группами. в 2-3 последних апдейтах апи они там много чего меняли. Хотя пользователи заметили только увеличение максимально числа участников. оригинальный telegram.cli за этими обновами не успел. Как итог - большая часть каналов, групп и супергрупп (где больше 100-200 участников) - он не получает обновления.

Могу посоветовать вот этот форк - https://github.com/TehDmitry/tg-cli
Только осторожней. Там не правильные линки в инструкции для сборки.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Z-r
Вы так много написали, а ничего не понятно. Вероятно, это потому, что я этим зондом не пользуюсь. Но раз уж назначили не имеющие никакого к нему отношения тэги ([open source], ага), пишите, пожалуйста, так, чтобы всем, кому ваш вопрос разослали, было понятно.

Вам надо посадить бота на канал в неком собственническом сервере чатов, где это не предусмотрено?

Но если он популярный и есть «каналы», значит должен быть переходник на нормальный IRC, с которым ним работать легко и приятно. Гугль подсказывает такую связку: Bitlbee [0], собранный с libpuprle, + telegram-purple [1].

[0] https://www.bitlbee.org
[1] https://github.com/majn/telegram-purple
Ответ написан
ayyjay
@ayyjay
PHP - Разработчик, верстальщик
Пару дней назад написал такое чудо для своих нужд.

tginfo.tw1.su/v1/?channel=telegram&post=86&format=json

channel - юзернейм канала
post - id поста
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы