using Microsoft.Extensions.Logging; using Remora.Discord.Commands.Extensions; using Remora.Results; namespace Octobot.Extensions; public static class LoggerExtensions { /// /// Checks if the has failed due to an error that has resulted from neither invalid user /// input nor the execution environment and logs the error using the provided . /// /// /// This has special behavior for - its exception will be passed to the /// /// /// The logger to use. /// The Result whose error check. /// The message to use if this result has failed. public static void LogResult(this ILogger logger, IResult result, string? message = "") { if (result.IsSuccess || result.Error.IsUserOrEnvironmentError()) { return; } if (result.Error is ExceptionError exe) { if (exe.Exception is TaskCanceledException) { return; } logger.LogError(exe.Exception, "{ErrorMessage}", message); return; } logger.LogWarning("{UserMessage}{NewLine}{ResultErrorMessage}", message, Environment.NewLine, result.Error.Message); } }