From c888c8475275927c1668b3ebc78a7d0ae5a370f9 Mon Sep 17 00:00:00 2001 From: Mihail Gribkov <61027276+Misha-133@users.noreply.github.com> Date: Fri, 9 May 2025 15:01:11 +0300 Subject: [PATCH] use `Color` for container `AccentColor` & fix action row validation (#3120) --- .../Builders/ActionRowBuilder.cs | 19 ++++++++----------- .../Builders/ContainerBuilder.cs | 4 ++-- .../MessageComponents/ContainerComponent.cs | 4 ++-- .../API/Common/ContainerComponent.cs | 2 +- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Interactions/MessageComponents/Builders/ActionRowBuilder.cs b/src/Discord.Net.Core/Entities/Interactions/MessageComponents/Builders/ActionRowBuilder.cs index 9fca1db1..b1e630f7 100644 --- a/src/Discord.Net.Core/Entities/Interactions/MessageComponents/Builders/ActionRowBuilder.cs +++ b/src/Discord.Net.Core/Entities/Interactions/MessageComponents/Builders/ActionRowBuilder.cs @@ -31,15 +31,7 @@ public class ActionRowBuilder : IMessageComponentBuilder, IInteractableComponent get => _components; set { - if (value == null) - throw new ArgumentNullException(nameof(value), $"{nameof(Components)} cannot be null."); - - _components = value.Count switch - { - 0 => throw new ArgumentOutOfRangeException(nameof(value), "There must be at least 1 component in a row."), - > MaxChildCount => throw new ArgumentOutOfRangeException(nameof(value), $"Action row can only contain {MaxChildCount} child components!"), - _ => value - }; + _components = value ?? throw new ArgumentNullException(nameof(value), $"{nameof(Components)} cannot be null."); } } @@ -48,7 +40,7 @@ public class ActionRowBuilder : IMessageComponentBuilder, IInteractableComponent /// public ActionRowBuilder(params IMessageComponentBuilder[] components) { - Components = components?.ToList(); + Components = components?.ToList() ?? []; } /// @@ -205,6 +197,9 @@ public class ActionRowBuilder : IMessageComponentBuilder, IInteractableComponent /// A that can be used within a public ActionRowComponent Build() { + Preconditions.AtLeast(Components.Count, 1, nameof(Components), "There must be at least 1 component in a row."); + Preconditions.AtMost(Components.Count, MaxChildCount, nameof(Components), $"Action row can only contain {MaxChildCount} child components!"); + return new ActionRowComponent(_components.Select(x => x.Build()).ToList()); } IMessageComponent IMessageComponentBuilder.Build() => Build(); @@ -231,10 +226,12 @@ public class ActionRowBuilder : IMessageComponentBuilder, IInteractableComponent } } - + /// IComponentContainer IComponentContainer.AddComponent(IMessageComponentBuilder component) => AddComponent(component); + /// IComponentContainer IComponentContainer.AddComponents(params IMessageComponentBuilder[] components) => AddComponents(components); + /// IComponentContainer IComponentContainer.WithComponents(IEnumerable components) => WithComponents(components); } diff --git a/src/Discord.Net.Core/Entities/Interactions/MessageComponents/Builders/ContainerBuilder.cs b/src/Discord.Net.Core/Entities/Interactions/MessageComponents/Builders/ContainerBuilder.cs index 7b3ece09..5c9e48b2 100644 --- a/src/Discord.Net.Core/Entities/Interactions/MessageComponents/Builders/ContainerBuilder.cs +++ b/src/Discord.Net.Core/Entities/Interactions/MessageComponents/Builders/ContainerBuilder.cs @@ -25,7 +25,7 @@ public class ContainerBuilder : IMessageComponentBuilder, IStaticComponentContai /// /// Gets or sets the accent color of this container. /// - public uint? AccentColor { get; set; } + public Color? AccentColor { get; set; } /// /// Gets or sets whether this container is a spoiler. @@ -59,7 +59,7 @@ public class ContainerBuilder : IMessageComponentBuilder, IStaticComponentContai /// public ContainerBuilder WithAccentColor(Color? color) { - AccentColor = color?.RawValue; + AccentColor = color; return this; } diff --git a/src/Discord.Net.Core/Entities/Interactions/MessageComponents/ContainerComponent.cs b/src/Discord.Net.Core/Entities/Interactions/MessageComponents/ContainerComponent.cs index 79a40b15..20c54d6f 100644 --- a/src/Discord.Net.Core/Entities/Interactions/MessageComponents/ContainerComponent.cs +++ b/src/Discord.Net.Core/Entities/Interactions/MessageComponents/ContainerComponent.cs @@ -21,14 +21,14 @@ public class ContainerComponent : IMessageComponent /// /// Gets the accent color of this container. /// - public uint? AccentColor { get; } + public Color? AccentColor { get; } /// /// Gets whether this container is a spoiler. /// public bool? IsSpoiler { get; } - internal ContainerComponent(IReadOnlyCollection components, uint? accentColor, bool? isSpoiler, int? id = null) + internal ContainerComponent(IReadOnlyCollection components, Color? accentColor, bool? isSpoiler, int? id = null) { Components = components; AccentColor = accentColor; diff --git a/src/Discord.Net.Rest/API/Common/ContainerComponent.cs b/src/Discord.Net.Rest/API/Common/ContainerComponent.cs index 969906bc..311eb312 100644 --- a/src/Discord.Net.Rest/API/Common/ContainerComponent.cs +++ b/src/Discord.Net.Rest/API/Common/ContainerComponent.cs @@ -27,7 +27,7 @@ internal class ContainerComponent : IMessageComponent { Type = component.Type; Id = component.Id ?? Optional.Unspecified; - AccentColor = component.AccentColor ?? Optional.Unspecified; + AccentColor = component.AccentColor?.RawValue ?? Optional.Unspecified; IsSpoiler = component.IsSpoiler ?? Optional.Unspecified; Components = component.Components.Select(x => x.ToModel()).ToArray(); }