From f087eeabf44c26e4c491fbf4301d4b94b2afdaa7 Mon Sep 17 00:00:00 2001 From: RogueException Date: Fri, 16 Oct 2015 23:37:43 -0300 Subject: [PATCH] Added CreateRole and EditRole responses --- src/Discord.Net/API/Responses.cs | 4 ++++ src/Discord.Net/DiscordAPIClient.cs | 11 +++++----- src/Discord.Net/DiscordClient.API.cs | 32 ++++++++++++++++------------ 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/Discord.Net/API/Responses.cs b/src/Discord.Net/API/Responses.cs index 4b30fb65a..7936679e8 100644 --- a/src/Discord.Net/API/Responses.cs +++ b/src/Discord.Net/API/Responses.cs @@ -47,6 +47,10 @@ namespace Discord.API //Profile public sealed class EditProfileResponse : SelfUserInfo { } + + //Roles + public sealed class CreateRoleResponse : RoleInfo { } + public sealed class EditRoleResponse : RoleInfo { } //Servers public sealed class CreateServerResponse : GuildInfo { } diff --git a/src/Discord.Net/DiscordAPIClient.cs b/src/Discord.Net/DiscordAPIClient.cs index cd34bc169..6614eefbf 100644 --- a/src/Discord.Net/DiscordAPIClient.cs +++ b/src/Discord.Net/DiscordAPIClient.cs @@ -256,12 +256,11 @@ namespace Discord } //Roles - public Task CreateRole(string serverId) + public Task CreateRole(string serverId) { if (serverId == null) throw new ArgumentNullException(nameof(serverId)); - - //TODO: Return a response when Discord starts giving us one - return _rest.Post(Endpoints.ServerRoles(serverId)); + + return _rest.Post(Endpoints.ServerRoles(serverId)); } public Task DeleteRole(string serverId, string roleId) { @@ -270,13 +269,13 @@ namespace Discord return _rest.Delete(Endpoints.ServerRole(serverId, roleId)); } - public Task EditRole(string serverId, string roleId, string name = null, uint? permissions = null, uint? color = null, bool? hoist = null) + public Task EditRole(string serverId, string roleId, string name = null, uint? permissions = null, uint? color = null, bool? hoist = null) { if (serverId == null) throw new ArgumentNullException(nameof(serverId)); if (roleId == null) throw new ArgumentNullException(nameof(roleId)); var request = new EditRoleRequest { Name = name, Permissions = permissions, Hoist = hoist, Color = color }; - return _rest.Patch(Endpoints.ServerRole(serverId, roleId), request); + return _rest.Patch(Endpoints.ServerRole(serverId, roleId), request); } public Task ReorderRoles(string serverId, IEnumerable roleIds, int startPos = 0) { diff --git a/src/Discord.Net/DiscordClient.API.cs b/src/Discord.Net/DiscordClient.API.cs index a7985bac4..780c1974a 100644 --- a/src/Discord.Net/DiscordClient.API.cs +++ b/src/Discord.Net/DiscordClient.API.cs @@ -665,30 +665,34 @@ namespace Discord //Roles /// Note: due to current API limitations, the created role cannot be returned. - public Task CreateRole(Server server) + public Task CreateRole(Server server) => CreateRole(server?.Id); /// Note: due to current API limitations, the created role cannot be returned. - public Task CreateRole(string serverId) + public async Task CreateRole(string serverId) { CheckReady(); if (serverId == null) throw new NullReferenceException(nameof(serverId)); - return _api.CreateRole(serverId); + var response = await _api.CreateRole(serverId).ConfigureAwait(false); + var role = _roles.GetOrAdd(response.Id, serverId, false); + role.Update(response); + return role; } - public Task EditRole(string roleId, string name = null, PackedServerPermissions permissions = null, PackedColor color = null, bool? hoist = null, int? position = null) - => EditRole(_roles[roleId], name: name, permissions: permissions, color: color, hoist: hoist, position: position); - public async Task EditRole(Role role, string name = null, PackedServerPermissions permissions = null, PackedColor color = null, bool? hoist = null, int? position = null) + public Task EditRole(Role role, string name = null, PackedServerPermissions permissions = null, PackedColor color = null, bool? hoist = null, int? position = null) + => EditRole(role.ServerId, role.Id, name: name, permissions: permissions, color: color, hoist: hoist, position: position); + public async Task EditRole(string serverId, string roleId, string name = null, PackedServerPermissions permissions = null, PackedColor color = null, bool? hoist = null, int? position = null) { CheckReady(); - if (role == null) throw new NullReferenceException(nameof(role)); - - //TODO: Stop defaulting to cache variables once the server stops 500ing at us - await _api.EditRole(role.ServerId, role.Id, - name: name ?? role.Name, - permissions: permissions?.RawValue ?? role.Permissions.RawValue, - color: color?.RawValue ?? role.Color.RawValue, - hoist: hoist ?? role.Hoist); + if (serverId == null) throw new NullReferenceException(nameof(serverId)); + if (roleId == null) throw new NullReferenceException(nameof(roleId)); + + var response = await _api.EditRole(serverId, roleId, name: name, + permissions: permissions?.RawValue, color: color?.RawValue, hoist: hoist); + + var role = _roles[response.Id]; + if (role != null) + role.Update(response); if (position != null) {