From e8703289649f6f7f5c9eb8c0b4ffba5dbd3d4d53 Mon Sep 17 00:00:00 2001 From: neroduckale Date: Mon, 4 Dec 2023 00:00:23 +0500 Subject: [PATCH] Resolve all of resolved changes. Reminder.cs: Message -> MessageId RemindCommandGroup.cs: - check that the message was sent successfully first - removed unnecessary string builder construction - reminder store only original message ID. MemberUpdateService.cs: Link to original message added to the reminder itself as well when it goes off --- src/Commands/RemindCommandGroup.cs | 25 +++++++++++----------- src/Data/Reminder.cs | 2 +- src/Services/Update/MemberUpdateService.cs | 8 ++++--- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/Commands/RemindCommandGroup.cs b/src/Commands/RemindCommandGroup.cs index 99f9947..47a9755 100644 --- a/src/Commands/RemindCommandGroup.cs +++ b/src/Commands/RemindCommandGroup.cs @@ -72,10 +72,10 @@ public class RemindCommandGroup : CommandGroup var data = await _guildData.GetData(guildId, CancellationToken); Messages.Culture = GuildSettings.Language.Get(data.Settings); - return await ListRemindersAsync(data.GetOrCreateMemberData(executorId), executor, bot, CancellationToken); + return await ListRemindersAsync(data.GetOrCreateMemberData(executorId), executor, bot, guildId, CancellationToken); } - private async Task ListRemindersAsync(MemberData data, IUser executor, IUser bot, CancellationToken ct) + private async Task ListRemindersAsync(MemberData data, IUser executor, IUser bot, Snowflake guildId, CancellationToken ct) { if (data.Reminders.Count == 0) { @@ -94,7 +94,8 @@ public class RemindCommandGroup : CommandGroup .Append(" - ").AppendLine(string.Format(Messages.ReminderText, Markdown.InlineCode(reminder.Text))) .Append(" - ") .AppendLine(string.Format(Messages.ReminderTime, Markdown.Timestamp(reminder.At))) - .Append(" - ").AppendLine(reminder.Message); + .AppendLine(string.Format(Messages.DescriptionActionJumpToMessage, $"https://discord.com/channels/{guildId.Value}/{reminder.Channel}/{reminder.MessageId}") + ); } var embed = new EmbedBuilder().WithSmallTitle( @@ -138,12 +139,12 @@ public class RemindCommandGroup : CommandGroup var data = await _guildData.GetData(guildId, CancellationToken); Messages.Culture = GuildSettings.Language.Get(data.Settings); - return await AddReminderAsync(@in, text, data, channelId, executor, guildId, CancellationToken); + return await AddReminderAsync(@in, text, data, channelId, executor, CancellationToken); } private async Task AddReminderAsync( TimeSpan @in, string text, GuildData data, - Snowflake channelId, IUser executor, Snowflake guildId, CancellationToken ct = default) + Snowflake channelId, IUser executor, CancellationToken ct = default) { var remindAt = DateTimeOffset.UtcNow.Add(@in); var memberData = data.GetOrCreateMemberData(executor.ID); @@ -158,20 +159,20 @@ public class RemindCommandGroup : CommandGroup .WithColour(ColorsList.Green) .WithFooter(string.Format(Messages.ReminderPosition, memberData.Reminders.Count + 1)) .Build(); - var message = await _feedback.SendContextualEmbedAsync(embed.Entity, ct: ct); - var messageId = message.Entity.ID.Value; - var builderMessage = new StringBuilder().AppendLine( - string.Format(Messages.DescriptionActionJumpToMessage, - $"https://discord.com/channels/{guildId}/{channelId}/{messageId}")); + var messageResult = await _feedback.SendContextualEmbedAsync(embed.Entity, ct: ct); + if (!messageResult.IsDefined(out var output)) { return (Result)messageResult; } + + var messageId = output.ID.Value; + memberData.Reminders.Add( new Reminder { At = remindAt, Channel = channelId.Value, Text = text, - Message = builderMessage.ToString() + MessageId = messageId.ToString() }); - return Result.FromSuccess(); + return (Result)messageResult; } /// diff --git a/src/Data/Reminder.cs b/src/Data/Reminder.cs index 022838a..3fa4d2d 100644 --- a/src/Data/Reminder.cs +++ b/src/Data/Reminder.cs @@ -5,5 +5,5 @@ public struct Reminder public DateTimeOffset At { get; init; } public string Text { get; init; } public ulong Channel { get; init; } - public string Message { get; init; } + public string MessageId { get; init; } } diff --git a/src/Services/Update/MemberUpdateService.cs b/src/Services/Update/MemberUpdateService.cs index b4289ce..1776648 100644 --- a/src/Services/Update/MemberUpdateService.cs +++ b/src/Services/Update/MemberUpdateService.cs @@ -114,7 +114,7 @@ public sealed partial class MemberUpdateService : BackgroundService for (var i = data.Reminders.Count - 1; i >= 0; i--) { - var reminderTickResult = await TickReminderAsync(data.Reminders[i], user, data, ct); + var reminderTickResult = await TickReminderAsync(data.Reminders[i], user, data, guildId, ct); failedResults.AddIfFailed(reminderTickResult); } @@ -217,7 +217,8 @@ public sealed partial class MemberUpdateService : BackgroundService [GeneratedRegex("[^0-9A-Za-zА-Яа-яЁё]")] private static partial Regex IllegalChars(); - private async Task TickReminderAsync(Reminder reminder, IUser user, MemberData data, CancellationToken ct) + private async Task TickReminderAsync(Reminder reminder, IUser user, MemberData data, Snowflake guildId, + CancellationToken ct) { if (DateTimeOffset.UtcNow < reminder.At) { @@ -226,8 +227,9 @@ public sealed partial class MemberUpdateService : BackgroundService var embed = new EmbedBuilder().WithSmallTitle( string.Format(Messages.Reminder, user.GetTag()), user) - .WithDescription( + .WithTitle( string.Format(Messages.DescriptionReminder, Markdown.InlineCode(reminder.Text))) + .WithDescription(string.Format(Messages.DescriptionActionJumpToMessage, $"https://discord.com/channels/{guildId.Value}/{reminder.Channel}/{reminder.MessageId}")) .WithColour(ColorsList.Magenta) .Build();