diff --git a/Cocotte/Modules/Activities/ActivityFormatter.cs b/Cocotte/Modules/Activities/ActivityFormatter.cs index 5f5c4d4..49eb642 100644 --- a/Cocotte/Modules/Activities/ActivityFormatter.cs +++ b/Cocotte/Modules/Activities/ActivityFormatter.cs @@ -96,7 +96,7 @@ public class ActivityFormatter // Add time if specified if (activity.DueDateTime is { } dueDateTime) { - descriptionBuilder.AppendLine($"**:clock2: {TimestampTag.FormatFromDateTime(dueDateTime, TimestampTagStyles.ShortTime)} ― {(activity.IsClosed ? "Fermée" : TimestampTag.FormatFromDateTime(dueDateTime, TimestampTagStyles.Relative))}**"); + descriptionBuilder.AppendLine($"**:clock2: {TimestampTag.FormatFromDateTime(dueDateTime, TimestampTagStyles.ShortTime)} ╿ {(activity.IsClosed ? "Fermée" : TimestampTag.FormatFromDateTime(dueDateTime, TimestampTagStyles.Relative))}**"); } else { @@ -112,7 +112,12 @@ public class ActivityFormatter // Add thread link descriptionBuilder.AppendLine(); - descriptionBuilder.Append($"**[Fil associé]({ChannelUtils.GetChannelLink(activity.GuildId, activity.ThreadId)})**"); + descriptionBuilder.Append( + $""" + **⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯** +                         **[Fil associé]({ChannelUtils.GetChannelLink(activity.GuildId, activity.ThreadId)})** + **⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯** + """); string bannerUrl = GetActivityBanner(activity.Name); diff --git a/Cocotte/Modules/Activities/ActivityModuleThread.cs b/Cocotte/Modules/Activities/ActivityModuleThread.cs index 06eb08e..06c6289 100644 --- a/Cocotte/Modules/Activities/ActivityModuleThread.cs +++ b/Cocotte/Modules/Activities/ActivityModuleThread.cs @@ -174,6 +174,44 @@ public partial class ActivityModule await RespondAsync(pingMessageBuilder.ToString()); } + [SlashCommand("description", "Changer la description de l'activité")] + public async Task ThreadChangeDescription() + { + // Get activity linked to this thread + var activity = _activitiesRepository.FindActivityByThreadId(Context.Channel.Id); + + if (!await CheckCommandInThread(activity, checkCreator: true) || activity is null) + { + return; + } + + // Open modal + await RespondWithModalAsync("activity description_modal"); + } + + [ModalInteraction("activity description_modal", ignoreGroupNames: true)] + public async Task ActivityDescriptionSubmit(ActivityDescriptionModal descriptionModal) + { + // Get activity linked to this thread + var activity = _activitiesRepository.FindActivityByThreadId(Context.Channel.Id); + + if (!await CheckCommandInThread(activity, checkCreator: true) || activity is null) + { + return; + } + + // Update description + activity.Description = descriptionModal.Description; + await _activitiesRepository.SaveChanges(); + + await UpdateActivityEmbed(activity, ActivityUpdateReason.Update); + + await RespondAsync( + ephemeral: true, + embed: EmbedUtils.InfoEmbed("**La description** a bien été changée").Build() + ); + } + private async Task CheckCommandInThread(Activity? activity, bool checkCreator = false) { // Check if activity is not null (means we are in a valid thread) @@ -199,4 +237,13 @@ public partial class ActivityModule return true; } +} + +public class ActivityDescriptionModal : IModal +{ + public string Title => "Nouvelle description"; + + [InputLabel("Description")] + [ModalTextInput("activity_description", TextInputStyle.Paragraph)] + public required string Description { get; set; } } \ No newline at end of file diff --git a/Cocotte/Program.cs b/Cocotte/Program.cs index 7bdabe1..c33fd66 100644 --- a/Cocotte/Program.cs +++ b/Cocotte/Program.cs @@ -88,7 +88,7 @@ await using(var scope = host.Services.CreateAsyncScope()) var dbContext = scope.ServiceProvider.GetRequiredService(); if (hostEnvironment.IsDevelopment()) { - await dbContext.Database.EnsureDeletedAsync(); + // await dbContext.Database.EnsureDeletedAsync(); await dbContext.Database.EnsureCreatedAsync(); } else