Отправляем сообщения в Telegram из C#

TLSharp rocks!

С# — развитый язык с большим количеством библиотек, но среди них нет ни одной работающей реализации Telegram API. Эту ситуацию я хочу исправить с помощью своей небольшой библиотеки TLSharp. В статье будет много кода и один котик.

Сразу хочу оговорить детали, будет рассмотрена отсылка сообщения с использованием Telegram API, а не Telegram Bot API. В чем разница?
Telegram Bot API — это API для создания ботов, соответственно оно имеет бОльшие ограничения. Например, нельзя отправить сообщение пользователю пока тот не добавил вашего бота. С Telegram API таких ограничений нет, все официальные клиенты используют именно его.

Создаем сессию


Сначала инициализируем библиотеку и создадим хранилище сессий.

var store = new FileSessionStore();
var client = new TelegramClient(store, "session");


Соединимся с сервером.

client.Connect();


Теперь мы можем создавать сессию. Для этого выполним следующий код:

var hash = await client.SendCodeRequest(phoneNumber); //отсылаем запрос на создании сессии

var code = "1234"; // код который придет от Telegram 

var user = await client.MakeAuth(phoneNumber, hash, code); // создаем сессию


Немного о параметрах методов:

  • phoneNumber — ваш номер телефона в интернациональном формате (например, 79184981723)
  • code — код который вы получите от Telegram, после выполнения метода SendCodeRequest

Отправляем сообщение


Для отправки сообщения импортируем контакт по номеру телефона или юзернейму.

var userByPhoneId = await client.ImportContactByPhoneNumber("791812312323"); // импорт по номеру телефона
var userByUserNameId = await await client.ImportByUserName("userName"); // импорт по юзернейму


Отправляем сообщение.

await client.SendMessage(userId, "Hello Habr!");


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

var mediaFile = await client.UploadFile("cat.jpg", file);
var res = await client.SendMediaMessage(userId, mediaFile);


Cats in Telegram


На данный момент в библиотеке реализованы только самые необходимые методы. Код библиотеки еще не готов для использования в продакшене, поэтому я не стал выкладывать ее как nuget пакет. Чтобы добавить библиотеку к себе в проект надо стянуть исходники с GitHub, скомпилировать их и добавить референс TLSharp.Core.dll.

Спасибо за внимание, буду рад если вы поддержите библиотеку своими коммитами.

Репозиторий GitHub: github.com/sochix/TLSharp

© Habrahabr.ru