From 92cf886eab5ffbab61db9cedc0829ea91ed578de Mon Sep 17 00:00:00 2001 From: Oleksii Holub <1935960+Tyrrrz@users.noreply.github.com> Date: Thu, 25 Aug 2022 21:20:22 +0300 Subject: [PATCH] Fix not being able to parse message filters that share common prefix with one of the named filters Related to #909 --- .../Exporting/Filtering/Parsing/FilterGrammar.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs b/DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs index f7b3a31..675cd84 100644 --- a/DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs +++ b/DiscordChatExporter.Core/Exporting/Filtering/Parsing/FilterGrammar.cs @@ -32,6 +32,7 @@ internal static class FilterGrammar private static readonly TextParser FromFilter = Span .EqualToIgnoreCase("from:") + .Try() .IgnoreThen(String) .Select(v => (MessageFilter)new FromMessageFilter(v)) .Named("from:"); @@ -39,6 +40,7 @@ internal static class FilterGrammar private static readonly TextParser MentionsFilter = Span .EqualToIgnoreCase("mentions:") + .Try() .IgnoreThen(String) .Select(v => (MessageFilter)new MentionsMessageFilter(v)) .Named("mentions:"); @@ -46,6 +48,7 @@ internal static class FilterGrammar private static readonly TextParser ReactionFilter = Span .EqualToIgnoreCase("reaction:") + .Try() .IgnoreThen(String) .Select(v => (MessageFilter)new ReactionMessageFilter(v)) .Named("reaction:"); @@ -53,6 +56,7 @@ internal static class FilterGrammar private static readonly TextParser HasFilter = Span .EqualToIgnoreCase("has:") + .Try() .IgnoreThen(Parse.OneOf( Span.EqualToIgnoreCase("link").IgnoreThen(Parse.Return(MessageContentMatchKind.Link)), Span.EqualToIgnoreCase("embed").IgnoreThen(Parse.Return(MessageContentMatchKind.Embed)), @@ -65,6 +69,8 @@ internal static class FilterGrammar .Select(k => (MessageFilter)new HasMessageFilter(k)) .Named("has:"); + // Make sure that property-based filters like 'has:link' don't prevent text like 'hello' from being parsed. + // https://github.com/Tyrrrz/DiscordChatExporter/issues/909 private static readonly TextParser PrimitiveFilter = Parse.OneOf( FromFilter,