Пример #1
0
    /// <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);
    }