public static async Task <string> SendCodeRequestAsync(this ITelegramClient client, string phoneNumber) { Guard.That(phoneNumber, nameof(phoneNumber)).IsNotNullOrWhiteSpace(); var completed = false; var clientSettings = client.GetSettings(); var request = new TlRequestSendCode { PhoneNumber = phoneNumber, ApiId = clientSettings.AppId, ApiHash = clientSettings.AppHash }; while (!completed) { try { await client.SendRequestAsync <TlSentCode>(request); completed = true; } catch (PhoneMigrationException ex) { await client.ReconnectToDcAsync(ex.Dc); } } return(request.Response.PhoneCodeHash); }
public static async Task <TlFile> GetFile(this ITelegramClient client, TlAbsInputFileLocation location, int filePartSize, int offset = 0) { try { return(await client.SendRequestAsync <TlFile>(new TlRequestGetFile { Location = location, Limit = filePartSize, Offset = offset })); } catch (FileMigrationException ex) { var exportedAuth = await client.SendRequestAsync <TlExportedAuthorization>(new TlRequestExportAuthorization { DcId = ex.Dc }); var clientSettings = client.GetSettings(); Guard.That(clientSettings).IsNotNull(); Guard.That(clientSettings.Session).IsNotNull(); var authKey = clientSettings.Session.AuthKey; var timeOffset = clientSettings.Session.TimeOffset; var serverAddress = clientSettings.Session.ServerAddress; var serverPort = clientSettings.Session.Port; await client.ReconnectToDcAsync(ex.Dc); await client.SendRequestAsync <TlAuthorization>(new TlRequestImportAuthorization { Bytes = exportedAuth.Bytes, Id = exportedAuth.Id }); var result = await client.GetFile(location, filePartSize, offset); clientSettings.Session.AuthKey = authKey; clientSettings.Session.TimeOffset = timeOffset; clientSettings.Session.ServerAddress = serverAddress; clientSettings.Session.Port = serverPort; await client.ConnectAsync(); return(result); } }