Beispiel #1
0
        private async Task GetMediaAsync(IContext e, bool manga, params MediaFormat[] format)
        {
            IMedia media = null;

            if (e.GetArgumentPack().Take(out int mediaId))
            {
                media = await anilistClient.GetMediaAsync(mediaId);
            }
            else
            {
                var args = e.GetArgumentPack().Pack.TakeAll();
                if (!string.IsNullOrWhiteSpace(args))
                {
                    media = await anilistClient.GetMediaAsync(args, format);
                }
            }

            if (media != null)
            {
                string description = media.Description;
                if (description.Length > 1024)
                {
                    description = new string(description.Take(1020).ToArray()) + "...";
                }

                EmbedBuilder embed = new EmbedBuilder()
                                     .SetAuthor(media.DefaultTitle, "https://anilist.co/img/logo_al.png", media.Url)
                                     .SetDescription(media.NativeTitle);

                if (!manga)
                {
                    embed.AddInlineField("Status", media.Status ?? "Unknown")
                    .AddInlineField("Episodes", (media.Episodes ?? 0).ToString());
                }
                else
                {
                    embed.AddInlineField("Volumes", (media.Volumes ?? 0).ToString())
                    .AddInlineField("Chapters", (media.Chapters ?? 0).ToString());
                }

                await embed.AddInlineField("Rating", $"{media.Score ?? 0}/100")
                .AddInlineField("Genres", string.Join("\n", media.Genres))
                .AddInlineField("Description", description)
                .SetColor(0, 170, 255)
                .SetThumbnail(media.CoverImage)
                .SetFooter("Powered by anilist.co")
                .ToEmbed()
                .QueueAsync(e, e.GetChannel());
            }
            else
            {
                await e.ErrorEmbed("Anime not found!")
                .ToEmbed()
                .QueueAsync(e, e.GetChannel());
            }
        }
Beispiel #2
0
        public async Task GetManga()
        {
            AnilistClient client = new AnilistClient();
            var           ch     = await client.GetMediaAsync("miki", MediaFormat.MANGA);

            Assert.NotNull(ch);

            ch = await client.GetMediaAsync(104747);

            Assert.NotNull(ch);
            Assert.Equal(104747, ch.Id);
        }
Beispiel #3
0
        public async Task GetAnime()
        {
            AnilistClient client = new AnilistClient();
            var           ch     = await client.GetMediaAsync("miki", MediaFormat.TV);

            Assert.NotNull(ch);
        }
Beispiel #4
0
        public async Task MangeAsync([Remainder] string query)
        {
            AnilistClient client = new AnilistClient();
            var           ch     = await client.GetMediaAsync(query, MediaFormat.MANGA);

            await ReplyAsync(embed : AnilistHelper.BuildEmbed(ch));
        }
Beispiel #5
0
        public async Task UserAsync([Remainder] string query)
        {
            AnilistClient client = new AnilistClient();
            var           ch     = await client.GetMediaAsync(query,
                                                              MediaFormat.MANGA, MediaFormat.NOVEL, MediaFormat.ONE_SHOT);

            int    count  = 0;
            string Genres = "Genres: ";
            string Score  = ch.Score.ToString();

            while (count < ch.Genres.Count())
            {
                Genres = Genres + ch.Genres[count] + ", ";
                count++;
            }
            Genres = Genres.Remove(Genres.Length - 2);
            var embed = new EmbedBuilder()
            {
                Title       = ch.DefaultTitle,
                Url         = ch.Url,
                Description = Genres + "\n" + "\n" + ch.Episodes + " épisodes"
                              + "\n" + "\n" + ch.Description,
                ThumbnailUrl = ch.CoverImage,
                Color        = Discord.Color.Red,
                Footer       = new EmbedFooterBuilder()
                {
                    IconUrl = ch.Url,
                    Text    = "AL Score: " + Score + "/100",
                }
            }.Build();

            await ReplyAsync(Context.User.Mention);
            await ReplyAsync(embed : embed);
        }
Beispiel #6
0
        protected override async Task <TItem> GetItemAsync(AnilistClient client, IMediaSearchResult item)
        {
            var mediaItem = await client.GetMediaAsync(item.Id);

            if (mediaItem == null)
            {
                return(null);
            }

            return(WrapItem(mediaItem));
        }
        protected override async Task <TItem?> GetItemAsync(AnilistClient client, IMediaSearchResult item)
        {
            var mediaItem = await client.GetMediaAsync(item.Id);

            if (mediaItem == null)
            {
                return(null);
            }

            var sb = new StringBuilder(mediaItem.Description);

            sb.Replace("<b>", "**");
            sb.Replace("</b>", "**");
            sb.Replace("<i>", "_");
            sb.Replace("</i>", "_");
            sb.Replace("\n\n", "\n");

            return(WrapItem(new MediaDescriptionReplacement(mediaItem, sb.ToString())));
        }
Beispiel #8
0
        public async Task UserAsyncm([Remainder] string query)
        {
            AnilistClient client = new AnilistClient();
            var           ch     = await client.GetMediaAsync(query, MediaFormat.TV, MediaFormat.OVA,
                                                              MediaFormat.MOVIE, MediaFormat.MUSIC, MediaFormat.ONA, MediaFormat.SPECIAL, MediaFormat.TV_SHORT);

            int    count  = 0;
            string Genres = "Genres: ";
            string Score  = ch.Score.ToString();

            while (count < ch.Genres.Count())
            {
                Genres = Genres + ch.Genres[count] + ", ";
                count++;
            }
            Genres = Genres.Remove(Genres.Length - 2);
            string Longueur = String.Empty;

            if (ch.Status.StartsWith("FINISHED"))
            {
                Longueur = ch.Chapters + " chapitres, " + ch.Volumes +
                           " volumes" + "\n" + "\n";
            }
            var embed = new EmbedBuilder()
            {
                Title        = ch.DefaultTitle,
                Url          = ch.Url,
                Description  = Genres + "\n" + "\n" + Longueur + ch.Description,
                ThumbnailUrl = ch.CoverImage,
                Color        = Discord.Color.Red,
                Footer       = new EmbedFooterBuilder()
                {
                    IconUrl = ch.Url,
                    Text    = "AL Score: " + Score + "/100",
                }
            }.Build();

            await ReplyAsync(Context.User.Mention, embed : embed);
        }
Beispiel #9
0
        private async Task GetMediaAsync(EventContext e, bool manga, params MediaFormat[] format)
        {
            IMedia media = null;

            ArgObject arg = e.Arguments.Join();

            int?mediaId = arg.AsInt();

            if (mediaId != null)
            {
                media = await anilistClient.GetMediaAsync(mediaId.Value);
            }
            else
            {
                string filter = "search: $p0, format_not_in: $p1";
                List <GraphQLParameter> parameters = new List <GraphQLParameter>
                {
                    new GraphQLParameter(arg.Argument),
                    new GraphQLParameter(format, "[MediaFormat]")
                };

                if (!e.Channel.IsNsfw)
                {
                    filter += ", isAdult: $p2";
                    parameters.Add(new GraphQLParameter(false, "Boolean"));
                }

                media = await anilistClient.GetMediaAsync(filter, parameters.ToArray());
            }

            if (media != null)
            {
                string description = media.Description;
                if (description.Length > 1024)
                {
                    description = new string(description.Take(1020).ToArray());
                    description = new string(description.Take(description.LastIndexOf(' ')).ToArray()) + "...";
                }

                EmbedBuilder embed = Utils.Embed.SetAuthor(media.DefaultTitle, "https://anilist.co/img/logo_al.png", media.Url)
                                     .SetDescription(media.NativeTitle);

                if (!manga)
                {
                    embed.AddInlineField("Status", media.Status ?? "Unknown")
                    .AddInlineField("Episodes", media.Episodes ?? 0);
                }
                else
                {
                    embed.AddInlineField("Volumes", media.Volumes ?? 0)
                    .AddInlineField("Chapters", media.Chapters ?? 0);
                }

                embed.AddInlineField("Rating", $"{media.Score ?? 0}/100")
                .AddInlineField("Genres", string.Join("\n", media.Genres) ?? "None")
                .AddInlineField("Description", description ?? "None")
                .SetColor(0, 170, 255)
                .SetThumbnail(media.CoverImage)
                .SetFooter("Powered by anilist.co", "")
                .ToEmbed().QueueToChannel(e.Channel);
            }
            else
            {
                e.ErrorEmbed("Anime not found!")
                .ToEmbed().QueueToChannel(e.Channel);
            }
        }
Beispiel #10
0
        public async Task AnilistAsync([Remainder][Summary("Search query (use keyword `search:` to get multiple results)")] string query)
        {
            if (query == null)
            {
                throw new ArgumentNullException(nameof(query), "No input passed");
            }
            AnilistClient anilist = new AnilistClient();

            if (query.ToLower().StartsWith("search:"))
            {
                query = query.Replace("search:", "");
                var results = await anilist.SearchMediaAsync(query).ConfigureAwait(false);

                EmbedBuilder _eb = new EmbedBuilder
                {
                    Author = new EmbedAuthorBuilder
                    {
                        Name    = $"SEARCH",
                        IconUrl = "https://submission-manual.anilist.co/logo.png",
                    },
                    Title  = $"{results.Items.Count} results for {query}",
                    Color  = Discord.Color.Blue,
                    Footer = new EmbedFooterBuilder
                    {
                        Text = "Anilist for Ranka"
                    }
                };

                foreach (var item in results.Items)
                {
                    _eb.AddField(item.DefaultTitle, $"{item.Type} | [Link](https://anilist.co/{item.Type.ToString().ToLower()}/{item.Id})");
                }

                await RankaReplyAsync(_eb).ConfigureAwait(false);

                return;
            }

            var res = await anilist.GetMediaAsync(query).ConfigureAwait(false);

            var color = await StringUtils.DiscordParseColor(new Uri(res.CoverImage)).ConfigureAwait(false);

            EmbedBuilder eb = new EmbedBuilder
            {
                Author = new EmbedAuthorBuilder
                {
                    Name    = $"{res.Type}",
                    IconUrl = "https://submission-manual.anilist.co/logo.png",
                },
                Title        = res.DefaultTitle,
                Description  = res.Description,
                Color        = color,
                Url          = res.Url,
                ThumbnailUrl = res.CoverImage,
                Footer       = new EmbedFooterBuilder
                {
                    Text = "Anilist for Ranka"
                }
            };

            var score = res.Score.HasValue ? $"{res.Score.Value}/100" : "N/A";

            eb.AddField("Japanese Title", res.NativeTitle, true);
            eb.AddField("Transcripted Title", res.RomajiTitle, true);
            eb.AddField("Score", score, true);
            eb.AddField("Genres", string.Join(", ", res.Genres));
            if (res.Episodes.HasValue)
            {
                eb.AddField("Episodes", res.Episodes.Value, true);
            }
            if (res.Chapters.HasValue)
            {
                eb.AddField("Chapters", res.Chapters.Value, true);
            }
            if (res.Volumes.HasValue)
            {
                eb.AddField("Volumes", res.Volumes.Value, true);
            }
            eb.AddField("Status", res.Status, true);

            await RankaReplyAsync(eb).ConfigureAwait(false);
        }
Beispiel #11
0
        static async Task AnimeAction(IEnumerable <string> args, Dictionary <string, string> @params)
        {
            List <MediaFormat> formats = new List <MediaFormat>();

            foreach (var f in Enum.GetNames(typeof(MediaFormat)))
            {
                if (@params.ContainsKey($"--{f.ToLower().Replace('_', '-')}"))
                {
                    formats.Add(Enum.Parse <MediaFormat>(f));
                }
            }

            bool nsfw = @params.ContainsKey("-nsfw");

            if (args.Count() == 0)
            {
                return;
            }

            switch (args.ElementAtOrDefault(0) ?? "")
            {
            case "search":
            {
                int page = 0;
                @params.TryGetValue("-p", out string pageCount);
                int.TryParse(pageCount, out page);

                var searchResult = await client.SearchMediaAsync(string.Join(" ", args.Skip(1).Take(args.Count() - 1)), page, nsfw, formats.ToArray());

                if (searchResult == null)
                {
                    Console.WriteLine("Nothing was found here!");
                    return;
                }

                for (int i = 0; i < searchResult.Items.Count; i++)
                {
                    Console.WriteLine($"{searchResult.Items[i].Id.ToString().PadLeft(6)}: {searchResult.Items[i].DefaultTitle}");
                }
                Console.WriteLine("----------");
                Console.WriteLine($"Page {searchResult.PageInfo.CurrentPage} of {searchResult.PageInfo.TotalPages}");
            } break;

            default:
            {
                var media = await client.GetMediaAsync(string.Join(" ", args), formats.ToArray());

                if (media == null)
                {
                    Console.WriteLine("response was empty, most likely this media does not exist!");
                    return;
                }

                Console.WriteLine($"{media.EnglishTitle} ({media.NativeTitle})");
                Console.WriteLine($"Parts: {media.Episodes ?? media.Volumes ?? 0} | Status: {media.Status}");
                Console.WriteLine($"Score: {media.Score} | {string.Join(", ", media.Genres)}");
                Console.WriteLine($"{media.Description}");
            }
            break;
            }
        }