private async Task FuncAntiSpamResult(AntiSpamResult result)
        {
            var userId = result.UserId;

            if (result.IsAnyBanned)
            {
                Log.Debug("Kicking User Id '{UserId}' because FBan", userId);
                await Bot.KickChatMemberAsync(Chat.Id, userId);
            }
        }
    /// <summary>
    /// Checks the spam.
    /// </summary>
    /// <param name="chatId"></param>
    /// <param name="userId">The user id.</param>
    /// <param name="funcAntiSpamResult"></param>
    /// <returns>A Task.</returns>
    public async Task <AntiSpamResult> CheckSpam(
        long chatId,
        long userId,
        Func <AntiSpamResult, Task> funcAntiSpamResult = null
        )
    {
        var spamResult = new AntiSpamResult
        {
            UserId = userId
        };

        var isIgnored = _chatService.CheckUserIdIgnored(userId);

        if (isIgnored)
        {
            return(spamResult);
        }

        _chatSetting = await _settingsService.GetSettingsByGroup(chatId);

        var getChatMemberTask  = _chatService.GetChatMemberAsync(chatId, userId);
        var checkSpamWatchTask = CheckSpamWatch(userId);
        var checkCasBanTask    = CheckCasBan(userId);
        var checkEs2BanTask    = CheckEs2Ban(userId);

        await Task.WhenAll(
            checkSpamWatchTask,
            checkCasBanTask,
            checkEs2BanTask,
            getChatMemberTask
            );

        var chatMember = getChatMemberTask.Result;
        var swBan      = checkSpamWatchTask.Result;
        var casBan     = checkCasBanTask.Result;
        var es2Ban     = checkEs2BanTask.Result;
        var anyBan     = swBan || casBan || es2Ban;

        if (!anyBan)
        {
            Log.Information("UserId {UserId} is passed on all Fed Ban", userId);
            return(spamResult);
        }

        var banMessage = _localizationService.GetLoc(
            langCode: _chatSetting.LanguageCode,
            enumPath: GlobalBan.BanMessage,
            placeHolders: new List <(string placeholder, string value)>()
        {
            ("UserId", userId.ToString()),
            ("FullName", chatMember.User.GetNameLink())
        }
            );

        var htmlMessage = HtmlMessage.Empty
                          .TextBr(banMessage);

        if (es2Ban)
        {
            htmlMessage.Url("https://t.me/WinTenDev", "- ES2 Global Ban").Br();
        }
        if (casBan)
        {
            htmlMessage.Url($"https://cas.chat/query?u={userId}", "- CAS Fed").Br();
        }
        if (swBan)
        {
            htmlMessage.Url("https://t.me/SpamWatchSupport", "- SpamWatch Fed");
        }

        spamResult = new AntiSpamResult()
        {
            MessageResult = htmlMessage.ToString(),
            IsAnyBanned   = anyBan,
            IsEs2Banned   = es2Ban,
            IsCasBanned   = casBan,
            IsSpamWatched = swBan
        };

        if (funcAntiSpamResult != null)
        {
            await funcAntiSpamResult(spamResult);
        }

        Log.Debug("AntiSpam Result {@Result}", spamResult);

        return(spamResult);
    }
    public static async Task <AntiSpamResult> AntiSpamCheckAsync(this TelegramService telegramService)
    {
        var fromId = telegramService.FromId;
        var chatId = telegramService.ChatId;

        var defaultResult = new AntiSpamResult
        {
            UserId        = fromId,
            MessageResult = string.Empty,
            IsAnyBanned   = false,
            IsEs2Banned   = false,
            IsCasBanned   = false,
            IsSpamWatched = false
        };

        if (telegramService.IsPrivateChat ||
            telegramService.MessageOrEdited == null ||
            telegramService.CheckFromAnonymous() ||
            telegramService.CheckSenderChannel())
        {
            return(defaultResult);
        }

        if (await telegramService.CheckFromAdminOrAnonymous())
        {
            return(defaultResult);
        }

        var message = telegramService.MessageOrEdited;

        var antiSpamResult = await telegramService.AntiSpamService.CheckSpam(chatId, fromId);

        if (antiSpamResult == null)
        {
            return(null);
        }

        var messageBan = antiSpamResult.MessageResult;

        if (!antiSpamResult.IsAnyBanned)
        {
            return(antiSpamResult);
        }

        await Task.WhenAll(
            telegramService.KickMemberAsync(
                userId: fromId,
                unban: false,
                untilDate: DateTime.Now.AddMinutes(1)
                ),
            telegramService.SendTextMessageAsync(
                sendText: messageBan,
                replyToMsgId: 0,
                disableWebPreview: true,
                scheduleDeleteAt: DateTime.UtcNow.AddDays(1),
                preventDuplicateSend: true,
                messageFlag: MessageFlag.GBan
                ),
            telegramService.EventLogService.SendEventLogAsync(
                text: messageBan,
                chatId: chatId,
                message: message,
                messageFlag: MessageFlag.GBan,
                forwardMessageId: message.MessageId,
                deleteForwardedMessage: true
                )
            );

        await telegramService.DeleteMessageManyAsync();

        return(antiSpamResult);
    }