diff --git a/Cocotte/Modules/Activities/ActivityFormatter.cs b/Cocotte/Modules/Activities/ActivityFormatter.cs index e270233..697baac 100644 --- a/Cocotte/Modules/Activities/ActivityFormatter.cs +++ b/Cocotte/Modules/Activities/ActivityFormatter.cs @@ -38,13 +38,16 @@ public class ActivityFormatter public EmbedBuilder ActivityEmbed(Activity activity, IReadOnlyCollection players) { + // Activity full + bool activityFull = players.Count >= activity.MaxPlayers; + // Compute padding using player with longest name var namePadding = players.Count > 0 ? players.Max(p => p.Name.Length) : 0; // Players field var playersField = new EmbedFieldBuilder() .WithName("Joueurs inscrits") - .WithValue($"{(!players.Any() ? "*Aucun joueur inscrit*" : string.Join("\n\n", players.Select(p => FormatActivityPlayer(p, namePadding))))}"); + .WithValue($"{(!players.Any() ? "*Aucun joueur inscrit*" : string.Join("\n", players.Select(p => FormatActivityPlayer(p, namePadding))))}"); var title = activity switch { @@ -59,8 +62,10 @@ public class ActivityFormatter string bannerUrl = $"https://sage.cdn.ilysix.fr/assets/Cocotte/banner/{GetActivityCode(activity.Name)}.webp"; + var color = activityFull ? Colors.CocotteOrange : Colors.CocotteBlue; + return new EmbedBuilder() - .WithColor(Colors.CocotteBlue) + .WithColor(color) .WithTitle(title) .WithDescription(description) .WithImageUrl(bannerUrl) diff --git a/Cocotte/Modules/Activities/ActivityModule.cs b/Cocotte/Modules/Activities/ActivityModule.cs index a325fc9..bc3fd6e 100644 --- a/Cocotte/Modules/Activities/ActivityModule.cs +++ b/Cocotte/Modules/Activities/ActivityModule.cs @@ -94,7 +94,7 @@ public partial class ActivityModule : InteractionModuleBase { @@ -162,7 +162,7 @@ public partial class ActivityModule : InteractionModuleBase { properties.Embed = _activityFormatter.ActivityEmbed(activity, players).Build(); + + // Disable join button if the activity is full on join, enable it on leave if activity is not full anymore + var isActivityFull = players.Count >= activity.MaxPlayers; + properties.Components = updateReason switch + { + ActivityUpdateReason.PlayerJoin when isActivityFull => ActivityComponents(activity.ActivityId, disabled: true).Build(), + ActivityUpdateReason.PlayerLeave when !isActivityFull => ActivityComponents(activity.ActivityId, disabled: false).Build(), + _ => Optional.Unspecified + }; }); } - private static ComponentBuilder ActivityRoleComponent(ulong activityId) + private static ComponentBuilder ActivityComponents(ulong activityId, bool disabled = false) { return new ComponentBuilder() .AddRow(new ActionRowBuilder() @@ -239,6 +248,7 @@ public partial class ActivityModule : InteractionModuleBase new(0x3196c8); + public static Color CocotteRed => new(0xe40808); + public static Color CocotteOrange => new(0xff6d01); // Colors used in embeds public static Color ErrorColor => new(0xFB6060);