diff --git a/README.md b/README.md index be68d8b..d7f279b 100644 --- a/README.md +++ b/README.md @@ -148,16 +148,16 @@ Contributing is highly appreciated! #### Release 1.0.0 -* Add PHONE_MIGRATE handling +* [DONE] Add PHONE_MIGRATE handling * Add Updates handling * Add NuGet package -* Add wrappers for media uploading +* [WIP] Add wrappers for media uploading * Store user session as JSON # FAQ #### What API layer is supported? -The latest one - 53. Thanks to Afshin Arani +The latest one - 57. Thanks to Afshin Arani for his TLGenerator #### I get an error MIGRATE_X? diff --git a/TLSharp.Core/Session.cs b/TLSharp.Core/Session.cs index 7a9cba5..7a13da9 100644 --- a/TLSharp.Core/Session.cs +++ b/TLSharp.Core/Session.cs @@ -54,8 +54,9 @@ namespace TLSharp.Core public class Session { - private const string defaultConnectionAddress = "91.108.56.165"; - private const int defaultConnectionPort = 443; + private const string defaultConnectionAddress = "149.154.175.100";//"149.154.167.50"; + + private const int defaultConnectionPort = 443; public string SessionUserId { get; set; } public string ServerAddress { get; set; } diff --git a/TLSharp.Core/TelegramClient.cs b/TLSharp.Core/TelegramClient.cs index 7d74769..75d0466 100644 --- a/TLSharp.Core/TelegramClient.cs +++ b/TLSharp.Core/TelegramClient.cs @@ -25,8 +25,8 @@ namespace TLSharp.Core public TelegramClient(int apiId, string apiHash, ISessionStore store = null, string sessionUserId = "session") { - if (store == null) - store = new FileSessionStore(); + if (store == null) + store = new FileSessionStore(); TLContext.Init(); _apiHash = apiHash; @@ -51,16 +51,14 @@ namespace TLSharp.Core _sender = new MtProtoSender(_transport, _session); - if (!reconnect) - { - var config = new TLRequestGetConfig() ; - var request = new TLRequestInitConnection() { api_id = _apiId, app_version = "1.0.0", device_model = "PC", lang_code = "en", query= config, system_version = "Win 10.0" }; - var invokewithLayer = new TLRequestInvokeWithLayer() { layer = 53, query = request }; - await _sender.Send(invokewithLayer); - await _sender.Receive(invokewithLayer); + //set-up layer + var config = new TLRequestGetConfig(); + var request = new TLRequestInitConnection() { api_id = _apiId, app_version = "1.0.0", device_model = "PC", lang_code = "en", query = config, system_version = "Win 10.0" }; + var invokewithLayer = new TLRequestInvokeWithLayer() { layer = 57, query = request }; + await _sender.Send(invokewithLayer); + await _sender.Receive(invokewithLayer); - dcOptions = ((TLConfig)invokewithLayer.Response).dc_options.lists; - } + dcOptions = ((TLConfig)invokewithLayer.Response).dc_options.lists; return true; } @@ -154,62 +152,61 @@ namespace TLSharp.Core await _sender.Send(methodtoExceute); await _sender.Receive(methodtoExceute); - var result = methodtoExceute.GetType().GetProperty("Response").GetValue(methodtoExceute); - - return (T)result; + var result = methodtoExceute.GetType().GetProperty("Response").GetValue(methodtoExceute); + + return (T)result; } + public async Task GetContactsAsync() + { + if (!IsUserAuthorized()) + throw new InvalidOperationException("Authorize user first!"); - public async Task GetContactsAsync() - { - if (!IsUserAuthorized()) - throw new InvalidOperationException("Authorize user first!"); + var req = new TLRequestGetContacts() { hash = "" }; - var req = new TLRequestGetContacts() {hash = ""}; - - return await SendRequestAsync(req); - } + return await SendRequestAsync(req); + } - public async Task SendMessageAsync(TLAbsInputPeer peer, string message) - { - if (!IsUserAuthorized()) - throw new InvalidOperationException("Authorize user first!"); + public async Task SendMessageAsync(TLAbsInputPeer peer, string message) + { + if (!IsUserAuthorized()) + throw new InvalidOperationException("Authorize user first!"); - long uniqueId = Convert.ToInt64((DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds); + long uniqueId = Convert.ToInt64((DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds); - return await SendRequestAsync( - new TLRequestSendMessage() - { - peer = peer, - message = message, - random_id = uniqueId - }); - } + return await SendRequestAsync( + new TLRequestSendMessage() + { + peer = peer, + message = message, + random_id = uniqueId + }); + } - public async Task SendTypingAsync(TLAbsInputPeer peer) - { - var req = new TLRequestSetTyping() - { - action = new TLSendMessageTypingAction(), - peer = peer - }; - return await SendRequestAsync(req); - } + public async Task SendTypingAsync(TLAbsInputPeer peer) + { + var req = new TLRequestSetTyping() + { + action = new TLSendMessageTypingAction(), + peer = peer + }; + return await SendRequestAsync(req); + } - public async Task GetUserDialogsAsync() - { - var peer = new TLInputPeerSelf(); - return await SendRequestAsync( - new TLRequestGetDialogs() { offset_date = 0, offset_peer = peer, limit = 100 }); - } + public async Task GetUserDialogsAsync() + { + var peer = new TLInputPeerSelf(); + return await SendRequestAsync( + new TLRequestGetDialogs() { offset_date = 0, offset_peer = peer, limit = 100 }); + } - private void OnUserAuthenticated(TLUser TLUser) + private void OnUserAuthenticated(TLUser TLUser) { _session.TLUser = TLUser; _session.SessionExpires = int.MaxValue; _session.Save(); } - + } } diff --git a/TeleSharp.Generator/Program.cs b/TeleSharp.Generator/Program.cs index 00dce76..535017b 100644 --- a/TeleSharp.Generator/Program.cs +++ b/TeleSharp.Generator/Program.cs @@ -72,7 +72,7 @@ namespace TeleSharp.Generator if (nspace.EndsWith(".")) nspace = nspace.Remove(nspace.Length - 1, 1); string temp = NormalStyle.Replace("/* NAMESPACE */", "TeleSharp." + nspace); - temp = (c.type == "himself") ? temp.Replace("/* PARENT */", "TLObject") : temp.Replace("/* PARENT */", GetNameofClass(c.type, true)); + temp = (c.type == "himself") ? temp.Replace("/* PARENT */", "TLObject") : temp.Replace("/* PARENT */", GetNameofClass(c.type, true)); temp = temp.Replace("/*Constructor*/", c.id.ToString()); temp = temp.Replace("/* NAME */", GetNameofClass(c.predicate, false)); #endregion @@ -129,11 +129,7 @@ namespace TeleSharp.Generator } foreach (var c in schema.methods) { - if (c.method.Contains("updateUsername")) - { - - } - string path = (GetNameSpace(c.method).Replace("TeleSharp.TL", "TL\\").Replace(".", "") + "\\" + GetNameofClass(c.method, false,true) + ".cs").Replace("\\\\", "\\"); + string path = (GetNameSpace(c.method).Replace("TeleSharp.TL", "TL\\").Replace(".", "") + "\\" + GetNameofClass(c.method, false, true) + ".cs").Replace("\\\\", "\\"); FileStream classFile = MakeFile(path); using (StreamWriter writer = new StreamWriter(classFile)) { @@ -144,7 +140,7 @@ namespace TeleSharp.Generator string temp = MethodStyle.Replace("/* NAMESPACE */", "TeleSharp." + nspace); temp = temp.Replace("/* PARENT */", "TLMethod"); temp = temp.Replace("/*Constructor*/", c.id.ToString()); - temp = temp.Replace("/* NAME */", GetNameofClass(c.method, false,true)); + temp = temp.Replace("/* NAME */", GetNameofClass(c.method, false, true)); #endregion #region Fields string fields = ""; @@ -244,7 +240,7 @@ namespace TeleSharp.Generator else if (type.IndexOf('.') != -1 && type.IndexOf('?') != -1) return "TLRequest" + FormatName(type.Split('?')[1]); else - return "TLRequest" + FormatName(type) ; + return "TLRequest" + FormatName(type); } } private static bool IsFlagBase(string type) @@ -274,13 +270,12 @@ namespace TeleSharp.Generator { string innerType = type.Split('?')[1]; if (innerType == "true") return result; - else if ((new string[] {"bool","int", "uint", "long", "double" }).Contains(result)) return result + "?"; + else if ((new string[] { "bool", "int", "uint", "long", "double" }).Contains(result)) return result + "?"; else return result; } } public static string GetTypeName(string type) { - if (type.ToLower().Contains("inputcontact")) return "TLInputPhoneContact"; switch (type.ToLower()) { case "#": @@ -304,35 +299,39 @@ namespace TeleSharp.Generator case "x": return "TLObject"; } + if (type.StartsWith("Vector")) return "TLVector<" + GetTypeName(type.Replace("Vector<", "").Replace(">", "")) + ">"; + + if (type.ToLower().Contains("inputcontact")) + return "TLInputPhoneContact"; + + + if (type.IndexOf('.') != -1 && type.IndexOf('?') == -1) + { + + if (interfacesList.Any(x => x.ToLower() == (type).ToLower())) + return FormatName(type.Split('.')[0]) + "." + "TLAbs" + type.Split('.')[1]; + else if (classesList.Any(x => x.ToLower() == (type).ToLower())) + return FormatName(type.Split('.')[0]) + "." + "TL" + type.Split('.')[1]; + else + return FormatName(type.Split('.')[1]); + } + else if (type.IndexOf('?') == -1) + { + if (interfacesList.Any(x => x.ToLower() == type.ToLower())) + return "TLAbs" + type; + else if (classesList.Any(x => x.ToLower() == type.ToLower())) + return "TL" + type; + else + return type; + } else { - if (type.IndexOf('.') != -1 && type.IndexOf('?') == -1) - { - - if (interfacesList.Any(x => x.ToLower() == (type).ToLower())) - return FormatName(type.Split('.')[0]) + "." + "TLAbs" + type.Split('.')[1]; - else if (classesList.Any(x => x.ToLower() == (type).ToLower())) - return FormatName(type.Split('.')[0]) + "." + "TL" + type.Split('.')[1]; - else - return FormatName(type.Split('.')[1]); - } - else if (type.IndexOf('?') == -1) - { - if (interfacesList.Any(x => x.ToLower() == type.ToLower())) - return "TLAbs" + type; - else if (classesList.Any(x => x.ToLower() == type.ToLower())) - return "TL" + type; - else - return type; - } - else - { - return GetTypeName(type.Split('?')[1]); - } + return GetTypeName(type.Split('?')[1]); } + } public static string LookTypeInLists(string src) { @@ -401,7 +400,7 @@ namespace TeleSharp.Generator { if (p.type.ToLower().Contains("vector")) { - return $"{CheckForKeyword(p.name)} = ({GetTypeName(p.type)})ObjectUtils.DeserializeVector<{GetTypeName(p.type).Replace("TLVector<","").Replace(">","")}>(br);"; + return $"{CheckForKeyword(p.name)} = ({GetTypeName(p.type)})ObjectUtils.DeserializeVector<{GetTypeName(p.type).Replace("TLVector<", "").Replace(">", "")}>(br);"; } else return $"{CheckForKeyword(p.name)} = ({GetTypeName(p.type)})ObjectUtils.DeserializeObject(br);"; } diff --git a/TeleSharp.TL/TL/Contacts/TLRequestImportContacts.cs b/TeleSharp.TL/TL/Contacts/TLRequestImportContacts.cs index ebf15be..c42497d 100644 --- a/TeleSharp.TL/TL/Contacts/TLRequestImportContacts.cs +++ b/TeleSharp.TL/TL/Contacts/TLRequestImportContacts.cs @@ -30,7 +30,7 @@ namespace TeleSharp.TL.Contacts public override void DeserializeBody(BinaryReader br) { - contacts = ObjectUtils.DeserializeVector(br); + contacts = (TLVector)ObjectUtils.DeserializeVector(br); replace = BoolUtil.Deserialize(br); }