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()); } }
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); }
public async Task GetAnime() { AnilistClient client = new AnilistClient(); var ch = await client.GetMediaAsync("miki", MediaFormat.TV); Assert.NotNull(ch); }
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)); }
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); }
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()))); }
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); }
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); } }
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); }
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; } }