| @@ -23,7 +23,7 @@ namespace Discord.API | |||||
| private readonly RequestQueue _requestQueue; | private readonly RequestQueue _requestQueue; | ||||
| private readonly JsonSerializer _serializer; | private readonly JsonSerializer _serializer; | ||||
| private IRestClient _restClient; | |||||
| private readonly IRestClient _restClient; | |||||
| private CancellationToken _cancelToken; | private CancellationToken _cancelToken; | ||||
| public TokenType AuthTokenType { get; private set; } | public TokenType AuthTokenType { get; private set; } | ||||
| @@ -68,15 +68,26 @@ namespace Discord.API | |||||
| } | } | ||||
| public async Task Login(LoginParams args, CancellationToken cancelToken) | public async Task Login(LoginParams args, CancellationToken cancelToken) | ||||
| { | { | ||||
| var response = await Send<LoginResponse>("POST", "auth/login", args).ConfigureAwait(false); | |||||
| AuthTokenType = TokenType.User; | AuthTokenType = TokenType.User; | ||||
| _restClient.SetHeader("authorization", null); | |||||
| _cancelToken = cancelToken; | |||||
| LoginResponse response; | |||||
| try | |||||
| { | |||||
| response = await Send<LoginResponse>("POST", "auth/login", args, GlobalBucket.Login).ConfigureAwait(false); | |||||
| } | |||||
| catch | |||||
| { | |||||
| _cancelToken = CancellationToken.None; | |||||
| throw; | |||||
| } | |||||
| _restClient.SetHeader("authorization", response.Token); | _restClient.SetHeader("authorization", response.Token); | ||||
| } | } | ||||
| public async Task Logout() | public async Task Logout() | ||||
| { | { | ||||
| await _requestQueue.Clear().ConfigureAwait(false); | await _requestQueue.Clear().ConfigureAwait(false); | ||||
| _restClient = null; | |||||
| } | } | ||||
| //Core | //Core | ||||
| @@ -527,7 +538,7 @@ namespace Discord.API | |||||
| Preconditions.NotEqual(userId, 0, nameof(userId)); | Preconditions.NotEqual(userId, 0, nameof(userId)); | ||||
| Preconditions.NotNull(args, nameof(args)); | 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 | //Guild Roles | ||||
| @@ -3,6 +3,7 @@ | |||||
| public enum GlobalBucket | public enum GlobalBucket | ||||
| { | { | ||||
| General, | General, | ||||
| Login, | |||||
| DirectMessage | DirectMessage | ||||
| } | } | ||||
| } | } | ||||
| @@ -5,6 +5,7 @@ | |||||
| SendEditMessage, | SendEditMessage, | ||||
| DeleteMessage, | DeleteMessage, | ||||
| DeleteMessages, | DeleteMessages, | ||||
| ModifyMember, | |||||
| Nickname | Nickname | ||||
| } | } | ||||
| } | } | ||||
| @@ -64,6 +64,7 @@ namespace Discord.Net.Rest | |||||
| { | { | ||||
| //Globals | //Globals | ||||
| case GlobalBucket.General: return new RequestQueueBucket(this, bucket, int.MaxValue, 0); //Catch-all | 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); | case GlobalBucket.DirectMessage: return new RequestQueueBucket(this, bucket, 5, 5); | ||||
| default: throw new ArgumentException($"Unknown global bucket: {bucket}", nameof(bucket)); | 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.SendEditMessage: return new RequestQueueBucket(this, bucket, guildId, 5, 5); | ||||
| case GuildBucket.DeleteMessage: return new RequestQueueBucket(this, bucket, guildId, 5, 1); | case GuildBucket.DeleteMessage: return new RequestQueueBucket(this, bucket, guildId, 5, 1); | ||||
| case GuildBucket.DeleteMessages: return new RequestQueueBucket(this, bucket, guildId, 1, 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); | case GuildBucket.Nickname: return new RequestQueueBucket(this, bucket, guildId, 1, 1); | ||||
| default: throw new ArgumentException($"Unknown guild bucket: {bucket}", nameof(bucket)); | default: throw new ArgumentException($"Unknown guild bucket: {bucket}", nameof(bucket)); | ||||