[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.FrontierClash => "Conflit Frontalier",
ActivityName.VoidRift => "Failles du Néant",
ActivityName.OriginsOfWar => "Origines de la Guerre",
ActivityName.OriginsOfWar => "Origine de la Guerre",
ActivityName.JointOperation => "Opération Conjointe",
ActivityName.InterstellarExploration => "Exploration Interstellaire",
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
var playersField = new EmbedFieldBuilder()
.WithName("Joueurs inscrits")
.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()
.WithColor(Colors.CocotteBlue)
.WithTitle($"{activityEmote} {FormatActivityName(activity.Name)} ({players.Count()}/{activity.MaxPlayers})")
.WithTitle(title)
.WithDescription($"{activity.Description}")
.WithImageUrl(bannerUrl)
.WithFields(playersField);
}
private static string GetActivityEmote(ActivityName activityName) => activityName switch
private static string GetActivityCode(ActivityName activityName) => activityName switch
{
ActivityName.Abyss => ":fox:",
ActivityName.Raids => ":crossed_swords:",
ActivityName.Fishing => ":fishing_pole_and_fish:",
_ => ":white_circle:"
ActivityName.Abyss => "VA",
ActivityName.OriginsOfWar => "OOW",
ActivityName.Raids => "RD",
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

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.Options;
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")]
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 maxPlayers = ActivityHelper.ActivityTypeToMaxPlayers(activityType);
@@ -98,7 +99,7 @@ public partial class ActivityModule : InteractionModuleBase<SocketInteractionCon
{
m.Content = "";
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) =>
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
.Entry(activity)

View File

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