From 8db87b90985bb4ec82d81c885ae5c6aaf306de5c Mon Sep 17 00:00:00 2001 From: Eveldee Date: Wed, 22 Mar 2023 22:59:37 +0100 Subject: [PATCH] [Activity] Add all activities --- .../Modules/Activities/ActivityFormatter.cs | 14 +- Cocotte/Modules/Activities/ActivityHelper.cs | 15 +- Cocotte/Modules/Activities/ActivityModule.cs | 164 +++++++++++++++--- .../Modules/Activities/ActivityModuleDebug.cs | 4 +- Cocotte/Modules/Activities/Models/Activity.cs | 4 +- .../Activities/Models/ActivityRolePlayer.cs | 2 +- .../Activities/Models/InterstellarActivity.cs | 11 ++ .../Activities/Models/InterstellarColor.cs | 15 ++ .../{ActivityRoles.cs => PlayerRoles.cs} | 2 +- Cocotte/Program.cs | 2 +- 10 files changed, 187 insertions(+), 46 deletions(-) create mode 100644 Cocotte/Modules/Activities/Models/InterstellarActivity.cs create mode 100644 Cocotte/Modules/Activities/Models/InterstellarColor.cs rename Cocotte/Modules/Activities/{ActivityRoles.cs => PlayerRoles.cs} (82%) diff --git a/Cocotte/Modules/Activities/ActivityFormatter.cs b/Cocotte/Modules/Activities/ActivityFormatter.cs index 697baac..d860535 100644 --- a/Cocotte/Modules/Activities/ActivityFormatter.cs +++ b/Cocotte/Modules/Activities/ActivityFormatter.cs @@ -26,7 +26,7 @@ public class ActivityFormatter ActivityName.VoidRift => "Failles du néant", ActivityName.OriginsOfWar => "Origine de la guerre", ActivityName.JointOperation => "Opération conjointe", - ActivityName.InterstellarExploration => "Exploration interstellaire", + ActivityName.InterstellarExploration => "Portes interstellaires", ActivityName.BreakFromDestiny => "Échapper au destin (3v3)", ActivityName.CriticalAbyss => "Abîme critique (8v8)", ActivityName.Event => "Event", @@ -92,29 +92,29 @@ public class ActivityFormatter public string FormatActivityPlayer(ActivityPlayer player, int namePadding) => player switch { ActivityRolePlayer rolePlayer => $"` {player.Name.PadRight(namePadding)} ` **―** {RolesToEmotes(rolePlayer.Roles)}", - _ => $"{player.Name})" + _ => $"` {player.Name} `" }; - private string RolesToEmotes(ActivityRoles rolePlayerRoles) + private string RolesToEmotes(PlayerRoles rolePlayerRoles) { var emotesBuilder = new StringBuilder(); - if (rolePlayerRoles.HasFlag(ActivityRoles.Helper)) + if (rolePlayerRoles.HasFlag(PlayerRoles.Helper)) { emotesBuilder.Append($" {_options.HelperEmote} "); } - if (rolePlayerRoles.HasFlag(ActivityRoles.Dps)) + if (rolePlayerRoles.HasFlag(PlayerRoles.Dps)) { emotesBuilder.Append($" {_options.DpsEmote} "); } - if (rolePlayerRoles.HasFlag(ActivityRoles.Tank)) + if (rolePlayerRoles.HasFlag(PlayerRoles.Tank)) { emotesBuilder.Append($" {_options.TankEmote} "); } - if (rolePlayerRoles.HasFlag(ActivityRoles.Support)) + if (rolePlayerRoles.HasFlag(PlayerRoles.Support)) { emotesBuilder.Append($" {_options.SupportEmote} "); } diff --git a/Cocotte/Modules/Activities/ActivityHelper.cs b/Cocotte/Modules/Activities/ActivityHelper.cs index fcf4f66..70c0307 100644 --- a/Cocotte/Modules/Activities/ActivityHelper.cs +++ b/Cocotte/Modules/Activities/ActivityHelper.cs @@ -15,19 +15,19 @@ public class ActivityHelper _options = options.Value; } - public ActivityRoles GetPlayerRoles(IEnumerable userRoles) + public PlayerRoles GetPlayerRoles(IEnumerable userRoles) { - var roles = ActivityRoles.None; + var roles = PlayerRoles.None; foreach (var socketRole in userRoles) { roles |= socketRole.Id switch { - var role when role == _options.HelperRoleId => ActivityRoles.Helper, - var role when role == _options.DpsRoleId => ActivityRoles.Dps, - var role when role == _options.TankRoleId => ActivityRoles.Tank, - var role when role == _options.SupportRoleId => ActivityRoles.Support, - _ => ActivityRoles.None + var role when role == _options.HelperRoleId => PlayerRoles.Helper, + var role when role == _options.DpsRoleId => PlayerRoles.Dps, + var role when role == _options.TankRoleId => PlayerRoles.Tank, + var role when role == _options.SupportRoleId => PlayerRoles.Support, + _ => PlayerRoles.None }; } @@ -63,6 +63,7 @@ public class ActivityHelper ActivityType.Event4Players => 4, ActivityType.Pve8Players or + ActivityType.Pvp8Players or ActivityType.Event8Players => 8, ActivityType.Pvp3Players => 3, diff --git a/Cocotte/Modules/Activities/ActivityModule.cs b/Cocotte/Modules/Activities/ActivityModule.cs index bc3fd6e..0fe013a 100644 --- a/Cocotte/Modules/Activities/ActivityModule.cs +++ b/Cocotte/Modules/Activities/ActivityModule.cs @@ -7,6 +7,7 @@ using Discord; using Discord.Interactions; using Discord.WebSocket; using Microsoft.Extensions.Options; +using Alias = Discord.Commands.AliasAttribute; namespace Cocotte.Modules.Activities; @@ -44,50 +45,163 @@ public partial class ActivityModule : InteractionModuleBase *Création de l'activité en cours...*"); var response = await GetOriginalResponseAsync(); - activity.ActivityId = response.Id; + + var activityType = ActivityHelper.ActivityNameToType(activityName); + maxPlayers ??= ActivityHelper.ActivityTypeToMaxPlayers(activityType); + Activity activity; + + if (stage is not null) + { + activity = new StagedActivity + { + ActivityId = response.Id, + CreatorDiscordId = Context.User.Id, + CreatorDiscordName = ((SocketGuildUser) Context.User).DisplayName, + Description = description, + Type = activityType, + Name = activityName, + AreRolesEnabled = areRolesEnabled, + MaxPlayers = (uint) maxPlayers, + Stage = (uint) stage + }; + } + else if (interstellarColor is not null) + { + activity = new InterstellarActivity + { + ActivityId = response.Id, + CreatorDiscordId = Context.User.Id, + CreatorDiscordName = ((SocketGuildUser) Context.User).DisplayName, + Description = description, + Type = activityType, + Name = activityName, + AreRolesEnabled = false, + MaxPlayers = (uint) maxPlayers, + Color = (InterstellarColor) interstellarColor + }; + } + else + { + activity = new Activity + { + ActivityId = response.Id, + CreatorDiscordId = Context.User.Id, + CreatorDiscordName = ((SocketGuildUser) Context.User).DisplayName, + Description = description, + Type = activityType, + Name = activityName, + AreRolesEnabled = true, + MaxPlayers = (uint) maxPlayers + }; + } // Add activity to db await _activitiesRepository.AddActivity(activity); // Add creator to activity - var rolePlayer = new ActivityRolePlayer + var rolePlayer = areRolesEnabled ? new ActivityRolePlayer { Activity = activity, DiscordId = user.Id, Name = user.DisplayName, Roles = _activityHelper.GetPlayerRoles(user.Roles) + } : new ActivityPlayer + { + Activity = activity, + DiscordId = user.Id, + Name = user.DisplayName }; activity.ActivityPlayers.Add(rolePlayer); @@ -144,7 +258,7 @@ public partial class ActivityModule : InteractionModuleBase ActivityPlayers { get; init; } = new(); diff --git a/Cocotte/Modules/Activities/Models/ActivityRolePlayer.cs b/Cocotte/Modules/Activities/Models/ActivityRolePlayer.cs index 2557a0e..ec2af61 100644 --- a/Cocotte/Modules/Activities/Models/ActivityRolePlayer.cs +++ b/Cocotte/Modules/Activities/Models/ActivityRolePlayer.cs @@ -2,5 +2,5 @@ public class ActivityRolePlayer : ActivityPlayer { - public required ActivityRoles Roles { get; init; } + public required PlayerRoles Roles { get; init; } } \ No newline at end of file diff --git a/Cocotte/Modules/Activities/Models/InterstellarActivity.cs b/Cocotte/Modules/Activities/Models/InterstellarActivity.cs new file mode 100644 index 0000000..cff03eb --- /dev/null +++ b/Cocotte/Modules/Activities/Models/InterstellarActivity.cs @@ -0,0 +1,11 @@ +namespace Cocotte.Modules.Activities.Models; + +public class InterstellarActivity : Activity +{ + public required InterstellarColor Color { get; init; } + + public override string ToString() + { + return $"{base.ToString()}, {nameof(InterstellarColor)}: {Color}"; + } +} \ No newline at end of file diff --git a/Cocotte/Modules/Activities/Models/InterstellarColor.cs b/Cocotte/Modules/Activities/Models/InterstellarColor.cs new file mode 100644 index 0000000..3a5bc52 --- /dev/null +++ b/Cocotte/Modules/Activities/Models/InterstellarColor.cs @@ -0,0 +1,15 @@ +using Discord.Interactions; + +namespace Cocotte.Modules.Activities.Models; + +public enum InterstellarColor +{ + [ChoiceDisplay("Verte")] + Green, + [ChoiceDisplay("Rouge")] + Red, + [ChoiceDisplay("Bleue")] + Blue, + [ChoiceDisplay("Noire")] + Black +} \ No newline at end of file diff --git a/Cocotte/Modules/Activities/ActivityRoles.cs b/Cocotte/Modules/Activities/PlayerRoles.cs similarity index 82% rename from Cocotte/Modules/Activities/ActivityRoles.cs rename to Cocotte/Modules/Activities/PlayerRoles.cs index 8157420..a20b0ee 100644 --- a/Cocotte/Modules/Activities/ActivityRoles.cs +++ b/Cocotte/Modules/Activities/PlayerRoles.cs @@ -1,7 +1,7 @@ namespace Cocotte.Modules.Activities; [Flags] -public enum ActivityRoles : byte +public enum PlayerRoles : byte { None = 0b0000, Helper = 0b0001, diff --git a/Cocotte/Program.cs b/Cocotte/Program.cs index 6867f06..fdc6613 100644 --- a/Cocotte/Program.cs +++ b/Cocotte/Program.cs @@ -71,7 +71,7 @@ await using(var scope = host.Services.CreateAsyncScope()) if (hostEnvironment.IsDevelopment()) { var dbContext = scope.ServiceProvider.GetRequiredService(); - // await dbContext.Database.EnsureDeletedAsync(); + await dbContext.Database.EnsureDeletedAsync(); await dbContext.Database.EnsureCreatedAsync(); } }