< Summary

Information
Class: TeleFlow.Telegram.Internal.Handlers.TelegramFilterFacts
Assembly: TeleFlow.Framework
File(s): /_/src/TeleFlow.Framework/Internal/Handlers/TelegramFilterFacts.cs
Line coverage
98%
Covered lines: 70
Uncovered lines: 1
Coverable lines: 71
Total lines: 120
Line coverage: 98.5%
Branch coverage
97%
Covered branches: 33
Total branches: 34
Branch coverage: 97%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
GetMarkerFilters(...)100%11100%
GetTarget(...)100%2929100%
MapChatType(...)80%5587.5%
HasMarkerFilter(...)100%11100%

File(s)

/_/src/TeleFlow.Framework/Internal/Handlers/TelegramFilterFacts.cs

#LineLine coverage
 1using System.Reflection;
 2using TeleFlow.Annotations;
 3
 4namespace TeleFlow.Telegram.Internal.Handlers;
 5
 6internal enum TelegramFilterTarget
 7{
 8    Message,
 9    Callback,
 10    Chat,
 11    MessageThread,
 12    SenderUser,
 13    SenderChat
 14}
 15
 16internal enum TelegramMarkerFilterGroup
 17{
 18    MessageContent,
 19    MessageSender,
 20    SenderUser,
 21    SharedMetadata
 22}
 23
 24internal sealed record TelegramMarkerFilterSpec(
 25    Type AttributeType,
 26    TelegramFilterKind Kind,
 27    TelegramMarkerFilterGroup Group);
 28
 29internal static class TelegramFilterFacts
 30{
 131    public static IReadOnlyList<TelegramMarkerFilterSpec> MarkerFilters { get; } = new TelegramMarkerFilterSpec[]
 132    {
 133        new(typeof(HasTextAttribute), TelegramFilterKind.HasText, TelegramMarkerFilterGroup.MessageContent),
 134        new(typeof(HasPhotoAttribute), TelegramFilterKind.HasPhoto, TelegramMarkerFilterGroup.MessageContent),
 135        new(typeof(HasDocumentAttribute), TelegramFilterKind.HasDocument, TelegramMarkerFilterGroup.MessageContent),
 136        new(typeof(HasCaptionAttribute), TelegramFilterKind.HasCaption, TelegramMarkerFilterGroup.MessageContent),
 137        new(typeof(HasVideoAttribute), TelegramFilterKind.HasVideo, TelegramMarkerFilterGroup.MessageContent),
 138        new(typeof(HasAnimationAttribute), TelegramFilterKind.HasAnimation, TelegramMarkerFilterGroup.MessageContent),
 139        new(typeof(HasAudioAttribute), TelegramFilterKind.HasAudio, TelegramMarkerFilterGroup.MessageContent),
 140        new(typeof(HasVoiceAttribute), TelegramFilterKind.HasVoice, TelegramMarkerFilterGroup.MessageContent),
 141        new(typeof(HasVideoNoteAttribute), TelegramFilterKind.HasVideoNote, TelegramMarkerFilterGroup.MessageContent),
 142        new(typeof(HasStickerAttribute), TelegramFilterKind.HasSticker, TelegramMarkerFilterGroup.MessageContent),
 143        new(typeof(HasContactAttribute), TelegramFilterKind.HasContact, TelegramMarkerFilterGroup.MessageContent),
 144        new(typeof(HasLocationAttribute), TelegramFilterKind.HasLocation, TelegramMarkerFilterGroup.MessageContent),
 145        new(typeof(HasVenueAttribute), TelegramFilterKind.HasVenue, TelegramMarkerFilterGroup.MessageContent),
 146        new(typeof(HasPollAttribute), TelegramFilterKind.HasPoll, TelegramMarkerFilterGroup.MessageContent),
 147        new(typeof(HasDiceAttribute), TelegramFilterKind.HasDice, TelegramMarkerFilterGroup.MessageContent),
 148        new(typeof(FromPremiumUserAttribute), TelegramFilterKind.FromPremiumUser, TelegramMarkerFilterGroup.SenderUser),
 149        new(typeof(IsReplyAttribute), TelegramFilterKind.IsReply, TelegramMarkerFilterGroup.MessageSender),
 150        new(typeof(ReplyToBotAttribute), TelegramFilterKind.ReplyToBot, TelegramMarkerFilterGroup.MessageSender),
 151        new(typeof(HasMessageThreadAttribute), TelegramFilterKind.HasMessageThread, TelegramMarkerFilterGroup.SharedMeta
 152        new(typeof(HasCallbackDataAttribute), TelegramFilterKind.HasCallbackData, TelegramMarkerFilterGroup.SharedMetada
 153    };
 54
 55    public static IEnumerable<TelegramMarkerFilterSpec> GetMarkerFilters(TelegramMarkerFilterGroup group)
 56    {
 5989257        return MarkerFilters.Where(spec => spec.Group == group);
 58    }
 59
 60    public static TelegramFilterTarget GetTarget(TelegramFilterKind kind)
 61    {
 59462        return kind switch
 59463        {
 59464            TelegramFilterKind.ChatType or
 59465                TelegramFilterKind.ChatId or
 13766                TelegramFilterKind.ChatUsername => TelegramFilterTarget.Chat,
 59467
 59468            TelegramFilterKind.MessageThreadId or
 5469                TelegramFilterKind.HasMessageThread => TelegramFilterTarget.MessageThread,
 59470
 59471            TelegramFilterKind.HasCallbackData or
 20972                TelegramFilterKind.CallbackDataPrefix => TelegramFilterTarget.Callback,
 59473
 59474            TelegramFilterKind.FromUser or
 59475                TelegramFilterKind.FromBot or
 9076                TelegramFilterKind.FromPremiumUser => TelegramFilterTarget.SenderUser,
 59477
 3078            TelegramFilterKind.SenderChatType => TelegramFilterTarget.SenderChat,
 59479
 59480            TelegramFilterKind.HasText or
 59481                TelegramFilterKind.HasPhoto or
 59482                TelegramFilterKind.HasDocument or
 59483                TelegramFilterKind.HasCaption or
 59484                TelegramFilterKind.HasVideo or
 59485                TelegramFilterKind.HasAnimation or
 59486                TelegramFilterKind.HasAudio or
 59487                TelegramFilterKind.HasVoice or
 59488                TelegramFilterKind.HasVideoNote or
 59489                TelegramFilterKind.HasSticker or
 59490                TelegramFilterKind.HasContact or
 59491                TelegramFilterKind.HasLocation or
 59492                TelegramFilterKind.HasVenue or
 59493                TelegramFilterKind.HasPoll or
 59494                TelegramFilterKind.HasDice or
 59495                TelegramFilterKind.IsReply or
 7396                TelegramFilterKind.ReplyToBot => TelegramFilterTarget.Message,
 59497
 198            _ => throw new InvalidOperationException($"Unsupported Telegram filter kind '{kind}'.")
 59499        };
 100    }
 101
 102    public static string MapChatType(TelegramChatType chatType)
 103    {
 12104        return chatType switch
 12105        {
 6106            TelegramChatType.Private => "private",
 0107            TelegramChatType.Group => "group",
 1108            TelegramChatType.Supergroup => "supergroup",
 2109            TelegramChatType.Channel => "channel",
 3110            _ => throw new InvalidOperationException($"Unsupported Telegram chat type '{chatType}'.")
 12111        };
 112    }
 113
 114    public static bool HasMarkerFilter(
 115        MemberInfo member,
 116        TelegramMarkerFilterSpec spec)
 117    {
 14260118        return member.GetCustomAttribute(spec.AttributeType, inherit: true) is not null;
 119    }
 120}