С# — развитый язык с большим количеством библиотек, но среди них нет ни одной работающей реализации 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);
На данный момент в библиотеке реализованы только самые необходимые методы. Код библиотеки еще не готов для использования в продакшене, поэтому я не стал выкладывать ее как nuget пакет. Чтобы добавить библиотеку к себе в проект надо стянуть исходники с GitHub, скомпилировать их и добавить референс TLSharp.Core.dll.
Спасибо за внимание, буду рад если вы поддержите библиотеку своими коммитами.
Репозиторий GitHub: github.com/sochix/TLSharp
Автор: sochix