diff --git a/src/NadekoBot/Modules/Searches/Commands/AnimeSearchCommands.cs b/src/NadekoBot/Modules/Searches/Commands/AnimeSearchCommands.cs index 6563d8cf..a0907ed2 100644 --- a/src/NadekoBot/Modules/Searches/Commands/AnimeSearchCommands.cs +++ b/src/NadekoBot/Modules/Searches/Commands/AnimeSearchCommands.cs @@ -37,9 +37,35 @@ namespace NadekoBot.Modules.Searches if (string.IsNullOrWhiteSpace(query)) return; - var result = await GetAnimeData(query).ConfigureAwait(false); + var animeData = await GetAnimeData(query).ConfigureAwait(false); - await channel.SendMessageAsync(result.ToString() ?? "`No anime found.`").ConfigureAwait(false); + var embed = new Discord.API.Embed() + { + Description = animeData.Synopsis, + Title = animeData.title_english, + Url = animeData.Link, + Image = new Discord.API.EmbedImage() { + Url = animeData.image_url_lge + }, + Fields = new[] { + new Discord.API.EmbedField() { + Inline = true, + Name = "Episodes", + Value = animeData.total_episodes.ToString() + }, + new Discord.API.EmbedField() { + Inline = true, + Name = "Status", + Value = animeData.AiringStatus.ToString() + }, + new Discord.API.EmbedField() { + Inline = true, + Name = "Genres", + Value = String.Join(", ", animeData.Genres) + } + } + }; + await channel.EmbedAsync(embed).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] @@ -51,9 +77,37 @@ namespace NadekoBot.Modules.Searches if (string.IsNullOrWhiteSpace(query)) return; - var result = await GetMangaData(query).ConfigureAwait(false); + var animeData = await GetMangaData(query).ConfigureAwait(false); - await channel.SendMessageAsync(result.ToString() ?? "`No manga found.`").ConfigureAwait(false); + var embed = new Discord.API.Embed() + { + Description = animeData.Synopsis, + Title = animeData.title_english, + Url = animeData.Link, + Image = new Discord.API.EmbedImage() + { + Url = animeData.image_url_lge + }, + Fields = new[] { + new Discord.API.EmbedField() { + Inline = true, + Name = "Chapters", + Value = animeData.total_chapters.ToString() + }, + new Discord.API.EmbedField() { + Inline = true, + Name = "Status", + Value = animeData.publishing_status.ToString() + }, + new Discord.API.EmbedField() { + Inline = true, + Name = "Genres", + Value = String.Join(", ", animeData.Genres) + } + } + }; + + await channel.EmbedAsync(embed).ConfigureAwait(false); } private async Task GetAnimeData(string query) diff --git a/src/NadekoBot/Modules/Searches/Commands/Models/AnimeResult.cs b/src/NadekoBot/Modules/Searches/Commands/Models/AnimeResult.cs index d2a6152d..3d08da6e 100644 --- a/src/NadekoBot/Modules/Searches/Commands/Models/AnimeResult.cs +++ b/src/NadekoBot/Modules/Searches/Commands/Models/AnimeResult.cs @@ -1,20 +1,19 @@ -namespace NadekoBot.Modules.Searches.Models +using NadekoBot.Extensions; +using System.Globalization; + +namespace NadekoBot.Modules.Searches.Models { public class AnimeResult { public int id; + public string AiringStatus => airing_status.ToTitleCase(); public string airing_status; public string title_english; public int total_episodes; public string description; public string image_url_lge; - - public override string ToString() => - "`Title:` **" + title_english + - "**\n`Status:` " + airing_status + - "\n`Episodes:` " + total_episodes + - "\n`Link:` http://anilist.co/anime/" + id + - "\n`Synopsis:` " + description.Substring(0, description.Length > 500 ? 500 : description.Length) + "..." + - "\n`img:` " + image_url_lge; + public string[] Genres; + public string Link => "http://anilist.co/anime/" + id; + public string Synopsis => description?.Substring(0, description.Length > 500 ? 500 : description.Length) + "..."; } } \ No newline at end of file diff --git a/src/NadekoBot/Modules/Searches/Commands/Models/MangaResult.cs b/src/NadekoBot/Modules/Searches/Commands/Models/MangaResult.cs index f5269017..5e262209 100644 --- a/src/NadekoBot/Modules/Searches/Commands/Models/MangaResult.cs +++ b/src/NadekoBot/Modules/Searches/Commands/Models/MangaResult.cs @@ -9,14 +9,8 @@ namespace NadekoBot.Modules.Searches.Models public int total_chapters; public int total_volumes; public string description; - - public override string ToString() => - "`Title:` **" + title_english + - "**\n`Status:` " + publishing_status + - "\n`Chapters:` " + total_chapters + - "\n`Volumes:` " + total_volumes + - "\n`Link:` http://anilist.co/manga/" + id + - "\n`Synopsis:` " + description.Substring(0, description.Length > 500 ? 500 : description.Length) + "..." + - "\n`img:` " + image_url_lge; + public string[] Genres; + public string Link => "http://anilist.co/manga/" + id; + public string Synopsis => description?.Substring(0, description.Length > 500 ? 500 : description.Length) + "..."; } } \ No newline at end of file diff --git a/src/NadekoBot/_Extensions/Extensions.cs b/src/NadekoBot/_Extensions/Extensions.cs index 166e41b0..125d8e03 100644 --- a/src/NadekoBot/_Extensions/Extensions.cs +++ b/src/NadekoBot/_Extensions/Extensions.cs @@ -155,6 +155,9 @@ namespace NadekoBot.Extensions return list.ToArray(); } + public static Task EmbedAsync(this IMessageChannel ch, Discord.API.Embed embed) + => ch.SendMessageAsync("", embed: embed); + public static Task SendTableAsync(this IMessageChannel ch, string seed, IEnumerable items, Func howToPrint, int columns = 3) { var i = 0; @@ -214,6 +217,18 @@ namespace NadekoBot.Extensions return string.Concat(str.Take(maxLength - 3)) + (hideDots ? "" : "..."); } + public static string ToTitleCase(this string str) + { + var tokens = str.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries); + for (var i = 0; i < tokens.Length; i++) + { + var token = tokens[i]; + tokens[i] = token.Substring(0, 1).ToUpper() + token.Substring(1); + } + + return string.Join(" ", tokens); + } + /// /// Removes trailing S or ES (if specified) on the given string if the num is 1 ///