Пример #1
0
        public static async Task <bool> IsPhoneRegisteredAsync(this ITelegramClient client, string phoneNumber)
        {
            Guard.That(phoneNumber, nameof(phoneNumber)).IsNotNullOrWhiteSpace();

            var authCheckPhoneRequest = new TlRequestCheckPhone {
                PhoneNumber = phoneNumber
            };
            var completed = false;

            while (!completed)
            {
                try
                {
                    await client.SendRequestAsync <TlRequestCheckPhone>(authCheckPhoneRequest);

                    completed = true;
                }
                catch (PhoneMigrationException e)
                {
                    await client.ReconnectToDcAsync(e.Dc);
                }
            }

            return(authCheckPhoneRequest.Response.PhoneRegistered);
        }
Пример #2
0
        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);
            }
        }