コード例 #1
0
        public async Task LoginAsync(string email, string password, RestRequestOptions options = null)
        {
            if (HasAuthorization)
            {
                throw new InvalidOperationException("Login may only be used from a client without authorization.");
            }

            ApiClient.SetTokenType(TokenType.User);
            string mfaCode = null;

            if (options != null)
            {
                mfaCode = options.MfaCode;
                options = new RestRequestOptionsBuilder()
                          .WithTimeout(options.Timeout)
                          .WithCancellationToken(options.CancellationToken)
                          .Build();
            }

            if (_lastLoginResponse == null || _lastLoginAt != default && (DateTimeOffset.UtcNow - _lastLoginAt).TotalMinutes > 1)
            {
                _lastLoginResponse = await ApiClient.LoginAsync(email, password, options).ConfigureAwait(false);

                _lastLoginAt = DateTimeOffset.UtcNow;
                if (_lastLoginResponse.Token != null)
                {
                    ApiClient.SetToken(_lastLoginResponse.Token);
                    return;
                }

                await Task.Delay(5000).ConfigureAwait(false);
            }

            await HandleTotpAsync(mfaCode, options).ConfigureAwait(false);
        }
コード例 #2
0
ファイル: RestRequestOptions.cs プロジェクト: k-boyle/Disqord
 internal RestRequestOptions(RestRequestOptionsBuilder builder)
 {
     Timeout                  = builder.Timeout;
     CancellationToken        = builder.CancellationToken;
     Reason                   = builder.Reason;
     MaximumRateLimitDuration = builder.MaximumRateLimitDuration;
 }