diff --git a/src/Discord.Net.Core/Entities/Users/IGuildUser.cs b/src/Discord.Net.Core/Entities/Users/IGuildUser.cs
index 1f50ae596..fbbbaeec4 100644
--- a/src/Discord.Net.Core/Entities/Users/IGuildUser.cs
+++ b/src/Discord.Net.Core/Entities/Users/IGuildUser.cs
@@ -29,19 +29,9 @@ namespace Discord
/// 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 ModifyRolesAsync(IEnumerable add = null, IEnumerable remove = null);
- /// Replaces roles from this user in this guild.
- Task ModifyRolesAsync(params IRole[] roles);
- /// Replaces roles from this user in this guild.
- Task ModifyRolesAsync(IEnumerable roles);
+ /// Adds roles to this user in this guild.
+ Task AddRolesAsync(IEnumerable roles, RequestOptions options = null);
+ /// Removes roles from this user in this guild.
+ Task RemoveRolesAsync(IEnumerable roles, RequestOptions options = null);
}
}
diff --git a/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs b/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs
index f6290bf5d..d8282fe86 100644
--- a/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs
+++ b/src/Discord.Net.Rest/Entities/Users/RestGuildUser.cs
@@ -82,29 +82,12 @@ namespace Discord.Rest
else if (args.RoleIds.IsSpecified)
UpdateRoles(args.RoleIds.Value.ToArray());
}
- public Task AddRolesAsync(params IRole[] roles)
- => ModifyRolesAsync(add: roles);
- public Task AddRolesAsync(IEnumerable roles)
- => ModifyRolesAsync(add: roles);
- public Task RemoveRolesAsync(params IRole[] roles)
- => ModifyRolesAsync(remove: roles);
- public Task RemoveRolesAsync(IEnumerable roles)
- => ModifyRolesAsync(remove: roles);
- public async Task ModifyRolesAsync(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);
- }
- /// Replaces roles from this user in this guild.
- public Task ModifyRolesAsync(params IRole[] roles)
- => ModifyRolesAsync(roles as IEnumerable);
- /// Replaces roles from this user in this guild.
- public Task ModifyRolesAsync(IEnumerable roles)
- => ModifyAsync(x => x.Roles = new Optional>(roles));
+ ///
+ public Task AddRolesAsync(IEnumerable roles, RequestOptions options = null)
+ => UserHelper.ModifyAsync(this, Discord, x => x.RoleIds = new Optional>(_roleIds.Concat(roles.Select(xr => xr.Id))), options);
+ ///
+ public Task RemoveRolesAsync(IEnumerable roles, RequestOptions options = null)
+ => UserHelper.ModifyAsync(this, Discord, x => x.RoleIds = new Optional>(_roleIds.Except(roles.Select(xr => xr.Id))), options);
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 08567756d..66e8ff53b 100644
--- a/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs
+++ b/src/Discord.Net.WebSocket/Entities/Users/SocketGuildUser.cs
@@ -107,29 +107,12 @@ 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)
- => ModifyRolesAsync(add: roles);
- public Task AddRolesAsync(IEnumerable roles)
- => ModifyRolesAsync(add: roles);
- public Task RemoveRolesAsync(params IRole[] roles)
- => ModifyRolesAsync(remove: roles);
- public Task RemoveRolesAsync(IEnumerable roles)
- => ModifyRolesAsync(remove: roles);
- public async Task ModifyRolesAsync(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);
- }
- /// Replaces roles from this user in this guild.
- public Task ModifyRolesAsync(params IRole[] roles)
- => ModifyRolesAsync(roles as IEnumerable);
- /// Replaces roles from this user in this guild.
- public Task ModifyRolesAsync(IEnumerable roles)
- => ModifyAsync(x => x.Roles = new Optional>(roles));
+ ///
+ public Task AddRolesAsync(IEnumerable roles, RequestOptions options = null)
+ => UserHelper.ModifyAsync(this, Discord, x => x.RoleIds = new Optional>(_roleIds.Concat(roles.Select(xr => xr.Id))), options);
+ ///
+ public Task RemoveRolesAsync(IEnumerable roles, RequestOptions options = null)
+ => UserHelper.ModifyAsync(this, Discord, x => x.RoleIds = new Optional>(_roleIds.Except(roles.Select(xr => xr.Id))), options);
public ChannelPermissions GetPermissions(IGuildChannel channel)
=> new ChannelPermissions(Permissions.ResolveChannel(Guild, this, channel, GuildPermissions.RawValue));