Сразу хочу отметить - заметка в большей степени не про telegram, а про правильную, по мнению автора, разработку native внешних компонент.
Сама технологии создания внешних компонент с native API существует уже много лет, но несмотря на это, найти достойный пример open source реализации внешней компоненты крайне сложно. Вполне вероятно, что все компоненты с открытыми исходными кодами можно пересчитать по пальцам одной руки. Буду рад увидеть ссылки в комментариях, чтобы понять, что не прав.
В конечном счете я решил исправить эту несправедливость и опубликовать не слишком сложный пример компоненты "по фэн-шую". И первой проблемой, которую предстояло решить, был функционал компоненты. В итоге выбор пал на интеграцию с telegram.
Сегодня тема взаимодействия с telegram уже не так популярна, как ранее. С одной стороны на это повлияли действия РКН, с другой - библиотека инфостарта уже изрядно наполнена примерами взаимодействия с Bot API. Но что делать, если функционала bot API недостаточно? Допустим, мы хотим сами писать пользователю, или хотим использовать секретные чаты с end-to-end шифрованием, или, о боже, хотим написать полноценный telegram клиент на 1С? Выход - TDLib.
Telegram database library - это официальная библиотека для создания Telegram клиентов, предоставляющая доступ ко всему функционалу MTProto. Один из вариантов работы с библиотекой - JSON. Все методы описаны в документации.
Внешняя компонента доступна на Github. Она предоставляет доступ к следующим методам TDLib: Отправить / Send, Получить / Receive, Выполнить / Execute, а так же реализует метод УстановитьАсинхронныйРежим / SetAsyncMode для получения ответов компоненты через внешние события (естественно работает только на клиенте).
CI сборки реализованы для Windows x86/x64 и Linux x64.
Для желающий просто оценить компоненту в работе, мною был сделан примитивный пример, реализующий следующий тестовый сценарий: авторизация в telegram и отправка сообщения абоненту с указанным номером телефона (даже если его еще нет у вас в контактах). Пример проверен на Windows 10 + 8.3.11 и на Ubuntu 18.04 + 8.3.12.
На данный момент демо-обработка содержит множество допущений. В частности:
- Авторизация выполняется только для существующих учетных записей
- Ввод некорректного кода подтверждения никак не обрабатывается
- Не реализована двухфакторная аутентификация
- Не указывается куда отправлен код подтверждения (Telegram / SMS)
- Не задаются настройки TDLib. База всегда хранится в каталоге временных файлов. Токены app_id и api_hash совпадает с тестовыми для TDLib.
В общем, самый, самый минимум.