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

- Получаем api_id и api_hash.
Работа с библиотекой
Добавляем в проект Visual Studio через консоль диспетчера пакетов:
Install-Package TLSharp
Для начала работы создаём клиента с параметрами api_id и api_hash, полученными выше — совершаем подключение.
TelegramClient client = new TelegramClient(apiId, apiHash); await client.ConnectAsync();
Для аутентификации своего аккаунта, выполняем следующее:
var hash = await client.SendCodeRequestAsync("номер телефона"); var code = "код телеграмма"; var user = await client.MakeAuthAsync("номер телефона", hash, code);
После выполнения данного этапа, TLSharp создает файл session.dat, в котором хранится вся информация пользовательской сессии. После этого можно выполнять любой запрос представленный в документации.
Приступаем к выгрузке сообщений из каналов, обязательное условие, предварительно нужно быть подписанным на канал. Получаем все диалоги, которые есть у пользователя:
var dialogs = (TLDialogs)await client.GetUserDialogsAsync();
Записанная переменная теперь хранит все диалоги, но для того чтобы отобрать только каналы, удобная структура позволяет выделить диалоги каналов и чатов, используя:
dialogs.Chats
Проходим по всем чатам и каналам, отдельно проверяя является ли следующий элемент чатом или каналом:
foreach (var element in dialogs.Chats){ if (element is TLChat){ TLChat chat = element as TLChat;
В библиотеке TLSharp реализованы все функции официального API. Функции реализованы через запросы, например, дополнительную информацию по каналу можно получить через запрос вида:
TeleSharp.TL.Messages.TLChatFull channelInfo = await client.SendRequestAsync<TeleSharp.TL.Messages.TLChatFull> (new TLRequestGetFullChat(){ChatId = chat.Id});
Вызывается метод SendRequestAsync<TeleSharp.TL.Messages.TLChatFull> с типом возвращаемого значения и в качестве параметра следует любой из предложенных в библиотеке запросов. Далее представлен код, получающий полную информацию о канале, в этом случае для получения канала нужны два параметра — это ChannelId и AccessHash:
if (element is TLChannel){ var offset = 0; TLChannel channel = element as TLChannel; var chan = await client.SendRequestAsync<TeleSharp.TL.Messages.TLChatFull>(new TLRequestGetFullChannel() { Channel = new TLInputChannel() { ChannelId = channel.Id, AccessHash = (long)channel.AccessHash} }); TLInputPeerChannel inputPeer = new TLInputPeerChannel() { ChannelId = channel.Id, AccessHash = (long)channel.AccessHash };
Выгрузка сообщений
Выгрузка сообщений происходит порциями по 100 сообщений и параметром AddOffset настраивается выгрузка следующей порции сообщений.
while (true){ TLChannelMessages res = await client.SendRequestAsync<TLChannelMessages> (new TLRequestGetHistory(){ Peer = inputPeer, Limit = 400, AddOffset = offset, OffsetId = 0 }); var msgs = res.Messages;
Сообщения бывают двух типов TLMessage и TLMessageService. Первый — обычное текстовое сообщение, возможно содержащий в себе некоторый медиа файл. Второй тип сообщений в большинстве случаев представляет собой звонок или сообщения от Telegram Service.
if (res.Count > offset){ offset += msgs.Count; foreach (var msg in msgs) { if (msg is TLMessage) { TLMessage sms = msg as TLMessage; st.Add(sms.Message); } if (msg is TLMessageService) continue; } } else break; } }
Поиск по сообщениям
Добавим предварительный поиск по сообщениям в канале. Для этого просто воспользуемся таким же запросом, структура которого представлена выше.
TLInputPeerChannel inputPeer = new TLInputPeerChannel() { ChannelId = channel.Id, AccessHash = (long)channel.AccessHash}; TLChannelMessages search = await client.SendRequestAsync<TLChannelMessages> (new TeleSharp.TL.Messages.TLRequestSearch(){ Peer = inputPeer, MaxDate = maxdate, MinDate = mindate, Q = searchWord, Filter = new TLInputMessagesFilterEmpty(), Limit = 100, Offset = offset });
Для формирования вашего запроса остается только заполнить параметры и далее таки же образом обрабатываем получаемые сообщения.
На этом всё, надеюсь кому-то это статья была полезной.

