Browse Source

Added IGuildUser.ChangeRolesAsync

tags/1.0-rc
RogueException 8 years ago
parent
commit
3a5e4b23da
1 changed files with 14 additions and 5 deletions
  1. +14
    -5
      src/Discord.Net.Core/Extensions/GuildUserExtensions.cs

+ 14
- 5
src/Discord.Net.Core/Extensions/GuildUserExtensions.cs View File

@@ -6,14 +6,23 @@ namespace Discord
{
public static class GuildUserExtensions
{
//TODO: Should we remove Add/Remove? Encourages race conditions.
public static Task AddRolesAsync(this IGuildUser user, params IRole[] roles)
=> AddRolesAsync(user, (IEnumerable<IRole>)roles);
=> ChangeRolesAsync(user, add: roles);
public static Task AddRolesAsync(this IGuildUser user, IEnumerable<IRole> roles)
=> user.ModifyAsync(x => x.RoleIds = user.RoleIds.Concat(roles.Select(y => y.Id)).ToArray());

=> ChangeRolesAsync(user, add: roles);
public static Task RemoveRolesAsync(this IGuildUser user, params IRole[] roles)
=> RemoveRolesAsync(user, (IEnumerable<IRole>)roles);
=> ChangeRolesAsync(user, remove: roles);
public static Task RemoveRolesAsync(this IGuildUser user, IEnumerable<IRole> roles)
=> user.ModifyAsync(x => x.RoleIds = user.RoleIds.Except(roles.Select(y => y.Id)).ToArray());
=> ChangeRolesAsync(user, remove: roles);
public static async Task ChangeRolesAsync(this IGuildUser user, IEnumerable<IRole> add = null, IEnumerable<IRole> remove = null)
{
IEnumerable<ulong> 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);
}
}
}

Loading…
Cancel
Save