diff --git a/Cocotte/Modules/Activities/ActivityFormatter.cs b/Cocotte/Modules/Activities/ActivityFormatter.cs index 64ce343..d73000f 100644 --- a/Cocotte/Modules/Activities/ActivityFormatter.cs +++ b/Cocotte/Modules/Activities/ActivityFormatter.cs @@ -63,7 +63,7 @@ public class ActivityFormatter public string FormatActivityPlayer(ActivityPlayer player) => player switch { - ActivityRolePlayer rolePlayer => $"{player.Name} {RolesToEmotes(rolePlayer.Roles)}", + ActivityRolePlayer rolePlayer => $"{player.Name} - {RolesToEmotes(rolePlayer.Roles)}", _ => $"{player.Name})" }; @@ -73,22 +73,22 @@ public class ActivityFormatter if (rolePlayerRoles.HasFlag(ActivityRoles.Helper)) { - emotesBuilder.Append($"{_options.HelperEmote}/"); + emotesBuilder.Append($" {_options.HelperEmote} "); } if (rolePlayerRoles.HasFlag(ActivityRoles.Dps)) { - emotesBuilder.Append(_options.DpsEmote); + emotesBuilder.Append($" {_options.DpsEmote} "); } if (rolePlayerRoles.HasFlag(ActivityRoles.Tank)) { - emotesBuilder.Append(_options.TankEmote); + emotesBuilder.Append($" {_options.TankEmote} "); } if (rolePlayerRoles.HasFlag(ActivityRoles.Support)) { - emotesBuilder.Append(_options.SupportEmote); + emotesBuilder.Append($" {_options.SupportEmote} "); } return emotesBuilder.ToString(); diff --git a/Cocotte/Modules/Activities/ActivityModule.cs b/Cocotte/Modules/Activities/ActivityModule.cs index 1759b67..fc3581e 100644 --- a/Cocotte/Modules/Activities/ActivityModule.cs +++ b/Cocotte/Modules/Activities/ActivityModule.cs @@ -14,7 +14,7 @@ namespace Cocotte.Modules.Activities; /// [Group("activite", "Organise des activités")] [SuppressMessage("ReSharper", "UnusedMember.Local")] -public class ActivityModule : InteractionModuleBase +public partial class ActivityModule : InteractionModuleBase { private readonly ILogger _logger; private readonly ActivityOptions _options; @@ -129,6 +129,17 @@ public class ActivityModule : InteractionModuleBase return; } + // Check if activity is full + if (await _activitiesRepository.ActivityPlayerCount(activity) >= activity.MaxPlayers) + { + await RespondAsync( + ephemeral: true, + embed: EmbedUtils.ErrorEmbed("L'activité est complète").Build() + ); + + return; + } + _logger.LogTrace("Player {Player} joined activity {Id}", user.DisplayName, activityId); var roles = _activityHelper.GetPlayerRoles(user.Roles); diff --git a/Cocotte/Modules/Activities/ActivityModuleDebug.cs b/Cocotte/Modules/Activities/ActivityModuleDebug.cs new file mode 100644 index 0000000..05cadd9 --- /dev/null +++ b/Cocotte/Modules/Activities/ActivityModuleDebug.cs @@ -0,0 +1,42 @@ +using Cocotte.Modules.Activities.Models; +using Cocotte.Utils; +using Discord; +using Discord.Interactions; + +namespace Cocotte.Modules.Activities; + +#if DEBUG +public partial class ActivityModule +{ + [MessageCommand("Add role player")] + public async Task AddRolePlayer(IMessage message) + { + if (message is IUserMessage userMessage && userMessage.Author.IsBot) + { + if (await _activitiesRepository.FindActivity(message.Id) is { } activity) + { + // Generate random player + var player = new ActivityRolePlayer + { + Activity = activity, + Name = $"Player{Random.Shared.Next(1, 100)}", + DiscordId = (ulong) Random.Shared.NextInt64(), + Roles = (ActivityRoles) Random.Shared.Next((int) (ActivityRoles.Dps | ActivityRoles.Helper | + ActivityRoles.Support | ActivityRoles.Tank) + 1) + }; + + // Add the player to the activity + activity.ActivityPlayers.Add(player); + await _activitiesRepository.SaveChanges(); + + await UpdateActivityEmbed(activity); + } + } + + await RespondAsync( + embed: EmbedUtils.SuccessEmbed($"Successfully added a player").Build(), + ephemeral: true + ); + } +} +#endif \ No newline at end of file diff --git a/Cocotte/Modules/Activities/Models/ActivitiesRepository.cs b/Cocotte/Modules/Activities/Models/ActivitiesRepository.cs index 2b3bed7..8c8810f 100644 --- a/Cocotte/Modules/Activities/Models/ActivitiesRepository.cs +++ b/Cocotte/Modules/Activities/Models/ActivitiesRepository.cs @@ -1,4 +1,5 @@ using Cocotte.Services; +using Microsoft.EntityFrameworkCore; namespace Cocotte.Modules.Activities.Models; @@ -31,6 +32,9 @@ public class ActivitiesRepository return await _cocotteDbContext.ActivityRolePlayers.FindAsync(activityId, playerId); } + public async Task ActivityPlayerCount(Activity activity) => + await _cocotteDbContext.ActivityPlayers.Where(player => player.ActivityId == activity.ActivityId).CountAsync(); + public async Task> LoadActivityPlayers(Activity activity) { await _cocotteDbContext