From dc60882577a8cb09bb67162f6759e41562e4cd07 Mon Sep 17 00:00:00 2001 From: ericmck2000 Date: Wed, 22 Aug 2018 15:14:11 -0500 Subject: [PATCH] Update TimeSpan Parser 1. If it fails to parse out the already defined formats, fall back to the default, built-in parser. From my testing, this has greatly improved the ability for this parser to work properly. --- .../Readers/TimeSpanTypeReader.cs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/Discord.Net.Commands/Readers/TimeSpanTypeReader.cs b/src/Discord.Net.Commands/Readers/TimeSpanTypeReader.cs index 31ab9d821..292427a76 100644 --- a/src/Discord.Net.Commands/Readers/TimeSpanTypeReader.cs +++ b/src/Discord.Net.Commands/Readers/TimeSpanTypeReader.cs @@ -25,11 +25,22 @@ namespace Discord.Commands "%s's'", // 1s }; + public override Task ReadAsync(ICommandContext context, string input, IServiceProvider services) { - return (TimeSpan.TryParseExact(input.ToLowerInvariant(), _formats, CultureInfo.InvariantCulture, out var timeSpan)) - ? Task.FromResult(TypeReaderResult.FromSuccess(timeSpan)) - : Task.FromResult(TypeReaderResult.FromError(CommandError.ParseFailed, "Failed to parse TimeSpan")); + //Store as variable, to prevent multiple calls to this method. + string data = input.ToLowerInvariant(); + + //First, try using the built-in TimeSpan.Parse. (Default Implementation) + if (TimeSpan.TryParseExact(data, _formats, CultureInfo.InvariantCulture, out TimeSpan timeSpan)) + return Task.FromResult(TypeReaderResult.FromSuccess(new TimeSpanext(timeSpan))); + //@XtremeOwnage - Try using the regular TimeSpan.TryPrase + else if (TimeSpan.TryParse(data, out TimeSpan Time)) + return Task.FromResult(TypeReaderResult.FromSuccess(new TimeSpanext(Time))); + else + { + return Task.FromResult(TypeReaderResult.FromError(CommandError.ParseFailed, "Failed to parse TimeSpan")); + } } } }