[Activit] Add banner and stage to embed

This commit is contained in:
2023-03-22 10:12:04 +01:00
parent 21996a2e03
commit 3f2dc16fad
4 changed files with 33 additions and 16 deletions

View File

@@ -24,7 +24,7 @@ public class ActivityFormatter
ActivityName.Raids => "Raids", ActivityName.Raids => "Raids",
ActivityName.FrontierClash => "Conflit Frontalier", ActivityName.FrontierClash => "Conflit Frontalier",
ActivityName.VoidRift => "Failles du Néant", ActivityName.VoidRift => "Failles du Néant",
ActivityName.OriginsOfWar => "Origines de la Guerre", ActivityName.OriginsOfWar => "Origine de la Guerre",
ActivityName.JointOperation => "Opération Conjointe", ActivityName.JointOperation => "Opération Conjointe",
ActivityName.InterstellarExploration => "Exploration Interstellaire", ActivityName.InterstellarExploration => "Exploration Interstellaire",
ActivityName.BreakFromDestiny => "Échapper au Destin (3v3)", ActivityName.BreakFromDestiny => "Échapper au Destin (3v3)",
@@ -36,29 +36,45 @@ public class ActivityFormatter
}; };
} }
public EmbedBuilder ActivityEmbed(Activity activity, IEnumerable<ActivityPlayer> players) public EmbedBuilder ActivityEmbed(Activity activity, IReadOnlyCollection<ActivityPlayer> players)
{ {
// Get activity emote
var activityEmote = GetActivityEmote(activity.Name);
// Players field // Players field
var playersField = new EmbedFieldBuilder() var playersField = new EmbedFieldBuilder()
.WithName("Joueurs inscrits") .WithName("Joueurs inscrits")
.WithValue($"{(!players.Any() ? "*Aucun joueur inscrit*" : string.Join("\n", players.Select(FormatActivityPlayer)))}"); .WithValue($"{(!players.Any() ? "*Aucun joueur inscrit*" : string.Join("\n", players.Select(FormatActivityPlayer)))}");
var title = activity switch
{
StagedActivity stagedActivity =>
$"{FormatActivityName(activity.Name)} ({players.Count}/{activity.MaxPlayers}) - Étage {stagedActivity.Stage}",
_ => $"{FormatActivityName(activity.Name)} ({players.Count}/{activity.MaxPlayers})"
};
string bannerUrl = $"https://sage.cdn.ilysix.fr/assets/Cocotte/banner/{GetActivityCode(activity.Name)}.webp";
return new EmbedBuilder() return new EmbedBuilder()
.WithColor(Colors.CocotteBlue) .WithColor(Colors.CocotteBlue)
.WithTitle($"{activityEmote} {FormatActivityName(activity.Name)} ({players.Count()}/{activity.MaxPlayers})") .WithTitle(title)
.WithDescription($"{activity.Description}") .WithDescription($"{activity.Description}")
.WithImageUrl(bannerUrl)
.WithFields(playersField); .WithFields(playersField);
} }
private static string GetActivityEmote(ActivityName activityName) => activityName switch private static string GetActivityCode(ActivityName activityName) => activityName switch
{ {
ActivityName.Abyss => ":fox:", ActivityName.Abyss => "VA",
ActivityName.Raids => ":crossed_swords:", ActivityName.OriginsOfWar => "OOW",
ActivityName.Fishing => ":fishing_pole_and_fish:", ActivityName.Raids => "RD",
_ => ":white_circle:" ActivityName.FrontierClash => "FC",
ActivityName.VoidRift => "VR",
ActivityName.JointOperation => "JO",
ActivityName.InterstellarExploration => "IE",
ActivityName.BreakFromDestiny => "BR",
ActivityName.CriticalAbyss => "CA",
ActivityName.Fishing => "FI",
ActivityName.Event => "EV",
ActivityName.MirroriaRace => "MR",
_ => "NA"
}; };
public string FormatActivityPlayer(ActivityPlayer player) => player switch public string FormatActivityPlayer(ActivityPlayer player) => player switch

View File

@@ -1,4 +1,5 @@
using System.Diagnostics.CodeAnalysis; using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis;
using Cocotte.Modules.Activities.Models; using Cocotte.Modules.Activities.Models;
using Cocotte.Options; using Cocotte.Options;
using Cocotte.Utils; using Cocotte.Utils;
@@ -46,7 +47,7 @@ public partial class ActivityModule : InteractionModuleBase<SocketInteractionCon
[SlashCommand("abime", "Créer un groupe pour l'Abîme du Néant")] [SlashCommand("abime", "Créer un groupe pour l'Abîme du Néant")]
public async Task ActivityAbyss([Summary("étage", "A quel étage êtes vous")] uint stage, [Summary("description", "Message accompagnant la demande de groupe")] string description = "") public async Task ActivityAbyss([Summary("étage", "A quel étage êtes vous")] uint stage, [Summary("description", "Message accompagnant la demande de groupe")] string description = "")
{ {
const ActivityName activityName = ActivityName.Abyss; const ActivityName activityName = ActivityName.OriginsOfWar;
var activityType = ActivityHelper.ActivityNameToType(activityName); var activityType = ActivityHelper.ActivityNameToType(activityName);
var maxPlayers = ActivityHelper.ActivityTypeToMaxPlayers(activityType); var maxPlayers = ActivityHelper.ActivityTypeToMaxPlayers(activityType);
@@ -98,7 +99,7 @@ public partial class ActivityModule : InteractionModuleBase<SocketInteractionCon
{ {
m.Content = ""; m.Content = "";
m.Components = components.Build(); m.Components = components.Build();
m.Embed = _activityFormatter.ActivityEmbed(activity, Enumerable.Repeat(rolePlayer, 1)).Build(); m.Embed = _activityFormatter.ActivityEmbed(activity, Enumerable.Repeat(rolePlayer, 1).ToImmutableList()).Build();
}); });
} }

View File

@@ -35,7 +35,7 @@ public class ActivitiesRepository
public async Task<int> ActivityPlayerCount(Activity activity) => public async Task<int> ActivityPlayerCount(Activity activity) =>
await _cocotteDbContext.ActivityPlayers.Where(player => player.ActivityId == activity.ActivityId).CountAsync(); await _cocotteDbContext.ActivityPlayers.Where(player => player.ActivityId == activity.ActivityId).CountAsync();
public async Task<IEnumerable<ActivityPlayer>> LoadActivityPlayers(Activity activity) public async Task<IReadOnlyCollection<ActivityPlayer>> LoadActivityPlayers(Activity activity)
{ {
await _cocotteDbContext await _cocotteDbContext
.Entry(activity) .Entry(activity)

View File

@@ -324,7 +324,7 @@ public class FoodModal : IModal
[RequiredInput(false)] [RequiredInput(false)]
[InputLabel("Why??")] [InputLabel("Why??")]
[ModalTextInput("food_reason", TextInputStyle.Paragraph, "Kuz it's tasty", maxLength: 500)] [ModalTextInput("food_reason", TextInputStyle.Paragraph, "Kuz it's tasty", maxLength: 500)]
public string Reason { get; set; } public required string Reason { get; set; }
} }