diff --git a/TLSharp.Core/TelegramClient.cs b/TLSharp.Core/TelegramClient.cs index 587c679..c4aab25 100644 --- a/TLSharp.Core/TelegramClient.cs +++ b/TLSharp.Core/TelegramClient.cs @@ -8,6 +8,7 @@ using TeleSharp.TL.Auth; using TeleSharp.TL.Contacts; using TeleSharp.TL.Help; using TeleSharp.TL.Messages; +using TeleSharp.TL.Upload; using TLSharp.Core.Auth; using TLSharp.Core.MTProto.Crypto; using TLSharp.Core.Network; @@ -233,6 +234,15 @@ namespace TLSharp.Core }); } + public async Task GetFile(TLAbsInputFileLocation location, int filePartSize) + { + return await SendRequestAsync(new TLRequestGetFile() + { + location = location, + limit = filePartSize + }); + } + private void OnUserAuthenticated(TLUser TLUser) { _session.TLUser = TLUser; diff --git a/TLSharp.Tests/TLSharpTests.cs b/TLSharp.Tests/TLSharpTests.cs index 00f1cc7..c65ba68 100644 --- a/TLSharp.Tests/TLSharpTests.cs +++ b/TLSharp.Tests/TLSharpTests.cs @@ -12,6 +12,7 @@ using TeleSharp.TL; using TeleSharp.TL.Channels; using TeleSharp.TL.Contacts; using TeleSharp.TL.Messages; +using TeleSharp.TL.Upload; using TLSharp.Core; using TLSharp.Core.Auth; using TLSharp.Core.MTProto; @@ -40,7 +41,7 @@ namespace TLSharp.Tests private int apiId = 0; - [TestInitialize] + [TestInitialize] public void Init() { // Setup your phone numbers in app.config @@ -85,40 +86,40 @@ namespace TLSharp.Tests Assert.IsTrue(client.IsUserAuthorized()); } - [TestMethod] - public async Task SendMessageTest() - { - var client = new TelegramClient(apiId, apiHash); + [TestMethod] + public async Task SendMessageTest() + { + var client = new TelegramClient(apiId, apiHash); - await client.ConnectAsync(); + await client.ConnectAsync(); - var result = await client.GetContactsAsync(); + var result = await client.GetContactsAsync(); - var user = result.users.lists - .Where(x => x.GetType() == typeof (TLUser)) - .Cast() - .FirstOrDefault(x => x.phone == NumberToSendMessage); - await client.SendTypingAsync(new TLInputPeerUser() {user_id = user.id}); - Thread.Sleep(3000); - await client.SendMessageAsync(new TLInputPeerUser() {user_id = user.id}, "TEST"); - - } + var user = result.users.lists + .Where(x => x.GetType() == typeof(TLUser)) + .Cast() + .FirstOrDefault(x => x.phone == NumberToSendMessage); + await client.SendTypingAsync(new TLInputPeerUser() { user_id = user.id }); + Thread.Sleep(3000); + await client.SendMessageAsync(new TLInputPeerUser() { user_id = user.id }, "TEST"); - [TestMethod] - public async Task SendMessageToChannelTest() - { - var client = new TelegramClient(apiId, apiHash); + } - await client.ConnectAsync(); + [TestMethod] + public async Task SendMessageToChannelTest() + { + var client = new TelegramClient(apiId, apiHash); - var dialogs = await client.GetUserDialogsAsync(); - var chat = dialogs.chats.lists - .Where(c => c.GetType() == typeof(TLChannel)) - .Cast() - .FirstOrDefault(c => c.title == "TestGroup"); + await client.ConnectAsync(); - await client.SendMessageAsync(new TLInputPeerChannel() { channel_id = chat.id, access_hash = chat.access_hash.Value }, "TEST MSG"); - } + var dialogs = await client.GetUserDialogsAsync(); + var chat = dialogs.chats.lists + .Where(c => c.GetType() == typeof(TLChannel)) + .Cast() + .FirstOrDefault(c => c.title == "TestGroup"); + + await client.SendMessageAsync(new TLInputPeerChannel() { channel_id = chat.id, access_hash = chat.access_hash.Value }, "TEST MSG"); + } [TestMethod] public async Task SendPhotoToContactTest() @@ -135,7 +136,7 @@ namespace TLSharp.Tests .FirstOrDefault(x => x.phone == NumberToSendMessage); var fileResult = (TLInputFile)await client.UploadFile("cat.jpg", new StreamReader("data/cat.jpg")); - await client.SendUploadedPhoto(new TLInputPeerUser() {user_id = user.id}, fileResult, "kitty"); + await client.SendUploadedPhoto(new TLInputPeerUser() { user_id = user.id }, fileResult, "kitty"); } [TestMethod] @@ -152,14 +153,53 @@ namespace TLSharp.Tests .Cast() .FirstOrDefault(x => x.phone == NumberToSendMessage); - var fileResult = (TLInputFileBig)await client.UploadFile("some.zip", new StreamReader("C:\\PetProjects\\TelegramBotSample.zip")); + var fileResult = (TLInputFileBig)await client.UploadFile("some.zip", new StreamReader("")); await client.SendUploadedDocument( - new TLInputPeerUser() {user_id = user.id}, + new TLInputPeerUser() { user_id = user.id }, fileResult, "some zips", "application/zip", - new TLVector()); + new TLVector()); + } + + [TestMethod] + public async Task DownloadFileFromContactTest() + { + var client = new TelegramClient(apiId, apiHash); + + await client.ConnectAsync(); + + var result = await client.GetContactsAsync(); + + var user = result.users.lists + .Where(x => x.GetType() == typeof(TLUser)) + .Cast() + .FirstOrDefault(x => x.phone == NumberToSendMessage); + + var inputPeer = new TLInputPeerUser() { user_id = user.id }; + var res = await client.SendRequestAsync(new TLRequestGetHistory() { peer = inputPeer }); + var document = res.messages.lists + .Where(m => m.GetType() == typeof(TLMessage)) + .Cast() + .Where(m => m.media != null && m.media.GetType() == typeof(TLMessageMediaDocument)) + .Select(m => m.media) + .Cast() + .Where(md => md.document.GetType() == typeof(TLDocument)) + .Select(md => md.document) + .Cast() + .First(); + + var resFile = await client.GetFile( + new TLInputDocumentFileLocation() + { + access_hash = document.access_hash, + id = document.id, + version = document.version + }, + document.size); + + Assert.IsTrue(resFile.bytes.Length > 0); } [TestMethod]