From 935be1fc2fc454fad3356b3ce3512f36d8497522 Mon Sep 17 00:00:00 2001 From: Lala Sabathil Date: Tue, 26 Sep 2023 20:57:03 +0200 Subject: [PATCH] fix: possible fix for edit setting role icons --- DisCatSharp/Entities/Guild/DiscordRole.cs | 32 +++++++++++++++-------- DisCatSharp/Net/Models/RoleEditModel.cs | 4 +-- DisCatSharp/Net/Rest/DiscordApiClient.cs | 9 +++---- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/DisCatSharp/Entities/Guild/DiscordRole.cs b/DisCatSharp/Entities/Guild/DiscordRole.cs index 12ff328334..6381e8846d 100644 --- a/DisCatSharp/Entities/Guild/DiscordRole.cs +++ b/DisCatSharp/Entities/Guild/DiscordRole.cs @@ -24,7 +24,7 @@ public class DiscordRole : SnowflakeObject, IEquatable /// [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)] public string Name { get; internal set; } - + /// /// Gets the version number for this role. /// @@ -188,7 +188,7 @@ public Task ModifyPositionAsync(int position, string reason = null) /// Thrown when an invalid parameter was provided. /// Thrown when Discord is unable to process the request. public Task ModifyAsync(string name = null, Permissions? permissions = null, DiscordColor? color = null, bool? hoist = null, bool? mentionable = null, string reason = null) - => this.Discord.ApiClient.ModifyGuildRoleAsync(this.GuildId, this.Id, name, permissions, color?.Value, hoist, mentionable, null, null, reason); + => this.Discord.ApiClient.ModifyGuildRoleAsync(this.GuildId, this.Id, name, permissions, color?.Value, hoist, mentionable, Optional.None, Optional.None, reason); /// /// Updates this role. @@ -211,17 +211,27 @@ public Task ModifyAsync(Action action) if (mdl.Icon.HasValue && mdl.Icon.Value != null) iconb64 = ImageTool.Base64FromStream(mdl.Icon); else if (mdl.Icon.HasValue) - iconb64 = Optional.Some(null); + iconb64 = Optional.Some(null); + else + iconb64 = Optional.None; - var emoji = Optional.FromNullable(null); + var emoji = Optional.FromNullable(null); - if (mdl.UnicodeEmoji.HasValue && mdl.UnicodeEmoji.Value != null) - emoji = mdl.UnicodeEmoji - .MapOrNull(e => e.Id == 0 - ? e.Name - : throw new ArgumentException("Emoji must be unicode")); - else if (mdl.UnicodeEmoji.HasValue) - emoji = Optional.Some(null); + switch (mdl.UnicodeEmoji.HasValue) + { + case true when mdl.UnicodeEmoji.Value != null: + emoji = mdl.UnicodeEmoji + .MapOrNull(e => e.Id == 0 + ? e.Name + : throw new ArgumentException("Emoji must be unicode")); + break; + case true: + emoji = Optional.Some(null); + break; + case false: + emoji = Optional.None; + break; + } return canContinue ? this.Discord.ApiClient.ModifyGuildRoleAsync(this.GuildId, this.Id, mdl.Name, mdl.Permissions, mdl.Color?.Value, mdl.Hoist, mdl.Mentionable, iconb64, emoji, mdl.AuditLogReason) : throw new NotSupportedException($"Cannot modify role icon. Guild needs boost tier two."); } diff --git a/DisCatSharp/Net/Models/RoleEditModel.cs b/DisCatSharp/Net/Models/RoleEditModel.cs index 15c94d06d1..9ef56186ed 100644 --- a/DisCatSharp/Net/Models/RoleEditModel.cs +++ b/DisCatSharp/Net/Models/RoleEditModel.cs @@ -55,7 +55,7 @@ internal RoleEditModel() this.Color = null; this.Hoist = null; this.Mentionable = null; - this.Icon = null; - this.UnicodeEmoji = null; + this.Icon = Optional.None; + this.UnicodeEmoji = Optional.None; } } diff --git a/DisCatSharp/Net/Rest/DiscordApiClient.cs b/DisCatSharp/Net/Rest/DiscordApiClient.cs index 6714ed7eb5..d5710f0301 100644 --- a/DisCatSharp/Net/Rest/DiscordApiClient.cs +++ b/DisCatSharp/Net/Rest/DiscordApiClient.cs @@ -3374,16 +3374,13 @@ internal async Task ModifyGuildRoleAsync(ulong guildId, ulong roleI Mentionable = mentionable, }; - if (emoji.HasValue && !iconb64.HasValue) - pld.UnicodeEmoji = emoji; - if (emoji.HasValue && iconb64.HasValue) { pld.IconBase64 = null; pld.UnicodeEmoji = emoji; - } - - if (iconb64.HasValue) + } else if (emoji.HasValue && !iconb64.HasValue) + pld.UnicodeEmoji = emoji; + else if (iconb64.HasValue && !emoji.HasValue) pld.IconBase64 = iconb64; var headers = Utilities.GetBaseHeaders();