Add reaction filter

Closes #715
This commit is contained in:
Oleksii Holub 2022-02-19 00:18:35 +02:00
parent 8ecc2940b0
commit b7dca87fb9
2 changed files with 25 additions and 0 deletions

View file

@ -44,6 +44,12 @@ internal static class FilterGrammar
.Select(v => (MessageFilter) new MentionsMessageFilter(v))
.Named("mentions:<value>");
private static readonly TextParser<MessageFilter> ReactionFilter = Span
.EqualToIgnoreCase("reaction:")
.IgnoreThen(String)
.Select(v => (MessageFilter) new ReactionMessageFilter(v))
.Named("reaction:<value>");
private static readonly TextParser<MessageFilter> HasFilter = Span
.EqualToIgnoreCase("has:")
.IgnoreThen(Parse.OneOf(
@ -72,6 +78,7 @@ internal static class FilterGrammar
GroupedFilter,
FromFilter,
MentionsFilter,
ReactionFilter,
HasFilter,
ContainsFilter
);

View file

@ -0,0 +1,18 @@
using System;
using System.Linq;
using DiscordChatExporter.Core.Discord.Data;
namespace DiscordChatExporter.Core.Exporting.Filtering;
internal class ReactionMessageFilter : MessageFilter
{
private readonly string _value;
public ReactionMessageFilter(string value) => _value = value;
public override bool IsMatch(Message message) => message.Reactions.Any(r =>
string.Equals(_value, r.Emoji.Id?.ToString(), StringComparison.OrdinalIgnoreCase) ||
string.Equals(_value, r.Emoji.Name, StringComparison.OrdinalIgnoreCase) ||
string.Equals(_value, r.Emoji.Code, StringComparison.OrdinalIgnoreCase)
);
}