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

  • Tutorial
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

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 12

    +4
    Спасибо за библиотеку и статью. Единственное, что бросается в глаза — это то, что async-методы не имеют суффикса Async. Синхронные варианты функций хотелось бы тоже иметь.
      +2
      Спасибо за замечание, в следующей версии исправим
      –12
      Извиняюсь что не по теме, но неужели Вы считаете, что есть смысл проецировать женские аттрибуты (котиков) на мужской ресурс? Да, я тоже считаю их милыми, однако мне кажется им место точно не на технических ресурсах, а на страничках ванильных девушек и в женских интернет-журналах (при всем моем уважении и к тем, и к другим). Все-таки не стоит мешать луну с семечками.
        +4
        Котики всегда в тренде
          0
          Этому «тренду» пара-тройка лет от силы же.
          0
          На женских ресурсах постят про кошечек (во всех смыслах). А это котик Китти, неужели не видно?
            +1
            Такого оголтелого сексизма я ну очень давно не видел не то что на хабре, а в интернете вообще…
              –2
              Тогда покажите мне хотя-бы несколько ресурсов, где статьи на профессиональную тематику всегда дополняют «котики». Или Вы увидели сексизм в «ванильных девушках» и «глянцевых журналах»? Только я специально написал, что уважаю и первое и второе.
                0
                Сайт разработчика Александра Климова.
                  –2
                  Благодарю, однако я просил «хотя-бы несколько ресурсов».
            0
            Спасибо за столь полезную библиотеку! Когда завезете поддержку push-уведомлений? А то есть мысль сделать для себя простенький клиент.

          Only users with full accounts can post comments. Log in, please.