public static async Task <FeatureRequest <Response.Booru, Error.Booru> > SearchBooru(bool isChanSafe, string[] tags, BooruSharp.Booru.Booru booru, Random r) { if (isChanSafe && !booru.IsSafe()) { return(new FeatureRequest <Response.Booru, Error.Booru>(null, Error.Booru.ChanNotNSFW)); } BooruSharp.Search.Post.SearchResult res; try { res = await booru.GetRandomImage(tags); } catch (BooruSharp.Search.InvalidTags) { List <string> newTags = new List <string>(); foreach (string s in tags) { string tag = s; if ((await booru.GetNbImage(s)) == 0) { var related = await new BooruSharp.Booru.Konachan().GetTags(s); tag = null; foreach (var rTag in related) { if ((await booru.GetNbImage(rTag.name)) > 0) { tag = rTag.name; break; } } if (tag == null) { return(new FeatureRequest <Response.Booru, Error.Booru>(null, Error.Booru.NotFound)); } } newTags.Add(tag); } try { res = await booru.GetRandomImage(newTags.ToArray()); } catch (BooruSharp.Search.InvalidTags) { return(new FeatureRequest <Response.Booru, Error.Booru>(null, Error.Booru.NotFound)); } } Error.Booru error = Error.Booru.None; string url = res.fileUrl.AbsoluteUri; Color color = GetColorFromRating(res.rating); string 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 }, error)); }
public static async Task <FeatureRequest <Response.BooruTags, Error.BooruTags> > SearchTags(string[] idArgs) { if (idArgs.Length == 0) { return(new FeatureRequest <Response.BooruTags, Error.BooruTags>(null, Error.BooruTags.Help)); } string id = idArgs[0]; if (!tagInfos.ContainsKey(id)) { return(new FeatureRequest <Response.BooruTags, Error.BooruTags>(null, Error.BooruTags.NotFound)); } var elem = tagInfos[id]; BooruSharp.Booru.Booru b = (BooruSharp.Booru.Booru)Activator.CreateInstance(elem.Item1, (BooruSharp.Booru.BooruAuth)null); List <string> artists = new List <string>(); List <string> sources = new List <string>(); List <string> characs = new List <string>(); int i = 0; foreach (string s in elem.Item2.tags) { i++; try { switch ((await b.GetTag(s)).type) { case BooruSharp.Search.Tag.TagType.Artist: if (artists.Count == 10) { artists.Add("..."); } else if (artists.Count < 10) { artists.Add(s); } break; case BooruSharp.Search.Tag.TagType.Character: if (characs.Count == 10) { characs.Add("..."); } else if (characs.Count < 10) { characs.Add(s); } break; case BooruSharp.Search.Tag.TagType.Copyright: if (sources.Count == 10) { sources.Add("..."); } else if (sources.Count < 10) { sources.Add(s); } break; } } catch (BooruSharp.Search.InvalidTags) { } } uint pgcd = PGCD((uint)elem.Item2.height, (uint)elem.Item2.width); return(new FeatureRequest <Response.BooruTags, Error.BooruTags>(new Response.BooruTags() { artistTags = artists.ToArray(), characTags = characs.ToArray(), sourceTags = sources.ToArray(), imageUrl = elem.Item2.previewUrl, rating = GetColorFromRating(elem.Item2.rating), booruName = elem.Item1.ToString().Split('.').Last(), height = elem.Item2.height, width = elem.Item2.width, aspectRatio = new Tuple <long, long>(elem.Item2.width / pgcd, elem.Item2.height / pgcd) }, Error.BooruTags.None)); }