Пример #1
0
        public async Task CheckIsSafe(Type t, string explicitTag = "pussy")
        {
            ABooru b = await General.CreateBooru(t);

            bool isSafe        = b.IsSafe();
            bool foundExplicit = false;

            for (int i = 0; i < 10; i++)
            {
                var image = await b.GetRandomPostAsync(explicitTag);

                if (isSafe && image.fileUrl != null)
                {
                    Assert.NotEqual(Search.Post.Rating.Explicit, image.rating);
                }
                if (image.rating == Search.Post.Rating.Explicit)
                {
                    foundExplicit = true;
                }
            }
            if (!isSafe)
            {
                Assert.True(foundExplicit);
            }
        }
Пример #2
0
        public static async Task <FeatureRequest <Response.Booru, Error.Booru> > SearchBooru(bool isChanSafe, string[] tags, ABooru booru, Random r, int remainingTries = 5)
        {
            if (isChanSafe && !booru.IsSafe())
            {
                return(new FeatureRequest <Response.Booru, Error.Booru>(null, Error.Booru.ChanNotNSFW));
            }
            BooruSharp.Search.Post.SearchResult res;
            List <string> newTags = null;

            try
            {
                res = await booru.GetRandomImageAsync(tags);
            }
            catch (BooruSharp.Search.InvalidTags)
            {
                newTags = new List <string>();
                foreach (string s in tags)
                {
                    string tag     = s;
                    var    related = await new Konachan().GetTagsAsync(s);
                    if (related.Length == 0)
                    {
                        return(new FeatureRequest <Response.Booru, Error.Booru>(null, Error.Booru.NotFound));
                    }
                    newTags.Add(tag = related.OrderBy(x => GetStringDistance(x.name, s)).First().name);
                }
                try
                {
                    res = await booru.GetRandomImageAsync(newTags.ToArray());
                }
                catch (BooruSharp.Search.InvalidTags)
                {
                    return(new FeatureRequest <Response.Booru, Error.Booru>(null, Error.Booru.NotFound));
                }
            }
            Error.Booru error = Error.Booru.None;
            if (res.fileUrl == null)
            {
                if (remainingTries == 0)
                {
                    return(new FeatureRequest <Response.Booru, Error.Booru>(null, Error.Booru.NotFound));
                }
                else
                {
                    return(await SearchBooru(isChanSafe, tags, booru, r, remainingTries - 1));
                }
            }
            string url    = res.fileUrl.AbsoluteUri;
            Color  color  = GetColorFromRating(res.rating);
            string saveId = null;

            if (!(booru is E621) && !(booru is E926))
            {
                saveId = (tagInfos.Count + 1) + Utilities.GenerateRandomCode(4, r);
                tagInfos.Add(saveId, new Tuple <Type, BooruSharp.Search.Post.SearchResult>(booru.GetType(), res));
            }
            return(new FeatureRequest <Response.Booru, Error.Booru>(new Response.Booru()
            {
                url = url,
                colorRating = color,
                saveId = saveId,
                tags = res.tags,
                newTags = newTags?.ToArray()
            }, error));
        }