From 5b84c8d8d0e15cba5c3ff871310e0ff9a7b798b7 Mon Sep 17 00:00:00 2001 From: Macintosh II <95250141+mctaylors@users.noreply.github.com> Date: Thu, 26 Oct 2023 17:41:47 +0300 Subject: [PATCH 1/2] Add more info output to /delremind (#173) _There are times when you want to be sure of what you've destroyed._ Therefore, in this PR I added the output of the text of the deleted reminder along with its position in the list, because you can make a mistake with deleting a reminder and forget about what you needed to be reminded about. --------- Signed-off-by: mctaylors --- locale/Messages.resx | 4 ++-- locale/Messages.ru.resx | 4 ++-- locale/Messages.tt-ru.resx | 4 ++-- src/Commands/RemindCommandGroup.cs | 11 +++++++++-- src/Messages.Designer.cs | 4 ++-- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/locale/Messages.resx b/locale/Messages.resx index 31ed7b3..0a072c3 100644 --- a/locale/Messages.resx +++ b/locale/Messages.resx @@ -477,8 +477,8 @@ Position in list: {0} - - The reminder will be sent on: {0} + + Reminder send time: {0} Reminder text: {0} diff --git a/locale/Messages.ru.resx b/locale/Messages.ru.resx index cb65749..92d4c60 100644 --- a/locale/Messages.ru.resx +++ b/locale/Messages.ru.resx @@ -477,8 +477,8 @@ Позиция в списке: {0} - - Напоминание будет отправлено: {0} + + Время отправки напоминания: {0} Текст напоминания: {0} diff --git a/locale/Messages.tt-ru.resx b/locale/Messages.tt-ru.resx index b5f6ad1..9c5d487 100644 --- a/locale/Messages.tt-ru.resx +++ b/locale/Messages.tt-ru.resx @@ -477,8 +477,8 @@ номер в списке: {0} - - я пну тебе это: {0} + + время отправки: {0} че там в напоминалке: {0} diff --git a/src/Commands/RemindCommandGroup.cs b/src/Commands/RemindCommandGroup.cs index 4a4f6a1..eb46d7c 100644 --- a/src/Commands/RemindCommandGroup.cs +++ b/src/Commands/RemindCommandGroup.cs @@ -92,7 +92,7 @@ public class RemindCommandGroup : CommandGroup builder.Append("- ").AppendLine(string.Format(Messages.ReminderPosition, Markdown.InlineCode((i + 1).ToString()))) .Append(" - ").AppendLine(string.Format(Messages.ReminderText, Markdown.InlineCode(reminder.Text))) .Append(" - ") - .AppendLine(string.Format(Messages.ReminderWillBeSentOn, Markdown.Timestamp(reminder.At))); + .AppendLine(string.Format(Messages.ReminderTime, Markdown.Timestamp(reminder.At))); } var embed = new EmbedBuilder().WithSmallTitle( @@ -155,7 +155,7 @@ public class RemindCommandGroup : CommandGroup var builder = new StringBuilder().Append("- ").AppendLine(string.Format( Messages.ReminderText, Markdown.InlineCode(text))) - .Append("- ").Append(string.Format(Messages.ReminderWillBeSentOn, Markdown.Timestamp(remindAt))); + .Append("- ").Append(string.Format(Messages.ReminderTime, Markdown.Timestamp(remindAt))); var embed = new EmbedBuilder().WithSmallTitle( string.Format(Messages.ReminderCreated, executor.GetTag()), executor) @@ -210,9 +210,16 @@ public class RemindCommandGroup : CommandGroup return await _feedback.SendContextualEmbedResultAsync(failedEmbed, ct); } + var reminder = data.Reminders[index]; + + var description = new StringBuilder() + .Append("- ").AppendLine(string.Format(Messages.ReminderText, Markdown.InlineCode(reminder.Text))) + .Append("- ").AppendLine(string.Format(Messages.ReminderTime, Markdown.Timestamp(reminder.At))); + data.Reminders.RemoveAt(index); var embed = new EmbedBuilder().WithSmallTitle(Messages.ReminderDeleted, bot) + .WithDescription(description.ToString()) .WithColour(ColorsList.Green) .Build(); diff --git a/src/Messages.Designer.cs b/src/Messages.Designer.cs index 4a771d0..898528c 100644 --- a/src/Messages.Designer.cs +++ b/src/Messages.Designer.cs @@ -786,9 +786,9 @@ namespace Octobot { } } - internal static string ReminderWillBeSentOn { + internal static string ReminderTime { get { - return ResourceManager.GetString("ReminderWillBeSentOn", resourceCulture); + return ResourceManager.GetString("ReminderTime", resourceCulture); } } From fb3aebb1e0a4b856e5f19b01e0039e3383b21c56 Mon Sep 17 00:00:00 2001 From: Octol1ttle Date: Thu, 26 Oct 2023 19:54:15 +0500 Subject: [PATCH 2/2] Notify user when a command execution error occurs (#171) With this PR, whenever command execution fails, the user will get an error message with details of the error that can be passed on to developers An unrelated minor change: errors caused by task cancellations will no longer be logged --------- Signed-off-by: Octol1ttle Signed-off-by: mctaylors --- locale/Messages.resx | 6 +++ locale/Messages.ru.resx | 6 +++ locale/Messages.tt-ru.resx | 6 +++ .../Events/ErrorLoggingPostExecutionEvent.cs | 38 +++++++++++++++++-- src/Extensions/LoggerExtensions.cs | 5 +++ src/Messages.Designer.cs | 16 ++++++++ 6 files changed, 74 insertions(+), 3 deletions(-) diff --git a/locale/Messages.resx b/locale/Messages.resx index 0a072c3..5e24811 100644 --- a/locale/Messages.resx +++ b/locale/Messages.resx @@ -570,4 +570,10 @@ Cleared {0} messages from {1} + + An error occurred during command execution, try again later. + + + Contact the developers if the problem occurs again. + diff --git a/locale/Messages.ru.resx b/locale/Messages.ru.resx index 92d4c60..1cc1f9e 100644 --- a/locale/Messages.ru.resx +++ b/locale/Messages.ru.resx @@ -570,4 +570,10 @@ Очищено {0} сообщений от {1} + + Произошла ошибка при выполнении команды, повтори попытку позже. + + + Обратись к разработчикам, если проблема возникнет снова. + diff --git a/locale/Messages.tt-ru.resx b/locale/Messages.tt-ru.resx index 9c5d487..48ad8e7 100644 --- a/locale/Messages.tt-ru.resx +++ b/locale/Messages.tt-ru.resx @@ -570,4 +570,10 @@ вырезано {0} забавных сообщений от {1} + + произошёл тотальный разнос в команде, удачи. + + + если ты это читаешь второй раз за сегодня, пиши разрабам + diff --git a/src/Commands/Events/ErrorLoggingPostExecutionEvent.cs b/src/Commands/Events/ErrorLoggingPostExecutionEvent.cs index d6a66cc..a6daaf0 100644 --- a/src/Commands/Events/ErrorLoggingPostExecutionEvent.cs +++ b/src/Commands/Events/ErrorLoggingPostExecutionEvent.cs @@ -1,8 +1,12 @@ using JetBrains.Annotations; using Microsoft.Extensions.Logging; using Octobot.Extensions; +using Remora.Discord.API.Abstractions.Rest; using Remora.Discord.Commands.Contexts; +using Remora.Discord.Commands.Feedback.Services; using Remora.Discord.Commands.Services; +using Remora.Discord.Extensions.Embeds; +using Remora.Discord.Extensions.Formatting; using Remora.Results; namespace Octobot.Commands.Events; @@ -14,10 +18,15 @@ namespace Octobot.Commands.Events; public class ErrorLoggingPostExecutionEvent : IPostExecutionEvent { private readonly ILogger _logger; + private readonly FeedbackService _feedback; + private readonly IDiscordRestUserAPI _userApi; - public ErrorLoggingPostExecutionEvent(ILogger logger) + public ErrorLoggingPostExecutionEvent(ILogger logger, FeedbackService feedback, + IDiscordRestUserAPI userApi) { _logger = logger; + _feedback = feedback; + _userApi = userApi; } /// @@ -28,11 +37,34 @@ public class ErrorLoggingPostExecutionEvent : IPostExecutionEvent /// The result whose success is checked. /// The cancellation token for this operation. Unused. /// A result which has succeeded. - public Task AfterExecutionAsync( + public async Task AfterExecutionAsync( ICommandContext context, IResult commandResult, CancellationToken ct = default) { _logger.LogResult(commandResult, $"Error in slash command execution for /{context.Command.Command.Node.Key}."); - return Task.FromResult(Result.FromSuccess()); + var result = commandResult; + while (result.Inner is not null) + { + result = result.Inner; + } + + if (result.IsSuccess) + { + return Result.FromSuccess(); + } + + var botResult = await _userApi.GetCurrentUserAsync(ct); + if (!botResult.IsDefined(out var bot)) + { + return Result.FromError(botResult); + } + + var embed = new EmbedBuilder().WithSmallTitle(Messages.CommandExecutionFailed, bot) + .WithDescription(Markdown.InlineCode(result.Error.Message)) + .WithFooter(Messages.ContactDevelopers) + .WithColour(ColorsList.Red) + .Build(); + + return await _feedback.SendContextualEmbedResultAsync(embed, ct); } } diff --git a/src/Extensions/LoggerExtensions.cs b/src/Extensions/LoggerExtensions.cs index fd4aeb7..3805cea 100644 --- a/src/Extensions/LoggerExtensions.cs +++ b/src/Extensions/LoggerExtensions.cs @@ -26,6 +26,11 @@ public static class LoggerExtensions if (result.Error is ExceptionError exe) { + if (exe.Exception is TaskCanceledException) + { + return; + } + logger.LogError(exe.Exception, "{ErrorMessage}", message); return; } diff --git a/src/Messages.Designer.cs b/src/Messages.Designer.cs index 898528c..5f38061 100644 --- a/src/Messages.Designer.cs +++ b/src/Messages.Designer.cs @@ -996,5 +996,21 @@ namespace Octobot { return ResourceManager.GetString("MessagesClearedFiltered", resourceCulture); } } + + internal static string CommandExecutionFailed + { + get + { + return ResourceManager.GetString("CommandExecutionFailed", resourceCulture); + } + } + + internal static string ContactDevelopers + { + get + { + return ResourceManager.GetString("ContactDevelopers", resourceCulture); + } + } } }