コード例 #1
0
ファイル: Booru.cs プロジェクト: Kadantte/Sanara
        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));
        }
コード例 #2
0
ファイル: Booru.cs プロジェクト: Kadantte/Sanara
        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));
        }