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));