diff --git a/src/Discord.Net.Core/Entities/Users/IGuildUser.cs b/src/Discord.Net.Core/Entities/Users/IGuildUser.cs index 79e8f5dcc..471b8ac9c 100644 --- a/src/Discord.Net.Core/Entities/Users/IGuildUser.cs +++ b/src/Discord.Net.Core/Entities/Users/IGuildUser.cs @@ -28,5 +28,16 @@ namespace Discord Task KickAsync(RequestOptions options = null); /// Modifies this user's properties in this guild. Task ModifyAsync(Action func, RequestOptions options = null); + + /// Adds roles to this user in this guild. + Task AddRolesAsync(params IRole[] roles); + /// Adds roles to this user in this guild. + Task AddRolesAsync(IEnumerable roles); + /// Removes roles from this user in this guild. + Task RemoveRolesAsync(params IRole[] roles); + /// Removes roles from this user in this guild. + Task RemoveRolesAsync(IEnumerable roles); + /// Adds and removes roles from this user in this guild. + Task ChangeRolesAsync(IEnumerable add = null, IEnumerable remove = null); } } diff --git a/src/Discord.Net.Core/Extensions/GuildUserExtensions.cs b/src/Discord.Net.Core/Extensions/GuildUserExtensions.cs deleted file mode 100644 index 9d152adf9..000000000 --- a/src/Discord.Net.Core/Extensions/GuildUserExtensions.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace Discord -{ - public static class GuildUserExtensions - { - public static Task AddRolesAsync(this IGuildUser user, params IRole[] roles) - => ChangeRolesAsync(user, add: roles); - public static Task AddRolesAsync(this IGuildUser user, IEnumerable roles) - => ChangeRolesAsync(user, add: roles); - public static Task RemoveRolesAsync(this IGuildUser user, params IRole[] roles) - => ChangeRolesAsync(user, remove: roles); - public static Task RemoveRolesAsync(this IGuildUser user, IEnumerable roles) - => ChangeRolesAsync(user, remove: roles); - public static async Task ChangeRolesAsync(this IGuildUser user, IEnumerable add = null, IEnumerable remove = null) - { - IEnumerable roleIds = user.RoleIds; - if (remove != null) - roleIds = roleIds.Except(remove.Select(x => x.Id)); - if (add != null) - roleIds = roleIds.Concat(add.Select(x => x.Id)); - await user.ModifyAsync(x => x.RoleIds = roleIds.ToArray()).ConfigureAwait(false); - } - } -} diff --git a/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs b/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs index 8de42608d..5bc2d34b4 100644 --- a/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs +++ b/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs @@ -82,6 +82,23 @@ namespace Discord.Rest else if (args.RoleIds.IsSpecified) UpdateRoles(args.RoleIds.Value.ToArray()); } + public Task AddRolesAsync(params IRole[] roles) + => ChangeRolesAsync(add: roles); + public Task AddRolesAsync(IEnumerable roles) + => ChangeRolesAsync(add: roles); + public Task RemoveRolesAsync(params IRole[] roles) + => ChangeRolesAsync(remove: roles); + public Task RemoveRolesAsync(IEnumerable roles) + => ChangeRolesAsync(remove: roles); + public async Task ChangeRolesAsync(IEnumerable add = null, IEnumerable remove = null) + { + IEnumerable roleIds = RoleIds; + if (remove != null) + roleIds = roleIds.Except(remove.Select(x => x.Id)); + if (add != null) + roleIds = roleIds.Concat(add.Select(x => x.Id)); + await ModifyAsync(x => x.RoleIds = roleIds.ToArray()).ConfigureAwait(false); + } public Task KickAsync(RequestOptions options = null) => UserHelper.KickAsync(this, Discord, options); diff --git a/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs b/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs index 5162839d7..e0c95e9d8 100644 --- a/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs +++ b/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs @@ -107,6 +107,23 @@ namespace Discord.WebSocket => UserHelper.ModifyAsync(this, Discord, func, options); public Task KickAsync(RequestOptions options = null) => UserHelper.KickAsync(this, Discord, options); + public Task AddRolesAsync(params IRole[] roles) + => ChangeRolesAsync(add: roles); + public Task AddRolesAsync(IEnumerable roles) + => ChangeRolesAsync(add: roles); + public Task RemoveRolesAsync(params IRole[] roles) + => ChangeRolesAsync(remove: roles); + public Task RemoveRolesAsync(IEnumerable roles) + => ChangeRolesAsync(remove: roles); + public async Task ChangeRolesAsync(IEnumerable add = null, IEnumerable remove = null) + { + IEnumerable roleIds = _roleIds; + if (remove != null) + roleIds = roleIds.Except(remove.Select(x => x.Id)); + if (add != null) + roleIds = roleIds.Concat(add.Select(x => x.Id)); + await ModifyAsync(x => x.RoleIds = roleIds.ToArray()).ConfigureAwait(false); + } public ChannelPermissions GetPermissions(IGuildChannel channel) => new ChannelPermissions(Permissions.ResolveChannel(Guild, this, channel, GuildPermissions.RawValue));