diff --git a/TLSharp.Core/TelegramClient.cs b/TLSharp.Core/TelegramClient.cs index 7cf7e5d..732adad 100644 --- a/TLSharp.Core/TelegramClient.cs +++ b/TLSharp.Core/TelegramClient.cs @@ -337,6 +337,23 @@ namespace TLSharp.Core await _sender.SendPingAsync(); } + /// + /// Serch user or chat. API: contacts.search#11f812d8 q:string limit:int = contacts.Found; + /// + /// User or chat name + /// Max result count + /// + public async Task SearchUserAsync(string q, int limit = 10) + { + var r = new TeleSharp.TL.Contacts.TLRequestSearch + { + q = q, + limit = limit + }; + + return await SendRequestAsync(r); + } + private void OnUserAuthenticated(TLUser TLUser) { _session.TLUser = TLUser; diff --git a/TLSharp.Tests.NUnit/Test.cs b/TLSharp.Tests.NUnit/Test.cs index 7c390db..40e54ac 100644 --- a/TLSharp.Tests.NUnit/Test.cs +++ b/TLSharp.Tests.NUnit/Test.cs @@ -75,5 +75,11 @@ namespace TLSharp.Tests { await base.FloodExceptionShouldNotCauseCannotReadPackageLengthError(); } + + [Test] + public override async Task SendMessageByUserNameTest() + { + await base.SendMessageByUserNameTest(); + } } } diff --git a/TLSharp.Tests.VS/TLSharpTestsVs.cs b/TLSharp.Tests.VS/TLSharpTestsVs.cs index fff25b6..8f6c58d 100644 --- a/TLSharp.Tests.VS/TLSharpTestsVs.cs +++ b/TLSharp.Tests.VS/TLSharpTestsVs.cs @@ -73,5 +73,11 @@ namespace TLSharp.Tests { await base.FloodExceptionShouldNotCauseCannotReadPackageLengthError(); } + + [TestMethod] + public override async Task SendMessageByUserNameTest() + { + await base.SendMessageByUserNameTest(); + } } } diff --git a/TLSharp.Tests/TLSharpTests.cs b/TLSharp.Tests/TLSharpTests.cs index 6166067..487b535 100644 --- a/TLSharp.Tests/TLSharpTests.cs +++ b/TLSharp.Tests/TLSharpTests.cs @@ -323,6 +323,7 @@ namespace TLSharp.Tests var result = await client.IsPhoneRegisteredAsync(NumberToAuthenticate); Assert.IsTrue(result); } + public virtual async Task FloodExceptionShouldNotCauseCannotReadPackageLengthError() { for (int i = 0; i < 50; i++) @@ -338,5 +339,42 @@ namespace TLSharp.Tests } } } + + public virtual async Task SendMessageByUserNameTest() + { + UserNameToSendMessage = ConfigurationManager.AppSettings[nameof(UserNameToSendMessage)]; + if (string.IsNullOrWhiteSpace(UserNameToSendMessage)) + throw new Exception($"Please fill the '{nameof(UserNameToSendMessage)}' setting in app.config file first"); + + var client = NewClient(); + + await client.ConnectAsync(); + + var result = await client.SearchUserAsync(UserNameToSendMessage); + + var user = result.users.lists + .Where(x => x.GetType() == typeof(TLUser)) + .OfType() + .FirstOrDefault(x => x.username == UserNameToSendMessage.TrimStart('@')); + + if (user == null) + { + var contacts = await client.GetContactsAsync(); + + user = contacts.users.lists + .Where(x => x.GetType() == typeof(TLUser)) + .OfType() + .FirstOrDefault(x => x.username == UserNameToSendMessage.TrimStart('@')); + } + + if (user == null) + { + throw new System.Exception("Username was not found: " + UserNameToSendMessage); + } + + await client.SendTypingAsync(new TLInputPeerUser() { user_id = user.id }); + Thread.Sleep(3000); + await client.SendMessageAsync(new TLInputPeerUser() { user_id = user.id }, "TEST"); + } } }