From e1f5ba8169e1be6dbcd234b327d0ad1dc360d084 Mon Sep 17 00:00:00 2001 From: Master Kwoth Date: Thu, 18 Feb 2016 23:40:56 +0100 Subject: [PATCH] ~# command (thanks to blaubeerwald, formatting --- NadekoBot/Classes/Music/MusicControls.cs | 11 ++- NadekoBot/Classes/SearchHelper.cs | 41 ++++---- NadekoBot/Modules/Searches.cs | 114 ++++++++++++++--------- 3 files changed, 103 insertions(+), 63 deletions(-) diff --git a/NadekoBot/Classes/Music/MusicControls.cs b/NadekoBot/Classes/Music/MusicControls.cs index 48c5a791..2eb12d71 100644 --- a/NadekoBot/Classes/Music/MusicControls.cs +++ b/NadekoBot/Classes/Music/MusicControls.cs @@ -33,7 +33,8 @@ namespace NadekoBot.Classes.Music { if (SongQueue.Count > 0) await LoadNextSong(); - } else if (CurrentSong.State == StreamState.Completed || NextSong) { + } + else if (CurrentSong.State == StreamState.Completed || NextSong) { NextSong = false; await LoadNextSong(); } @@ -57,7 +58,8 @@ namespace NadekoBot.Classes.Music { if (SongQueue.Count != 0) { CurrentSong = SongQueue[0]; SongQueue.RemoveAt(0); - } else { + } + else { VoiceClient?.Disconnect(); VoiceClient = null; return; @@ -71,7 +73,8 @@ namespace NadekoBot.Classes.Music { Console.WriteLine($"Joined voicechannel [{DateTime.Now.Second}]"); } await Task.Factory.StartNew(async () => await CurrentSong?.Start(), TaskCreationOptions.LongRunning).Unwrap(); - } catch (Exception ex) { + } + catch (Exception ex) { Console.WriteLine($"Starting failed: {ex}"); CurrentSong?.Stop(); CurrentSong = null; @@ -95,7 +98,7 @@ namespace NadekoBot.Classes.Music { value = 0; if (value > 150) value = 150; - this.Volume = value/100f; + this.Volume = value / 100f; return value; } diff --git a/NadekoBot/Classes/SearchHelper.cs b/NadekoBot/Classes/SearchHelper.cs index 3bb93987..eedf2b8b 100644 --- a/NadekoBot/Classes/SearchHelper.cs +++ b/NadekoBot/Classes/SearchHelper.cs @@ -14,7 +14,8 @@ namespace NadekoBot.Classes { var wr = (HttpWebRequest)WebRequest.Create(v); try { return (await (wr).GetResponseAsync()).GetResponseStream(); - } catch (Exception ex) { + } + catch (Exception ex) { Console.WriteLine("error in getresponse stream " + ex); return null; } @@ -23,11 +24,9 @@ namespace NadekoBot.Classes { public static async Task GetResponseAsync(string v) => await new StreamReader((await ((HttpWebRequest)WebRequest.Create(v)).GetResponseAsync()).GetResponseStream()).ReadToEndAsync(); - public static async Task GetResponseAsync(string v, IEnumerable> headers) { + public static async Task GetResponseAsync(string v, WebHeaderCollection headers) { var wr = (HttpWebRequest)WebRequest.Create(v); - foreach (var header in headers) { - wr.Headers.Add(header.Item1, header.Item2); - } + wr.Headers = headers; return await new StreamReader((await wr.GetResponseAsync()).GetResponseStream()).ReadToEndAsync(); } @@ -47,7 +46,8 @@ namespace NadekoBot.Classes { rq = new RestSharp.RestRequest("anime/" + smallObj["id"]); rq.AddParameter("access_token", token); return await Task.Run(() => JsonConvert.DeserializeObject(cl.Execute(rq).Content)); - } catch { + } + catch { return null; } } @@ -66,7 +66,8 @@ namespace NadekoBot.Classes { rq = new RestSharp.RestRequest("manga/" + smallObj["id"]); rq.AddParameter("access_token", token); return await Task.Run(() => JsonConvert.DeserializeObject(cl.Execute(rq).Content)); - } catch (Exception ex) { + } + catch (Exception ex) { Console.WriteLine(ex.ToString()); return null; } @@ -82,7 +83,8 @@ namespace NadekoBot.Classes { var exec = cl.Execute(rq); token = JObject.Parse(exec.Content)["access_token"].ToString(); - } catch (Exception ex) { + } + catch (Exception ex) { Console.WriteLine($"Failed refreshing anilist token:\n {ex}"); } } @@ -114,7 +116,8 @@ namespace NadekoBot.Classes { dynamic obj = JObject.Parse(await sr.ReadToEndAsync()); return "http://www.youtube.com/watch?v=" + obj.items[0].id.videoId.ToString(); - } catch (Exception ex) { + } + catch (Exception ex) { Console.WriteLine($"Error in findyoutubeurl: {ex.Message}"); return string.Empty; } @@ -132,7 +135,8 @@ namespace NadekoBot.Classes { dynamic obj = JObject.Parse(await sr.ReadToEndAsync()); return obj.items[0].id.playlistId.ToString(); - } catch (Exception ex) { + } + catch (Exception ex) { Console.WriteLine($"Error in GetPlaylistId: {ex.Message}"); return string.Empty; } @@ -156,7 +160,8 @@ namespace NadekoBot.Classes { toReturn.Add("http://www.youtube.com/watch?v=" + item.contentDetails.videoId); } return toReturn; - } catch (Exception ex) { + } + catch (Exception ex) { Console.WriteLine($"Error in GetPlaylistId: {ex.Message}"); return new List(); } @@ -174,7 +179,8 @@ namespace NadekoBot.Classes { var matches = Regex.Matches(webpage, "data-large-file-url=\"(?.*?)\""); return await $"http://danbooru.donmai.us{ matches[rng.Next(0, matches.Count)].Groups["id"].Value }".ShortenUrl(); - } catch { + } + catch { return null; } } @@ -190,7 +196,8 @@ namespace NadekoBot.Classes { //now extract the image from post page var match = Regex.Match(webpage, "\"(?http://simg4.gelbooru.com//images.*?)\""); return match.Groups["url"].Value; - } catch { + } + catch { return null; } } @@ -201,8 +208,9 @@ namespace NadekoBot.Classes { var url = $"https://e621.net/post/index/{rng.Next(0, 5)}/{Uri.EscapeUriString(tags)}"; var webpage = await GetResponseAsync(url); // first extract the post id and go to that posts page var matches = Regex.Matches(webpage, "\"file_url\":\"(?.*?)\""); - return matches[rng.Next(0,matches.Count)].Groups["url"].Value; - } catch { + return matches[rng.Next(0, matches.Count)].Groups["url"].Value; + } + catch { return null; } } @@ -225,7 +233,8 @@ namespace NadekoBot.Classes { string MATCH_PATTERN = @"""id"": ?""(?.+)"""; return Regex.Match(responseText, MATCH_PATTERN).Groups["id"].Value; } - } catch (Exception ex) { Console.WriteLine(ex.ToString()); return url; } + } + catch (Exception ex) { Console.WriteLine(ex.ToString()); return url; } } } } diff --git a/NadekoBot/Modules/Searches.cs b/NadekoBot/Modules/Searches.cs index 3ca9f82b..3027df42 100644 --- a/NadekoBot/Modules/Searches.cs +++ b/NadekoBot/Modules/Searches.cs @@ -7,12 +7,13 @@ using Discord.Commands; using NadekoBot.Extensions; using System.Collections.Generic; using NadekoBot.Classes; +using NadekoBot.Commands; namespace NadekoBot.Modules { class Searches : DiscordModule { private Random _r; public Searches() : base() { - // commands.Add(new OsuCommands()); + // commands.Add(new LoLCommands()); _r = new Random(); } @@ -79,7 +80,8 @@ namespace NadekoBot.Modules { .GetResponse() .GetResponseStream()) .ReadToEnd())["file"].ToString()); - } catch { } + } + catch { } }); cgb.CreateCommand("~i") @@ -92,7 +94,8 @@ namespace NadekoBot.Modules { var reqString = $"https://www.googleapis.com/customsearch/v1?q={Uri.EscapeDataString(e.GetArg("query"))}&cx=018084019232060951019%3Ahs5piey28-e&num=1&searchType=image&fields=items%2Flink&key={NadekoBot.creds.GoogleAPIKey}"; var obj = JObject.Parse(await SearchHelper.GetResponseAsync(reqString)); await e.Send(obj["items"][0]["link"].ToString()); - } catch (Exception ex) { + } + catch (Exception ex) { await e.Send($"💢 {ex.Message}"); } }); @@ -107,7 +110,8 @@ namespace NadekoBot.Modules { var reqString = $"https://www.googleapis.com/customsearch/v1?q={Uri.EscapeDataString(e.GetArg("query"))}&cx=018084019232060951019%3Ahs5piey28-e&num=1&searchType=image&start={ _r.Next(1, 150) }&fields=items%2Flink&key={NadekoBot.creds.GoogleAPIKey}"; var obj = JObject.Parse(await SearchHelper.GetResponseAsync(reqString)); await e.Send(obj["items"][0]["link"].ToString()); - } catch (Exception ex) { + } + catch (Exception ex) { await e.Send($"💢 {ex.Message}"); } }); @@ -130,10 +134,9 @@ namespace NadekoBot.Modules { return; } await e.Channel.SendIsTyping(); - var res = await SearchHelper.GetResponseAsync($"https://omgvamp-hearthstone-v1.p.mashape.com/cards/search/{Uri.EscapeUriString(arg)}", - new Tuple[] { - new Tuple("X-Mashape-Key", NadekoBot.creds.MashapeKey), - }); + var headers = new WebHeaderCollection(); + headers.Add("X-Mashape-Key", NadekoBot.creds.MashapeKey); + var res = await SearchHelper.GetResponseAsync($"https://omgvamp-hearthstone-v1.p.mashape.com/cards/search/{Uri.EscapeUriString(arg)}", headers); try { var items = JArray.Parse(res); List images = new List(); @@ -155,7 +158,8 @@ namespace NadekoBot.Modules { Console.WriteLine("Start"); await e.Channel.SendFile(arg + ".png", (await images.MergeAsync()).ToStream(System.Drawing.Imaging.ImageFormat.Png)); Console.WriteLine("Finish"); - } catch (Exception ex) { + } + catch (Exception ex) { await e.Send($"💢 Error {ex.Message}"); } }); @@ -176,59 +180,83 @@ namespace NadekoBot.Modules { try { await e.Channel.SendFile($"{e.GetArg("usr")}.png", new MemoryStream(cle.Result)); await e.Send($"`Profile Link:`https://osu.ppy.sh/u/{Uri.EscapeDataString(e.GetArg("usr"))}\n`Image provided by https://lemmmy.pw/osusig`"); - } catch { } + } + catch { } }; - } catch { + } + catch { await e.Channel.SendMessage("💢 Failed retrieving osu signature :\\"); } } }); - cgb.CreateCommand("~ud") .Description("Searches Urban Dictionary for a word\n**Usage**:~ud Pineapple") .Parameter("query", ParameterType.Unparsed) .Do(async e => { var arg = e.GetArg("query"); - if (string.IsNullOrWhiteSpace(arg)) - { + if (string.IsNullOrWhiteSpace(arg)) { await e.Send("💢 Please enter a search term."); return; } await e.Channel.SendIsTyping(); - var res = await SearchHelper.GetResponseAsync($"https://mashape-community-urban-dictionary.p.mashape.com/define?term={Uri.EscapeUriString(arg)}", - new Tuple[] { - new Tuple("X-Mashape-Key", NadekoBot.creds.MashapeKey) - }); - try - { + var headers = new WebHeaderCollection(); + headers.Add("X-Mashape-Key", NadekoBot.creds.MashapeKey); + var res = await SearchHelper.GetResponseAsync($"https://mashape-community-urban-dictionary.p.mashape.com/define?term={Uri.EscapeUriString(arg)}", headers); + try { var items = JObject.Parse(res); - await e.Send($"`Term:` {items["list"][0]["word"].ToString()}\n"); - await e.Send($"`Definition:` {items["list"][0]["definition"].ToString()}\n"); - await e.Send($"`Link:` <{await items["list"][0]["permalink"].ToString().ShortenUrl()}>"); + var sb = new System.Text.StringBuilder(); + sb.AppendLine($"`Term:` {items["list"][0]["word"].ToString()}"); + sb.AppendLine($"`Definition:` {items["list"][0]["definition"].ToString()}"); + sb.Append($"`Link:` <{await items["list"][0]["permalink"].ToString().ShortenUrl()}>"); + await e.Send(sb.ToString()); } - catch (Exception ex) - { - await e.Channel.SendMessage("💢 Exception: " + ex.Message); + catch { + await e.Channel.SendMessage("💢 Failed finding a definition for that term."); } - }); - - //todo when moved from parse - /* - cgb.CreateCommand("~osubind") - .Description("Bind discord user to osu name\n**Usage**: ~osubind My osu name") - .Parameter("osu_name", ParameterType.Unparsed) - .Do(async e => { - var userName = e.GetArg("user_name"); - var osuName = e.GetArg("osu_name"); - var usr = e.Server.FindUsers(userName).FirstOrDefault(); - if (usr == null) { - await e.Send("Cannot find that discord user."); - return; - } - }); - */ }); + // thanks to Blaubeerwald + cgb.CreateCommand("~#") + .Description("Searches Tagdef.com for a hashtag\n**Usage**:~# ff") + .Parameter("query", ParameterType.Unparsed) + .Do(async e => { + var arg = e.GetArg("query"); + if (string.IsNullOrWhiteSpace(arg)) { + await e.Send("💢 Please enter a search term."); + return; + } + await e.Channel.SendIsTyping(); + var headers = new WebHeaderCollection(); + headers.Add("X-Mashape-Key", NadekoBot.creds.MashapeKey); + var res = await SearchHelper.GetResponseAsync($"https://tagdef.p.mashape.com/one.{Uri.EscapeUriString(arg)}.json", headers); + try { + var items = JObject.Parse(res); + var sb = new System.Text.StringBuilder(); + sb.AppendLine($"`Hashtag:` {items["defs"]["def"]["hashtag"].ToString()}"); + sb.AppendLine($"`Definition:` {items["defs"]["def"]["text"].ToString()}"); + sb.Append($"`Link:` <{await items["defs"]["def"]["uri"].ToString().ShortenUrl()}>"); + await e.Send(sb.ToString()); + } + catch { + await e.Channel.SendMessage("💢 Failed finidng a definition for that tag"); + } + }); + //todo when moved from parse + /* + cgb.CreateCommand("~osubind") + .Description("Bind discord user to osu name\n**Usage**: ~osubind My osu name") + .Parameter("osu_name", ParameterType.Unparsed) + .Do(async e => { + var userName = e.GetArg("user_name"); + var osuName = e.GetArg("osu_name"); + var usr = e.Server.FindUsers(userName).FirstOrDefault(); + if (usr == null) { + await e.Send("Cannot find that discord user."); + return; + } + }); + */ + }); } } }