From c7c555d010b393c16916d89a8d4af086c98fba11 Mon Sep 17 00:00:00 2001 From: Kwoth Date: Tue, 3 Jan 2017 22:38:22 +0100 Subject: [PATCH] ~img and ~rimg reworked --- src/NadekoBot/Modules/Searches/Searches.cs | 110 ++++++++++-------- .../Resources/CommandStrings.Designer.cs | 108 ++++++++--------- src/NadekoBot/Resources/CommandStrings.resx | 22 ++-- src/NadekoBot/Services/CommandHandler.cs | 5 +- 4 files changed, 129 insertions(+), 116 deletions(-) diff --git a/src/NadekoBot/Modules/Searches/Searches.cs b/src/NadekoBot/Modules/Searches/Searches.cs index b919335c..643ea0e0 100644 --- a/src/NadekoBot/Modules/Searches/Searches.cs +++ b/src/NadekoBot/Modules/Searches/Searches.cs @@ -109,61 +109,75 @@ namespace NadekoBot.Modules.Searches } [NadekoCommand, Usage, Description, Aliases] - public async Task I([Remainder] string query = null) + public async Task Image([Remainder] string terms = null) { - if (string.IsNullOrWhiteSpace(query)) + terms = terms?.Trim(); + if (string.IsNullOrWhiteSpace(terms)) return; - try - { - using (var http = new HttpClient()) - { - var reqString = $"https://www.googleapis.com/customsearch/v1?q={Uri.EscapeDataString(query)}&cx=018084019232060951019%3Ahs5piey28-e&num=1&searchType=image&fields=items%2Flink&key={NadekoBot.Credentials.GoogleApiKey}"; - var obj = JObject.Parse(await http.GetStringAsync(reqString).ConfigureAwait(false)); - await Context.Channel.SendMessageAsync(obj["items"][0]["link"].ToString()).ConfigureAwait(false); - } - } - catch (HttpRequestException exception) - { - if (exception.Message.Contains("403 (Forbidden)")) - { - await Context.Channel.SendErrorAsync("Daily limit reached!"); - } - else - { - await Context.Channel.SendErrorAsync("Something went wrong."); - _log.Error(exception); - } - } + + terms = WebUtility.UrlEncode(terms).Replace(' ', '+'); + + var fullQueryLink = $"http://imgur.com/search?q={ terms }"; + var config = Configuration.Default.WithDefaultLoader(); + var document = await BrowsingContext.New(config).OpenAsync(fullQueryLink); + + var elems = document.QuerySelectorAll("a.image-list-link"); + + if (!elems.Any()) + return; + + var img = (elems.FirstOrDefault()?.Children?.FirstOrDefault() as IHtmlImageElement); + + if (img?.Source == null) + return; + + var source = img.Source.Replace("b.", "."); + + var embed = new EmbedBuilder() + .WithOkColor() + .WithAuthor(eab => eab.WithName("Image Search For: " + terms.TrimTo(50)) + .WithUrl(fullQueryLink) + .WithIconUrl("http://s.imgur.com/images/logo-1200-630.jpg?")) + .WithDescription(source) + .WithImageUrl(source) + .WithTitle(Context.User.Mention); + await Context.Channel.EmbedAsync(embed).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] - public async Task Ir([Remainder] string query = null) + public async Task RandomImage([Remainder] string terms = null) { - if (string.IsNullOrWhiteSpace(query)) + terms = terms?.Trim(); + if (string.IsNullOrWhiteSpace(terms)) return; - try - { - using (var http = new HttpClient()) - { - var rng = new NadekoRandom(); - var reqString = $"https://www.googleapis.com/customsearch/v1?q={Uri.EscapeDataString(query)}&cx=018084019232060951019%3Ahs5piey28-e&num=1&searchType=image&start={ rng.Next(1, 50) }&fields=items%2Flink&key={NadekoBot.Credentials.GoogleApiKey}"; - var obj = JObject.Parse(await http.GetStringAsync(reqString).ConfigureAwait(false)); - var items = obj["items"] as JArray; - await Context.Channel.SendMessageAsync(items[0]["link"].ToString()).ConfigureAwait(false); - } - } - catch (HttpRequestException exception) - { - if (exception.Message.Contains("403 (Forbidden)")) - { - await Context.Channel.SendErrorAsync("Daily limit reached!"); - } - else - { - await Context.Channel.SendErrorAsync("Something went wrong."); - _log.Error(exception); - } - } + + terms = WebUtility.UrlEncode(terms).Replace(' ', '+'); + + var fullQueryLink = $"http://imgur.com/search?q={ terms }"; + var config = Configuration.Default.WithDefaultLoader(); + var document = await BrowsingContext.New(config).OpenAsync(fullQueryLink); + + var elems = document.QuerySelectorAll("a.image-list-link").ToList(); + + if (!elems.Any()) + return; + + var img = (elems.ElementAtOrDefault(new NadekoRandom().Next(0, elems.Count))?.Children?.FirstOrDefault() as IHtmlImageElement); + + if (img?.Source == null) + return; + + var source = img.Source.Replace("b.", "."); + + var embed = new EmbedBuilder() + .WithOkColor() + .WithAuthor(eab => eab.WithName("Image Search For: " + terms.TrimTo(50)) + .WithUrl(fullQueryLink) + .WithIconUrl("http://s.imgur.com/images/logo-1200-630.jpg?")) + .WithDescription(source) + .WithImageUrl(source) + .WithTitle(Context.User.Mention); + await Context.Channel.EmbedAsync(embed).ConfigureAwait(false); } [NadekoCommand, Usage, Description, Aliases] diff --git a/src/NadekoBot/Resources/CommandStrings.Designer.cs b/src/NadekoBot/Resources/CommandStrings.Designer.cs index 70259971..431ca335 100644 --- a/src/NadekoBot/Resources/CommandStrings.Designer.cs +++ b/src/NadekoBot/Resources/CommandStrings.Designer.cs @@ -3245,33 +3245,6 @@ namespace NadekoBot.Resources { } } - /// - /// Looks up a localized string similar to img i. - /// - public static string i_cmd { - get { - return ResourceManager.GetString("i_cmd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Pulls the first image found using a search parameter. Use {0}ir for different results.. - /// - public static string i_desc { - get { - return ResourceManager.GetString("i_desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to `{0}i cute kitten`. - /// - public static string i_usage { - get { - return ResourceManager.GetString("i_usage", resourceCulture); - } - } - /// /// Looks up a localized string similar to iam. /// @@ -3326,6 +3299,33 @@ namespace NadekoBot.Resources { } } + /// + /// Looks up a localized string similar to image img. + /// + public static string image_cmd { + get { + return ResourceManager.GetString("image_cmd", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Pulls the first image found using a search parameter. Use {0}imgr for different results.. + /// + public static string image_desc { + get { + return ResourceManager.GetString("image_desc", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to `{0}img cute kitten`. + /// + public static string image_usage { + get { + return ResourceManager.GetString("image_usage", resourceCulture); + } + } + /// /// Looks up a localized string similar to imdb omdb. /// @@ -3380,33 +3380,6 @@ namespace NadekoBot.Resources { } } - /// - /// Looks up a localized string similar to ir. - /// - public static string ir_cmd { - get { - return ResourceManager.GetString("ir_cmd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Pulls a random image using a search parameter.. - /// - public static string ir_desc { - get { - return ResourceManager.GetString("ir_desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to `{0}ir cute kitten`. - /// - public static string ir_usage { - get { - return ResourceManager.GetString("ir_usage", resourceCulture); - } - } - /// /// Looks up a localized string similar to jcsc. /// @@ -5405,6 +5378,33 @@ namespace NadekoBot.Resources { } } + /// + /// Looks up a localized string similar to randomimage rimg. + /// + public static string randomimage_cmd { + get { + return ResourceManager.GetString("randomimage_cmd", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Pulls a random image using a search parameter.. + /// + public static string randomimage_desc { + get { + return ResourceManager.GetString("randomimage_desc", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to `{0}rimg cute kitten`. + /// + public static string randomimage_usage { + get { + return ResourceManager.GetString("randomimage_usage", resourceCulture); + } + } + /// /// Looks up a localized string similar to remind. /// diff --git a/src/NadekoBot/Resources/CommandStrings.resx b/src/NadekoBot/Resources/CommandStrings.resx index fe484754..104128cb 100644 --- a/src/NadekoBot/Resources/CommandStrings.resx +++ b/src/NadekoBot/Resources/CommandStrings.resx @@ -1926,23 +1926,23 @@ `{0}woof` - - img i + + image img - - Pulls the first image found using a search parameter. Use {0}ir for different results. + + Pulls the first image found using a search parameter. Use {0}imgr for different results. - - `{0}i cute kitten` + + `{0}img cute kitten` - - ir + + randomimage rimg - + Pulls a random image using a search parameter. - - `{0}ir cute kitten` + + `{0}rimg cute kitten` lmgtfy diff --git a/src/NadekoBot/Services/CommandHandler.cs b/src/NadekoBot/Services/CommandHandler.cs index 9c899d8c..d99930b5 100644 --- a/src/NadekoBot/Services/CommandHandler.cs +++ b/src/NadekoBot/Services/CommandHandler.cs @@ -66,13 +66,12 @@ namespace NadekoBot.Services { try { - var usrMsg = msg as SocketUserMessage; if (usrMsg == null) return; - if (!usrMsg.IsAuthor()) - UserMessagesSent.AddOrUpdate(usrMsg.Author.Id, 1, (key, old) => ++old); + //if (!usrMsg.IsAuthor()) + // UserMessagesSent.AddOrUpdate(usrMsg.Author.Id, 1, (key, old) => ++old); if (msg.Author.IsBot || !NadekoBot.Ready) //no bots return;