From 11481a159e84b6c89d83186c0c3c60d7664c91dc Mon Sep 17 00:00:00 2001 From: Misha133 <61027276+Misha-133@users.noreply.github.com> Date: Sun, 26 Feb 2023 22:46:31 +0300 Subject: [PATCH] Optimize Add/RemoveRolesAsync methods (#2614) --- src/Discord.Net.Rest/Entities/Users/UserHelper.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Discord.Net.Rest/Entities/Users/UserHelper.cs b/src/Discord.Net.Rest/Entities/Users/UserHelper.cs index 965d83d2..b47da89c 100644 --- a/src/Discord.Net.Rest/Entities/Users/UserHelper.cs +++ b/src/Discord.Net.Rest/Entities/Users/UserHelper.cs @@ -81,14 +81,18 @@ namespace Discord.Rest public static async Task AddRolesAsync(IGuildUser user, BaseDiscordClient client, IEnumerable roleIds, RequestOptions options) { - foreach (var roleId in roleIds) - await client.ApiClient.AddRoleAsync(user.Guild.Id, user.Id, roleId, options).ConfigureAwait(false); + await client.ApiClient.ModifyGuildMemberAsync(user.GuildId, user.Id, args: new() + { + RoleIds = user.RoleIds.Except(new[] { user.Guild.Id }).Concat(roleIds).Distinct().ToArray() + }, options); } public static async Task RemoveRolesAsync(IGuildUser user, BaseDiscordClient client, IEnumerable roleIds, RequestOptions options) { - foreach (var roleId in roleIds) - await client.ApiClient.RemoveRoleAsync(user.Guild.Id, user.Id, roleId, options).ConfigureAwait(false); + await client.ApiClient.ModifyGuildMemberAsync(user.GuildId, user.Id, args: new() + { + RoleIds = user.RoleIds.Except(new[] { user.Guild.Id }).Except(roleIds).ToArray() + }, options); } public static async Task SetTimeoutAsync(IGuildUser user, BaseDiscordClient client, TimeSpan span, RequestOptions options)