[Activit] Add banner and stage to embed
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user