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); } }
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)); }