From 50392d3688c815fb296c137e9c895c6fa2d4cc28 Mon Sep 17 00:00:00 2001 From: RogueException Date: Mon, 23 May 2016 02:22:51 -0300 Subject: [PATCH] Added a couple of buckets, fixed logging out --- src/Discord.Net/API/DiscordAPIClient.cs | 21 ++++++++++++++----- .../Net/Rest/RequestQueue/GlobalBucket.cs | 1 + .../Net/Rest/RequestQueue/GuildBucket.cs | 1 + .../Net/Rest/RequestQueue/RequestQueue.cs | 2 ++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/Discord.Net/API/DiscordAPIClient.cs b/src/Discord.Net/API/DiscordAPIClient.cs index c634ea3f7..edfdb9a64 100644 --- a/src/Discord.Net/API/DiscordAPIClient.cs +++ b/src/Discord.Net/API/DiscordAPIClient.cs @@ -23,7 +23,7 @@ namespace Discord.API private readonly RequestQueue _requestQueue; private readonly JsonSerializer _serializer; - private IRestClient _restClient; + private readonly IRestClient _restClient; private CancellationToken _cancelToken; public TokenType AuthTokenType { get; private set; } @@ -68,15 +68,26 @@ namespace Discord.API } public async Task Login(LoginParams args, CancellationToken cancelToken) { - var response = await Send("POST", "auth/login", args).ConfigureAwait(false); - AuthTokenType = TokenType.User; + _restClient.SetHeader("authorization", null); + _cancelToken = cancelToken; + + LoginResponse response; + try + { + response = await Send("POST", "auth/login", args, GlobalBucket.Login).ConfigureAwait(false); + } + catch + { + _cancelToken = CancellationToken.None; + throw; + } + _restClient.SetHeader("authorization", response.Token); } public async Task Logout() { await _requestQueue.Clear().ConfigureAwait(false); - _restClient = null; } //Core @@ -527,7 +538,7 @@ namespace Discord.API Preconditions.NotEqual(userId, 0, nameof(userId)); Preconditions.NotNull(args, nameof(args)); - await Send("PATCH", $"guilds/{guildId}/members/{userId}", args).ConfigureAwait(false); + await Send("PATCH", $"guilds/{guildId}/members/{userId}", args, GuildBucket.ModifyMember, guildId).ConfigureAwait(false); } //Guild Roles diff --git a/src/Discord.Net/Net/Rest/RequestQueue/GlobalBucket.cs b/src/Discord.Net/Net/Rest/RequestQueue/GlobalBucket.cs index 4e7126f5e..9ce523155 100644 --- a/src/Discord.Net/Net/Rest/RequestQueue/GlobalBucket.cs +++ b/src/Discord.Net/Net/Rest/RequestQueue/GlobalBucket.cs @@ -3,6 +3,7 @@ public enum GlobalBucket { General, + Login, DirectMessage } } diff --git a/src/Discord.Net/Net/Rest/RequestQueue/GuildBucket.cs b/src/Discord.Net/Net/Rest/RequestQueue/GuildBucket.cs index ccb3fa994..cb4c0d9a8 100644 --- a/src/Discord.Net/Net/Rest/RequestQueue/GuildBucket.cs +++ b/src/Discord.Net/Net/Rest/RequestQueue/GuildBucket.cs @@ -5,6 +5,7 @@ SendEditMessage, DeleteMessage, DeleteMessages, + ModifyMember, Nickname } } diff --git a/src/Discord.Net/Net/Rest/RequestQueue/RequestQueue.cs b/src/Discord.Net/Net/Rest/RequestQueue/RequestQueue.cs index 39a657cb4..9bf2189fe 100644 --- a/src/Discord.Net/Net/Rest/RequestQueue/RequestQueue.cs +++ b/src/Discord.Net/Net/Rest/RequestQueue/RequestQueue.cs @@ -64,6 +64,7 @@ namespace Discord.Net.Rest { //Globals case GlobalBucket.General: return new RequestQueueBucket(this, bucket, int.MaxValue, 0); //Catch-all + case GlobalBucket.Login: return new RequestQueueBucket(this, bucket, 1, 1); //TODO: Is this actual logins or token validations too? case GlobalBucket.DirectMessage: return new RequestQueueBucket(this, bucket, 5, 5); default: throw new ArgumentException($"Unknown global bucket: {bucket}", nameof(bucket)); @@ -77,6 +78,7 @@ namespace Discord.Net.Rest case GuildBucket.SendEditMessage: return new RequestQueueBucket(this, bucket, guildId, 5, 5); case GuildBucket.DeleteMessage: return new RequestQueueBucket(this, bucket, guildId, 5, 1); case GuildBucket.DeleteMessages: return new RequestQueueBucket(this, bucket, guildId, 1, 1); + case GuildBucket.ModifyMember: return new RequestQueueBucket(this, bucket, guildId, 10, 10); //TODO: Is this all users or just roles? case GuildBucket.Nickname: return new RequestQueueBucket(this, bucket, guildId, 1, 1); default: throw new ArgumentException($"Unknown guild bucket: {bucket}", nameof(bucket));