more work, repo DOES NOT BUILD
This commit is contained in:
		| @@ -6,7 +6,7 @@ using System; | ||||
| using System.Linq.Expressions; | ||||
|  | ||||
| namespace NadekoBot.Classes { | ||||
|     class DBHandler { | ||||
|     internal class DBHandler { | ||||
|         private static readonly DBHandler _instance = new DBHandler(); | ||||
|         public static DBHandler Instance => _instance; | ||||
|  | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| namespace NadekoBot.Classes { | ||||
|     static class FlowersHandler { | ||||
|     internal static class FlowersHandler { | ||||
|         public static async Task AddFlowersAsync(Discord.User u, string reason, int amount) { | ||||
|             if (amount <= 0) | ||||
|                 return; | ||||
|   | ||||
| @@ -299,7 +299,7 @@ namespace NadekoBot.Classes.Music { | ||||
|         public long readPos; | ||||
|         public long writePos; | ||||
|  | ||||
|         public DualStream() : base() { | ||||
|         public DualStream()  { | ||||
|             readPos = writePos = 0; | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,7 @@ using Discord.Commands; | ||||
| using System.Collections.Concurrent; | ||||
|  | ||||
| namespace NadekoBot.Classes.Permissions { | ||||
|     class PermissionChecker : IPermissionChecker { | ||||
|     internal class PermissionChecker : IPermissionChecker { | ||||
|         public static readonly PermissionChecker _instance = new PermissionChecker(); | ||||
|         public static PermissionChecker Instance => _instance; | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ using System.Linq; | ||||
| using Discord; | ||||
|  | ||||
| namespace NadekoBot.Classes { | ||||
|     static class PermissionHelper { | ||||
|     internal static class PermissionHelper { | ||||
|         public static bool ValidateBool(string passedArg) { | ||||
|             if (string.IsNullOrWhiteSpace(passedArg)) { | ||||
|                 throw new ArgumentException("No value supplied! Missing argument"); | ||||
|   | ||||
| @@ -5,46 +5,57 @@ using System; | ||||
| using System.Collections.Generic; | ||||
| using System.IO; | ||||
| using System.Net; | ||||
| using System.Net.Http; | ||||
| using System.Security.Authentication; | ||||
| using System.Text.RegularExpressions; | ||||
| using System.Threading.Tasks; | ||||
| using NadekoBot.Classes.JSONModels; | ||||
|  | ||||
| namespace NadekoBot.Classes { | ||||
|     public enum RequestHttpMethod { | ||||
|         Get, Post | ||||
|     } | ||||
|  | ||||
|     public static class SearchHelper { | ||||
|         public static async Task<Stream> GetResponseStream(string v) { | ||||
|             var wr = (HttpWebRequest)WebRequest.Create(v); | ||||
|             return (await (wr).GetResponseAsync()).GetResponseStream(); | ||||
|  | ||||
|         public static async Task<Stream> GetResponseStream(string query, RequestHttpMethod method = RequestHttpMethod.Get) { | ||||
|             if (string.IsNullOrWhiteSpace(query)) | ||||
|                 throw new ArgumentNullException(nameof(query)); | ||||
|             var wr = (HttpWebRequest)WebRequest.Create(query); | ||||
|             using (var response = await wr.GetResponseAsync()) { | ||||
|                 var stream = response?.GetResponseStream(); | ||||
|                 if (stream == null) | ||||
|                     throw new InvalidOperationException("Did not receive a response."); | ||||
|                 return stream; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public static async Task<string> GetResponseAsync(string v, WebHeaderCollection headers = null) { | ||||
|             var wr = (HttpWebRequest)WebRequest.Create(v); | ||||
|             if (headers != null) | ||||
|                 wr.Headers = headers; | ||||
|             var stream = (await wr.GetResponseAsync()).GetResponseStream(); | ||||
|             if (stream == null) return ""; | ||||
|             using (var sr = new StreamReader(stream)) { | ||||
|                 return await sr.ReadToEndAsync(); | ||||
|         public static async Task<string> GetResponseAsync(string url, RequestHttpMethod method = RequestHttpMethod.Get, params Tuple<string,string>[] headers) { | ||||
|             using (var httpClient = new HttpClient()) { | ||||
|                 if (headers != null) { | ||||
|                     foreach (var header in headers) { | ||||
|                         httpClient.DefaultRequestHeaders.Add(header.Key, header.Value); | ||||
|                     } | ||||
|                 } | ||||
|                 return await httpClient.GetStringAsync(url); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private static string token = ""; | ||||
|         public static async Task<AnimeResult> GetAnimeQueryResultLink(string query) { | ||||
|             try { | ||||
|                 var cl = new RestSharp.RestClient("http://anilist.co/api"); | ||||
|                 var rq = new RestSharp.RestRequest("/auth/access_token", RestSharp.Method.POST); | ||||
|             if (string.IsNullOrWhiteSpace(query)) | ||||
|                 throw new ArgumentNullException(nameof(query)); | ||||
|  | ||||
|                 RefreshAnilistToken(); | ||||
|             RefreshAnilistToken(); | ||||
|  | ||||
|                 rq = new RestSharp.RestRequest("/anime/search/" + Uri.EscapeUriString(query)); | ||||
|                 rq.AddParameter("access_token", token); | ||||
|             var link = "http://anilist.co/api/anime/search/" + Uri.EscapeUriString(query); | ||||
|  | ||||
|                 var smallObj = JArray.Parse(cl.Execute(rq).Content)[0]; | ||||
|             Dictionary<string, string> headers = new {"access_token" = token}; | ||||
|             var smallContent = await GetResponseAsync(link, headers); | ||||
|             var smallObj = JArray.Parse(await httpClient.GetStringAsync(link))[0]; | ||||
|             var content = await httpClient.GetStringAsync("anime/" + smallObj["id"]); | ||||
|  | ||||
|                 rq = new RestSharp.RestRequest("anime/" + smallObj["id"]); | ||||
|                 rq.AddParameter("access_token", token); | ||||
|                 return await Task.Run(() => JsonConvert.DeserializeObject<AnimeResult>(cl.Execute(rq).Content)); | ||||
|             } catch { | ||||
|                 return null; | ||||
|             } | ||||
|             return await Task.Run(() => JsonConvert.DeserializeObject<AnimeResult>(content)); | ||||
|         } | ||||
|         //todo kick out RestSharp and make it truly async | ||||
|         public static async Task<MangaResult> GetMangaQueryResultLink(string query) { | ||||
| @@ -83,32 +94,36 @@ namespace NadekoBot.Classes { | ||||
|         } | ||||
|  | ||||
|         public static async Task<bool> ValidateQuery(Discord.Channel ch, string query) { | ||||
|             if (string.IsNullOrEmpty(query.Trim())) { | ||||
|                 await ch.Send("Please specify search parameters."); | ||||
|                 return false; | ||||
|             } | ||||
|             return true; | ||||
|             if (!string.IsNullOrEmpty(query.Trim())) return true; | ||||
|             await ch.Send("Please specify search parameters."); | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         public static async Task<string> FindYoutubeUrlByKeywords(string v) { | ||||
|             if (string.IsNullOrWhiteSpace(NadekoBot.GoogleAPIKey)) { | ||||
|                 Console.WriteLine("ERROR: No google api key found. Playing `Never gonna give you up`."); | ||||
|                 return @"https://www.youtube.com/watch?v=dQw4w9WgXcQ"; | ||||
|         public static async Task<string> FindYoutubeUrlByKeywords(string keywords) { | ||||
|             if (string.IsNullOrWhiteSpace(NadekoBot.Creds.GoogleAPIKey)) | ||||
|                 throw new InvalidCredentialException("Google API Key is missing."); | ||||
|             if (keywords.Length > 150) | ||||
|                 throw new ArgumentException("Query is too long."); | ||||
|  | ||||
|             //maybe it is already a youtube url, in which case we will just extract the id and prepend it with youtube.com?v= | ||||
|             var match = new Regex("(?:youtu\\.be\\/|v=)(?<id>[\\da-zA-Z\\-_]*)").Match(keywords); | ||||
|             if (match.Length > 1) { | ||||
|                 return $"http://www.youtube.com?v={ match.Groups["id"].Value }"; | ||||
|             } | ||||
|             var wr = | ||||
|                 WebRequest.Create( | ||||
|                     $"https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=1&q={Uri.EscapeDataString(keywords)}&key={NadekoBot.Creds.GoogleAPIKey}"); | ||||
|             try { | ||||
|                 //maybe it is already a youtube url, in which case we will just extract the id and prepend it with youtube.com?v= | ||||
|                 var match = new Regex("(?:youtu\\.be\\/|v=)(?<id>[\\da-zA-Z\\-_]*)").Match(v); | ||||
|                 if (match.Length > 1) { | ||||
|                     string str = $"http://www.youtube.com?v={ match.Groups["id"].Value }"; | ||||
|                     return str; | ||||
|                 } | ||||
|  | ||||
|                 WebRequest wr = WebRequest.Create("https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=1&q=" + Uri.EscapeDataString(v) + "&key=" + NadekoBot.GoogleAPIKey); | ||||
|  | ||||
|                 using (var sr = new StreamReader((await wr.GetResponseAsync()).GetResponseStream())) { | ||||
|  | ||||
|                     dynamic obj = JObject.Parse(await sr.ReadToEndAsync()); | ||||
|                     return "http://www.youtube.com/watch?v=" + obj.items[0].id.videoId.ToString(); | ||||
|                 using (var response = await wr.GetResponseAsync()) | ||||
|                 using (var stream = response.GetResponseStream()) { | ||||
|                     try { | ||||
|                         using (var sr = new StreamReader(stream)) { | ||||
|                             dynamic obj = JObject.Parse(await sr.ReadToEndAsync()); | ||||
|                             return "http://www.youtube.com/watch?v=" + obj.items[0].id.videoId.ToString(); | ||||
|                         } | ||||
|                     } catch (Exception ex) { | ||||
|                         ex.Message | ||||
|                       } | ||||
|                 } | ||||
|             } catch (Exception ex) { | ||||
|                 Console.WriteLine($"Error in findyoutubeurl: {ex.Message}"); | ||||
| @@ -117,12 +132,12 @@ namespace NadekoBot.Classes { | ||||
|         } | ||||
|  | ||||
|         public static async Task<string> GetPlaylistIdByKeyword(string v) { | ||||
|             if (string.IsNullOrWhiteSpace(NadekoBot.GoogleAPIKey)) { | ||||
|             if (string.IsNullOrWhiteSpace(NadekoBot.Creds.GoogleAPIKey)) { | ||||
|                 Console.WriteLine("ERROR: No google api key found. Playing `Never gonna give you up`."); | ||||
|                 return string.Empty; | ||||
|             } | ||||
|             try { | ||||
|                 WebRequest wr = WebRequest.Create($"https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=1&q={Uri.EscapeDataString(v)}&type=playlist&key={NadekoBot.creds.GoogleAPIKey}"); | ||||
|                 WebRequest wr = WebRequest.Create($"https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=1&q={Uri.EscapeDataString(v)}&type=playlist&key={NadekoBot.Creds.GoogleAPIKey}"); | ||||
|  | ||||
|                 var sr = new StreamReader((await wr.GetResponseAsync()).GetResponseStream()); | ||||
|  | ||||
| @@ -136,12 +151,12 @@ namespace NadekoBot.Classes { | ||||
|  | ||||
|         public static async Task<List<string>> GetVideoIDs(string v) { | ||||
|             List<string> toReturn = new List<string>(); | ||||
|             if (string.IsNullOrWhiteSpace(NadekoBot.GoogleAPIKey)) { | ||||
|             if (string.IsNullOrWhiteSpace(NadekoBot.Creds.GoogleAPIKey)) { | ||||
|                 Console.WriteLine("ERROR: No google api key found. Playing `Never gonna give you up`."); | ||||
|                 return toReturn; | ||||
|             } | ||||
|             try { | ||||
|                 WebRequest wr = WebRequest.Create($"https://www.googleapis.com/youtube/v3/playlistItems?part=contentDetails&maxResults={30}&playlistId={v}&key={ NadekoBot.creds.GoogleAPIKey }"); | ||||
|                 WebRequest wr = WebRequest.Create($"https://www.googleapis.com/youtube/v3/playlistItems?part=contentDetails&maxResults={30}&playlistId={v}&key={ NadekoBot.Creds.GoogleAPIKey }"); | ||||
|                 var response = await wr.GetResponseAsync(); | ||||
|                 if (response == null) return toReturn; | ||||
|                 var responseStream = response.GetResponseStream(); | ||||
| @@ -206,9 +221,9 @@ namespace NadekoBot.Classes { | ||||
|         } | ||||
|  | ||||
|         public static async Task<string> ShortenUrl(string url) { | ||||
|             if (string.IsNullOrWhiteSpace(NadekoBot.creds.GoogleAPIKey)) return url; | ||||
|             if (string.IsNullOrWhiteSpace(NadekoBot.Creds.GoogleAPIKey)) return url; | ||||
|             try { | ||||
|                 var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url?key=" + NadekoBot.creds.GoogleAPIKey); | ||||
|                 var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url?key=" + NadekoBot.Creds.GoogleAPIKey); | ||||
|                 httpWebRequest.ContentType = "application/json"; | ||||
|                 httpWebRequest.Method = "POST"; | ||||
|  | ||||
|   | ||||
| @@ -9,7 +9,7 @@ using System.Threading; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| namespace NadekoBot.Classes.Trivia { | ||||
|     class TriviaGame { | ||||
|     internal class TriviaGame { | ||||
|         private readonly object _guessLock = new object(); | ||||
|  | ||||
|         private Server _server { get; } | ||||
|   | ||||
| @@ -7,7 +7,7 @@ using System.Collections.Concurrent; | ||||
| using System.Threading; | ||||
|  | ||||
| namespace NadekoBot.Commands { | ||||
|     class ClashOfClans : DiscordCommand { | ||||
|     internal class ClashOfClans : DiscordCommand { | ||||
|  | ||||
|         private static string prefix = ","; | ||||
|  | ||||
| @@ -15,7 +15,7 @@ namespace NadekoBot.Commands { | ||||
|  | ||||
|         private object writeLock { get; } = new object(); | ||||
|  | ||||
|         public ClashOfClans() : base() { | ||||
|         public ClashOfClans()  { | ||||
|  | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -5,11 +5,11 @@ using Discord.Commands; | ||||
|  | ||||
| namespace NadekoBot | ||||
| { | ||||
|     class CopyCommand : DiscordCommand | ||||
|     internal class CopyCommand : DiscordCommand | ||||
|     { | ||||
|         private List<ulong> CopiedUsers; | ||||
|  | ||||
|         public CopyCommand() : base() | ||||
|         public CopyCommand()  | ||||
|         { | ||||
|             CopiedUsers = new List<ulong>(); | ||||
|             client.MessageReceived += Client_MessageReceived; | ||||
|   | ||||
| @@ -8,8 +8,8 @@ using System.Drawing.Imaging; | ||||
| using NadekoBot.Extensions; | ||||
|  | ||||
| namespace NadekoBot { | ||||
|     class DiceRollCommand : DiscordCommand { | ||||
|         public DiceRollCommand() : base() { } | ||||
|     internal class DiceRollCommand : DiscordCommand { | ||||
|         public DiceRollCommand()  { } | ||||
|  | ||||
|         public override Func<CommandEventArgs, Task> DoFunc() { | ||||
|             Random r = new Random(); | ||||
|   | ||||
| @@ -7,10 +7,10 @@ using System.Collections.Concurrent; | ||||
| using NadekoBot.Extensions; | ||||
|  | ||||
| namespace NadekoBot { | ||||
|     class DrawCommand : DiscordCommand { | ||||
|     internal class DrawCommand : DiscordCommand { | ||||
|         private static ConcurrentDictionary<Discord.Server, Cards> AllDecks = new ConcurrentDictionary<Discord.Server, Cards>(); | ||||
|  | ||||
|         public DrawCommand() : base() { | ||||
|         public DrawCommand()  { | ||||
|  | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -5,10 +5,10 @@ using NadekoBot.Extensions; | ||||
| using System.Drawing; | ||||
|  | ||||
| namespace NadekoBot { | ||||
|     class FlipCoinCommand : DiscordCommand { | ||||
|     internal class FlipCoinCommand : DiscordCommand { | ||||
|  | ||||
|         private Random _r; | ||||
|         public FlipCoinCommand() : base() { | ||||
|         public FlipCoinCommand()  { | ||||
|             _r = new Random(); | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,7 @@ using System.IO; | ||||
| using System.Linq; | ||||
|  | ||||
| namespace NadekoBot { | ||||
|     class HelpCommand : DiscordCommand { | ||||
|     internal class HelpCommand : DiscordCommand { | ||||
|         public override Func<CommandEventArgs, Task> DoFunc() => async e => { | ||||
|             #region OldHelp | ||||
|             /* | ||||
|   | ||||
| @@ -9,7 +9,7 @@ using NadekoBot.Extensions; | ||||
| using Newtonsoft.Json.Linq; | ||||
|  | ||||
| namespace NadekoBot.Commands { | ||||
|     class LoLCommands : DiscordCommand { | ||||
|     internal class LoLCommands : DiscordCommand { | ||||
|  | ||||
|         private class CachedChampion { | ||||
|             public System.IO.Stream ImageStream { get; set; } | ||||
| @@ -22,7 +22,7 @@ namespace NadekoBot.Commands { | ||||
|  | ||||
|  | ||||
|         private System.Timers.Timer clearTimer { get; } = new System.Timers.Timer(); | ||||
|         public LoLCommands() : base() { | ||||
|         public LoLCommands()  { | ||||
|             clearTimer.Interval = new TimeSpan(0, 10, 0).TotalMilliseconds; | ||||
|             clearTimer.Start(); | ||||
|             clearTimer.Elapsed += (s, e) => { | ||||
| @@ -36,7 +36,7 @@ namespace NadekoBot.Commands { | ||||
|             }; | ||||
|         } | ||||
|  | ||||
|         string[] trashTalk = new[] { "Better ban your counters. You are going to carry the game anyway.", | ||||
|         private string[] trashTalk = new[] { "Better ban your counters. You are going to carry the game anyway.", | ||||
|                                         "Go with the flow. Don't think. Just ban one of these.", | ||||
|                                         "DONT READ BELOW! Ban Urgot mid OP 100%. Im smurf Diamond 1.", | ||||
|                                         "Ask your teammates what would they like to play, and ban that.", | ||||
| @@ -47,7 +47,7 @@ namespace NadekoBot.Commands { | ||||
|             throw new NotImplementedException(); | ||||
|         } | ||||
|  | ||||
|         class MatchupModel { | ||||
|         private class MatchupModel { | ||||
|             public int Games { get; set; } | ||||
|             public float WinRate { get; set; } | ||||
|             [Newtonsoft.Json.JsonProperty("key")] | ||||
| @@ -270,7 +270,8 @@ Assists: {general["assists"]}  Ban: {general["banRate"]}% | ||||
|                       } | ||||
|                   }); | ||||
|         } | ||||
|         enum GetImageType { | ||||
|  | ||||
|         private enum GetImageType { | ||||
|             Champion, | ||||
|             Item | ||||
|         } | ||||
|   | ||||
| @@ -5,19 +5,19 @@ using Discord.Commands; | ||||
| using Discord; | ||||
|  | ||||
| namespace NadekoBot.Commands { | ||||
|     class LogCommand : DiscordCommand { | ||||
|     internal class LogCommand : DiscordCommand { | ||||
|  | ||||
|         public LogCommand() : base() { | ||||
|         public LogCommand()  { | ||||
|             NadekoBot.Client.MessageReceived += MsgRecivd; | ||||
|             NadekoBot.Client.MessageDeleted += MsgDltd; | ||||
|             NadekoBot.Client.MessageUpdated += MsgUpdtd; | ||||
|             NadekoBot.Client.UserUpdated += UsrUpdtd; | ||||
|         } | ||||
|  | ||||
|         ConcurrentDictionary<Server, Channel> logs = new ConcurrentDictionary<Server, Channel>(); | ||||
|         ConcurrentDictionary<Server, Channel> loggingPresences = new ConcurrentDictionary<Server, Channel>(); | ||||
|         private ConcurrentDictionary<Server, Channel> logs = new ConcurrentDictionary<Server, Channel>(); | ||||
|         private ConcurrentDictionary<Server, Channel> loggingPresences = new ConcurrentDictionary<Server, Channel>(); | ||||
|         // | ||||
|         ConcurrentDictionary<Channel, Channel> voiceChannelLog = new ConcurrentDictionary<Channel, Channel>(); | ||||
|         private ConcurrentDictionary<Channel, Channel> voiceChannelLog = new ConcurrentDictionary<Channel, Channel>(); | ||||
|  | ||||
|         public override Func<CommandEventArgs, Task> DoFunc() => async e => { | ||||
|             if (!NadekoBot.IsOwner(e.User.Id) || | ||||
|   | ||||
| @@ -7,7 +7,7 @@ using Discord.Commands; | ||||
| using System.Timers; | ||||
|  | ||||
| namespace NadekoBot.Commands { | ||||
|     class PlayingRotate : DiscordCommand { | ||||
|     internal class PlayingRotate : DiscordCommand { | ||||
|  | ||||
|         private static List<string> rotatingStatuses = new List<string>(); | ||||
|         private static Timer timer = new Timer(12000); | ||||
|   | ||||
| @@ -4,7 +4,7 @@ using Discord.Commands; | ||||
| using NadekoBot.Extensions; | ||||
|  | ||||
| namespace NadekoBot.Commands { | ||||
|     class RequestsCommand : DiscordCommand { | ||||
|     internal class RequestsCommand : DiscordCommand { | ||||
|         public void SaveRequest(CommandEventArgs e, string text) { | ||||
|             Classes.DBHandler.Instance.InsertData(new Classes._DataModels.Request { | ||||
|                 RequestText = text, | ||||
|   | ||||
| @@ -21,13 +21,13 @@ public class AsyncLazy<T> : Lazy<Task<T>> | ||||
| */ | ||||
|  | ||||
| namespace NadekoBot.Commands { | ||||
|     class ServerGreetCommand : DiscordCommand { | ||||
|     internal class ServerGreetCommand : DiscordCommand { | ||||
|  | ||||
|         public static ConcurrentDictionary<ulong, AnnounceControls> AnnouncementsDictionary; | ||||
|  | ||||
|         public static long Greeted = 0; | ||||
|  | ||||
|         public ServerGreetCommand() : base() { | ||||
|         public ServerGreetCommand()  { | ||||
|             AnnouncementsDictionary = new ConcurrentDictionary<ulong, AnnounceControls>(); | ||||
|  | ||||
|             NadekoBot.Client.UserJoined += UserJoined; | ||||
|   | ||||
| @@ -105,11 +105,11 @@ namespace NadekoBot.Commands { | ||||
|  | ||||
|     } | ||||
|  | ||||
|     class SpeedTyping : DiscordCommand { | ||||
|     internal class SpeedTyping : DiscordCommand { | ||||
|  | ||||
|         private static Dictionary<ulong, TypingGame> runningContests; | ||||
|  | ||||
|         public SpeedTyping() : base() { | ||||
|         public SpeedTyping()  { | ||||
|             runningContests = new Dictionary<ulong, TypingGame>(); | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,7 @@ using Discord; | ||||
| using TriviaGame = NadekoBot.Classes.Trivia.TriviaGame; | ||||
|  | ||||
| namespace NadekoBot.Commands { | ||||
|     class Trivia : DiscordCommand { | ||||
|     internal class Trivia : DiscordCommand { | ||||
|         public static ConcurrentDictionary<Server, TriviaGame> runningTrivias = new ConcurrentDictionary<Server, TriviaGame>(); | ||||
|  | ||||
|         public override Func<CommandEventArgs, Task> DoFunc() => async e => { | ||||
|   | ||||
| @@ -6,15 +6,15 @@ using System.Collections.Concurrent; | ||||
| using Discord; | ||||
|  | ||||
| namespace NadekoBot.Commands { | ||||
|     class VoiceNotificationCommand : DiscordCommand { | ||||
|     internal class VoiceNotificationCommand : DiscordCommand { | ||||
|  | ||||
|  | ||||
|         public VoiceNotificationCommand() : base() { | ||||
|         public VoiceNotificationCommand()  { | ||||
|             //NadekoBot.client. | ||||
|         } | ||||
|  | ||||
|         //voicechannel/text channel | ||||
|         ConcurrentDictionary<Channel, Channel> subscribers = new ConcurrentDictionary<Channel, Channel>(); | ||||
|         private ConcurrentDictionary<Channel, Channel> subscribers = new ConcurrentDictionary<Channel, Channel>(); | ||||
|  | ||||
|         public override Func<CommandEventArgs, Task> DoFunc() => async e => { | ||||
|             var arg = e.GetArg("voice_name"); | ||||
|   | ||||
| @@ -15,9 +15,9 @@ using NadekoBot.Properties; | ||||
| using NadekoBot.Commands; | ||||
|  | ||||
| namespace NadekoBot.Modules { | ||||
|     class Conversations : DiscordModule { | ||||
|     internal class Conversations : DiscordModule { | ||||
|         private string firestr = "🔥 ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้ 🔥"; | ||||
|         public Conversations() : base() { | ||||
|         public Conversations()  { | ||||
|             commands.Add(new CopyCommand()); | ||||
|             commands.Add(new RequestsCommand()); | ||||
|         } | ||||
|   | ||||
| @@ -1,14 +1,11 @@ | ||||
| using Discord.Modules; | ||||
| using System.Collections.Generic; | ||||
|  | ||||
| namespace NadekoBot.Modules | ||||
| { | ||||
|     abstract class DiscordModule : IModule | ||||
|     { | ||||
|         public List<DiscordCommand> commands; | ||||
| namespace NadekoBot.Modules { | ||||
|     internal abstract class DiscordModule : IModule { | ||||
|         protected List<DiscordCommand> commands = new List<DiscordCommand>(); | ||||
|  | ||||
|         protected DiscordModule() { | ||||
|             commands = new List<DiscordCommand>(); | ||||
|         } | ||||
|  | ||||
|         public abstract void Install(ModuleManager manager); | ||||
|   | ||||
| @@ -2,10 +2,11 @@ | ||||
| using Discord.Modules; | ||||
| using NadekoBot.Extensions; | ||||
| using System.Linq; | ||||
| using Discord; | ||||
|  | ||||
| namespace NadekoBot.Modules | ||||
| { | ||||
|     class Gambling : DiscordModule | ||||
|     internal class Gambling : DiscordModule | ||||
|     { | ||||
|  | ||||
|         public Gambling() { | ||||
| @@ -33,33 +34,16 @@ namespace NadekoBot.Modules | ||||
|                           return; | ||||
|                       } | ||||
|                       var members = role.Members.Where(u => u.Status == Discord.UserStatus.Online); // only online | ||||
|                       try { | ||||
|                           var usr = members.ToArray()[new System.Random().Next(0, members.Count())]; | ||||
|                           await e.Channel.SendMessage($"**Raffled user:** {usr.Name} (id: {usr.Id})"); | ||||
|                       } | ||||
|                       catch { } | ||||
|                       var membersArray = members as User[] ?? members.ToArray(); | ||||
|                       var usr = membersArray[new System.Random().Next(0, membersArray.Length)]; | ||||
|                       await e.Channel.SendMessage($"**Raffled user:** {usr.Name} (id: {usr.Id})"); | ||||
|                   }); | ||||
|                 /* | ||||
|                 cgb.CreateCommand("$$") | ||||
|                   .Description("Add moneyz") | ||||
|                   .Parameter("val", ParameterType.Required) | ||||
|                   .Do(e => { | ||||
|                       var arg = e.GetArg("val"); | ||||
|                       var num = int.Parse(arg); | ||||
|                       Classes.DBHandler.Instance.InsertData( | ||||
|                           new Classes._DataModels.CurrencyTransaction { | ||||
|                               Value = num, | ||||
|                               Reason = "Money plz", | ||||
|                               UserId = (long)e.User.Id, | ||||
|                           }); | ||||
|                   }); | ||||
|                   */ | ||||
|                 cgb.CreateCommand("$$$") | ||||
|                   .Description("Check how many NadekoFlowers you have.") | ||||
|                   .Do(async e => { | ||||
|                       var pts = Classes.DBHandler.Instance.GetStateByUserId((long)e.User.Id)?.Value ?? 0; | ||||
|                       string str = $"`You have {pts} NadekoFlowers".SnPl((int)pts)+"`\n"; | ||||
|                       for (int i = 0; i < pts; i++) { | ||||
|                       var str = $"`You have {pts} NadekoFlowers".SnPl((int)pts)+"`\n"; | ||||
|                       for (var i = 0; i < pts; i++) { | ||||
|                           str += "🌸"; | ||||
|                       } | ||||
|                       await e.Channel.SendMessage(str); | ||||
|   | ||||
| @@ -6,14 +6,12 @@ using Newtonsoft.Json.Linq; | ||||
| using System.IO; | ||||
| //🃏 | ||||
| //🏁 | ||||
| namespace NadekoBot.Modules | ||||
| { | ||||
|     class Games : DiscordModule | ||||
|     { | ||||
|         private string[] _8BallAnswers; | ||||
|         private Random _r = new Random(); | ||||
| namespace NadekoBot.Modules { | ||||
|     internal class Games : DiscordModule { | ||||
|         private readonly string[] _8BallAnswers; | ||||
|         private Random rng = new Random(); | ||||
|  | ||||
|         public Games() : base() { | ||||
|         public Games()  { | ||||
|             commands.Add(new Trivia()); | ||||
|             commands.Add(new SpeedTyping()); | ||||
|             commands.Add(new PollCommand()); | ||||
| @@ -22,8 +20,7 @@ namespace NadekoBot.Modules | ||||
|             _8BallAnswers = JArray.Parse(File.ReadAllText("data/8ball.json")).Select(t => t.ToString()).ToArray(); | ||||
|         } | ||||
|  | ||||
|         public override void Install(ModuleManager manager) | ||||
|         { | ||||
|         public override void Install(ModuleManager manager) { | ||||
|             manager.CreateCommands("", cgb => { | ||||
|  | ||||
|                 cgb.AddCheck(Classes.Permissions.PermissionChecker.Instance); | ||||
| @@ -40,39 +37,35 @@ namespace NadekoBot.Modules | ||||
|                       var list = arg.Split(';'); | ||||
|                       if (list.Count() < 2) | ||||
|                           return; | ||||
|                       await e.Channel.SendMessage(list[new Random().Next(0, list.Length)]); | ||||
|                       await e.Channel.SendMessage(list[rng.Next(0, list.Length)]); | ||||
|                   }); | ||||
|  | ||||
|                 cgb.CreateCommand(">8ball") | ||||
|                     .Description("Ask the 8ball a yes/no question.") | ||||
|                     .Parameter("question",Discord.Commands.ParameterType.Unparsed) | ||||
|                     .Parameter("question", Discord.Commands.ParameterType.Unparsed) | ||||
|                     .Do(async e => { | ||||
|                         string question = e.GetArg("question"); | ||||
|                         var question = e.GetArg("question"); | ||||
|                         if (string.IsNullOrWhiteSpace(question)) | ||||
|                             return; | ||||
|                         try { | ||||
|                             await e.Channel.SendMessage( | ||||
|                                 $":question: **Question**: `{question}` \n:crystal_ball: **8Ball Answers**: `{_8BallAnswers[new Random().Next(0, _8BallAnswers.Length)]}`"); | ||||
|                         } | ||||
|                         catch { } | ||||
|                                 $":question: **Question**: `{question}` \n:crystal_ball: **8Ball Answers**: `{_8BallAnswers[rng.Next(0, _8BallAnswers.Length)]}`"); | ||||
|                         } catch { } | ||||
|                     }); | ||||
|  | ||||
|                 cgb.CreateCommand(">") | ||||
|                     .Description("Attack a person. Supported attacks: 'splash', 'strike', 'burn', 'surge'.\n**Usage**: > strike @User") | ||||
|                     .Parameter("attack_type",Discord.Commands.ParameterType.Required) | ||||
|                     .Parameter("target",Discord.Commands.ParameterType.Required) | ||||
|                     .Do(async e => | ||||
|                     { | ||||
|                     .Parameter("attack_type", Discord.Commands.ParameterType.Required) | ||||
|                     .Parameter("target", Discord.Commands.ParameterType.Required) | ||||
|                     .Do(async e => { | ||||
|                         var usr = e.Server.FindUsers(e.GetArg("target")).FirstOrDefault(); | ||||
|                         var usrType = GetType(usr.Id); | ||||
|                         string response = ""; | ||||
|                         int dmg = GetDamage(usrType, e.GetArg("attack_type").ToLowerInvariant()); | ||||
|                         var response = ""; | ||||
|                         var dmg = GetDamage(usrType, e.GetArg("attack_type").ToLowerInvariant()); | ||||
|                         response = e.GetArg("attack_type") + (e.GetArg("attack_type") == "splash" ? "es " : "s ") + $"{usr.Mention}{GetImage(usrType)} for {dmg}\n"; | ||||
|                         if (dmg >= 65) | ||||
|                         { | ||||
|                         if (dmg >= 65) { | ||||
|                             response += "It's super effective!"; | ||||
|                         } | ||||
|                         else if (dmg <= 35) { | ||||
|                         } else if (dmg <= 35) { | ||||
|                             response += "Ineffective!"; | ||||
|                         } | ||||
|                         await e.Channel.SendMessage($"{ e.User.Mention }{GetImage(GetType(e.User.Id))} {response}"); | ||||
| @@ -81,11 +74,11 @@ namespace NadekoBot.Modules | ||||
|                 cgb.CreateCommand("poketype") | ||||
|                     .Parameter("target", Discord.Commands.ParameterType.Required) | ||||
|                     .Description("Gets the users element type. Use this to do more damage with strike!") | ||||
|                     .Do(async e => | ||||
|                     { | ||||
|                     .Do(async e => { | ||||
|                         var usr = e.Server.FindUsers(e.GetArg("target")).FirstOrDefault(); | ||||
|                         if (usr == null) { | ||||
|                             await e.Channel.SendMessage("No such person."); | ||||
|                             return; | ||||
|                         } | ||||
|                         var t = GetType(usr.Id); | ||||
|                         await e.Channel.SendMessage($"{usr.Name}'s type is {GetImage(t)} {t}"); | ||||
| @@ -104,7 +97,8 @@ namespace NadekoBot.Modules | ||||
| 🐛 Insect | ||||
| 🌟 or 💫 or ✨ Fairy | ||||
|     */ | ||||
|         string GetImage(PokeType t) { | ||||
|  | ||||
|         private string GetImage(PokeType t) { | ||||
|             switch (t) { | ||||
|                 case PokeType.WATER: | ||||
|                     return "💦"; | ||||
| @@ -119,11 +113,9 @@ namespace NadekoBot.Modules | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private int GetDamage(PokeType targetType, string v) | ||||
|         { | ||||
|         private int GetDamage(PokeType targetType, string v) { | ||||
|             var rng = new Random(); | ||||
|             switch (v) | ||||
|             { | ||||
|             switch (v) { | ||||
|                 case "splash": //water | ||||
|                     if (targetType == PokeType.FIRE) | ||||
|                         return rng.Next(65, 100); | ||||
| @@ -166,21 +158,16 @@ namespace NadekoBot.Modules | ||||
|             var remainder = id % 10; | ||||
|             if (remainder < 3) | ||||
|                 return PokeType.WATER; | ||||
|             else if (remainder >= 3 && remainder < 5) | ||||
|             { | ||||
|             else if (remainder >= 3 && remainder < 5) { | ||||
|                 return PokeType.GRASS; | ||||
|             } | ||||
|             else if (remainder >= 5 && remainder < 8) | ||||
|             { | ||||
|             } else if (remainder >= 5 && remainder < 8) { | ||||
|                 return PokeType.FIRE; | ||||
|             } | ||||
|             else { | ||||
|             } else { | ||||
|                 return PokeType.ELECTRICAL; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private enum PokeType | ||||
|         { | ||||
|         private enum PokeType { | ||||
|             WATER, GRASS, FIRE, ELECTRICAL | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -3,9 +3,9 @@ using Discord.Modules; | ||||
| using Discord.Commands; | ||||
|  | ||||
| namespace NadekoBot.Modules { | ||||
|     class Help : DiscordModule { | ||||
|     internal class Help : DiscordModule { | ||||
|  | ||||
|         public Help() : base() { | ||||
|         public Help()  { | ||||
|             commands.Add(new HelpCommand()); | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -11,16 +11,16 @@ using System.Threading.Tasks; | ||||
| using Timer = System.Timers.Timer; | ||||
|  | ||||
| namespace NadekoBot.Modules { | ||||
|     class Music : DiscordModule { | ||||
|     internal class Music : DiscordModule { | ||||
|  | ||||
|         public static ConcurrentDictionary<Server, MusicPlayer> musicPlayers = new ConcurrentDictionary<Server, MusicPlayer>(); | ||||
|         public static ConcurrentDictionary<ulong, float> defaultMusicVolumes = new ConcurrentDictionary<ulong, float>(); | ||||
|  | ||||
|         Timer setgameTimer => new Timer(); | ||||
|         private Timer setgameTimer => new Timer(); | ||||
|  | ||||
|         bool setgameEnabled = false; | ||||
|         private bool setgameEnabled = false; | ||||
|  | ||||
|         public Music() : base() { | ||||
|         public Music()  { | ||||
|  | ||||
|             setgameTimer.Interval = 20000; | ||||
|             setgameTimer.Elapsed += (s, e) => { | ||||
|   | ||||
| @@ -5,11 +5,11 @@ using Newtonsoft.Json.Linq; | ||||
| using NadekoBot.Classes; | ||||
|  | ||||
| namespace NadekoBot.Modules { | ||||
|     class NSFW : DiscordModule { | ||||
|     internal class NSFW : DiscordModule { | ||||
|  | ||||
|         private Random _r = new Random(); | ||||
|  | ||||
|         public NSFW() : base() { | ||||
|         public NSFW()  { | ||||
|  | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -6,9 +6,10 @@ using PermsHandler = NadekoBot.Classes.Permissions.PermissionsHandler; | ||||
| using System.Linq; | ||||
|  | ||||
| namespace NadekoBot.Modules { | ||||
|     class PermissionModule : DiscordModule { | ||||
|         string prefix = ";"; | ||||
|         public PermissionModule() : base() { | ||||
|     internal class PermissionModule : DiscordModule { | ||||
|         private const string prefix = ";"; | ||||
|  | ||||
|         public PermissionModule()  { | ||||
|             //Empty for now | ||||
|         } | ||||
|  | ||||
| @@ -135,7 +136,7 @@ namespace NadekoBot.Modules { | ||||
|                 cgb.CreateCommand(prefix + "sm").Alias(prefix + "servermodule") | ||||
|                     .Parameter("module", ParameterType.Required) | ||||
|                     .Parameter("bool", ParameterType.Required) | ||||
|                     .Description("Sets a module's permission at the server level.\n**Usage**: ;sm <module_name> enable") | ||||
|                     .Description("Sets a module's permission at the server level.\n**Usage**: ;sm [module_name] enable") | ||||
|                     .Do(async e => { | ||||
|                         try { | ||||
|                             string module = PermissionHelper.ValidateModule(e.GetArg("module")); | ||||
| @@ -155,7 +156,7 @@ namespace NadekoBot.Modules { | ||||
|                 cgb.CreateCommand(prefix + "sc").Alias(prefix + "servercommand") | ||||
|                     .Parameter("command", ParameterType.Required) | ||||
|                     .Parameter("bool", ParameterType.Required) | ||||
|                     .Description("Sets a command's permission at the server level.\n**Usage**: ;sc <command_name> disable") | ||||
|                     .Description("Sets a command's permission at the server level.\n**Usage**: ;sc [command_name] disable") | ||||
|                     .Do(async e => { | ||||
|                         try { | ||||
|                             string command = PermissionHelper.ValidateCommand(e.GetArg("command")); | ||||
| @@ -176,7 +177,7 @@ namespace NadekoBot.Modules { | ||||
|                     .Parameter("module", ParameterType.Required) | ||||
|                     .Parameter("bool", ParameterType.Required) | ||||
|                     .Parameter("role", ParameterType.Unparsed) | ||||
|                     .Description("Sets a module's permission at the role level.\n**Usage**: ;rm <module_name> enable <role_name>") | ||||
|                     .Description("Sets a module's permission at the role level.\n**Usage**: ;rm [module_name] enable [role_name]") | ||||
|                     .Do(async e => { | ||||
|                         try { | ||||
|                             string module = PermissionHelper.ValidateModule(e.GetArg("module")); | ||||
| @@ -207,7 +208,7 @@ namespace NadekoBot.Modules { | ||||
|                     .Parameter("command", ParameterType.Required) | ||||
|                     .Parameter("bool", ParameterType.Required) | ||||
|                     .Parameter("role", ParameterType.Unparsed) | ||||
|                     .Description("Sets a command's permission at the role level.\n**Usage**: ;rc <command_name> disable <role_name>") | ||||
|                     .Description("Sets a command's permission at the role level.\n**Usage**: ;rc [command_name] disable [role_name]") | ||||
|                     .Do(async e => { | ||||
|                         try { | ||||
|                             string command = PermissionHelper.ValidateCommand(e.GetArg("command")); | ||||
| @@ -238,7 +239,7 @@ namespace NadekoBot.Modules { | ||||
|                     .Parameter("module", ParameterType.Required) | ||||
|                     .Parameter("bool", ParameterType.Required) | ||||
|                     .Parameter("channel", ParameterType.Unparsed) | ||||
|                     .Description("Sets a module's permission at the channel level.\n**Usage**: ;cm <module_name> enable <channel_name>") | ||||
|                     .Description("Sets a module's permission at the channel level.\n**Usage**: ;cm [module_name] enable [channel_name]") | ||||
|                     .Do(async e => { | ||||
|                         try { | ||||
|                             string module = PermissionHelper.ValidateModule(e.GetArg("module")); | ||||
| @@ -269,7 +270,7 @@ namespace NadekoBot.Modules { | ||||
|                     .Parameter("command", ParameterType.Required) | ||||
|                     .Parameter("bool", ParameterType.Required) | ||||
|                     .Parameter("channel", ParameterType.Unparsed) | ||||
|                     .Description("Sets a command's permission at the channel level.\n**Usage**: ;cm enable <channel_name>") | ||||
|                     .Description("Sets a command's permission at the channel level.\n**Usage**: ;cc [command_name] enable [channel_name]") | ||||
|                     .Do(async e => { | ||||
|                         try { | ||||
|                             string command = PermissionHelper.ValidateCommand(e.GetArg("command")); | ||||
| @@ -300,7 +301,7 @@ namespace NadekoBot.Modules { | ||||
|                     .Parameter("module", ParameterType.Required) | ||||
|                     .Parameter("bool", ParameterType.Required) | ||||
|                     .Parameter("user", ParameterType.Unparsed) | ||||
|                     .Description("Sets a module's permission at the user level.\n**Usage**: ;um <module_name> enable <user_name>") | ||||
|                     .Description("Sets a module's permission at the user level.\n**Usage**: ;um [module_name] enable [user_name]") | ||||
|                     .Do(async e => { | ||||
|                         try { | ||||
|                             string module = PermissionHelper.ValidateModule(e.GetArg("module")); | ||||
| @@ -322,7 +323,7 @@ namespace NadekoBot.Modules { | ||||
|                     .Parameter("command", ParameterType.Required) | ||||
|                     .Parameter("bool", ParameterType.Required) | ||||
|                     .Parameter("user", ParameterType.Unparsed) | ||||
|                     .Description("Sets a command's permission at the user level.\n**Usage**: ;uc <module_command> enable <user_name>") | ||||
|                     .Description("Sets a command's permission at the user level.\n**Usage**: ;uc [command_name] enable [user_name]") | ||||
|                     .Do(async e => { | ||||
|                         try { | ||||
|                             string command = PermissionHelper.ValidateCommand(e.GetArg("command")); | ||||
| @@ -342,7 +343,7 @@ namespace NadekoBot.Modules { | ||||
|  | ||||
|                 cgb.CreateCommand(prefix + "asm").Alias(prefix + "allservermodules") | ||||
|                     .Parameter("bool", ParameterType.Required) | ||||
|                     .Description("Sets permissions for all modules at the server level.\n**Usage**: ;asm <enable/disable>") | ||||
|                     .Description("Sets permissions for all modules at the server level.\n**Usage**: ;asm [enable/disable]") | ||||
|                     .Do(async e => { | ||||
|                         try { | ||||
|                             bool state = PermissionHelper.ValidateBool(e.GetArg("bool")); | ||||
| @@ -363,7 +364,7 @@ namespace NadekoBot.Modules { | ||||
|                 cgb.CreateCommand(prefix + "asc").Alias(prefix + "allservercommands") | ||||
|                     .Parameter("module", ParameterType.Required) | ||||
|                     .Parameter("bool", ParameterType.Required) | ||||
|                     .Description("Sets permissions for all commands from a certain module at the server level.\n**Usage**: ;asc <module_name> <enable/disable>") | ||||
|                     .Description("Sets permissions for all commands from a certain module at the server level.\n**Usage**: ;asc [module_name] [enable/disable]") | ||||
|                     .Do(async e => { | ||||
|                         try { | ||||
|                             bool state = PermissionHelper.ValidateBool(e.GetArg("bool")); | ||||
| @@ -385,7 +386,7 @@ namespace NadekoBot.Modules { | ||||
|                 cgb.CreateCommand(prefix + "acm").Alias(prefix + "allchannelmodules") | ||||
|                     .Parameter("bool", ParameterType.Required) | ||||
|                     .Parameter("channel", ParameterType.Unparsed) | ||||
|                     .Description("Sets permissions for all modules at the channel level.\n**Usage**: ;acm <enable/disable> <channel_name>") | ||||
|                     .Description("Sets permissions for all modules at the channel level.\n**Usage**: ;acm [enable/disable] [channel_name]") | ||||
|                     .Do(async e => { | ||||
|                         try { | ||||
|                             bool state = PermissionHelper.ValidateBool(e.GetArg("bool")); | ||||
| @@ -408,7 +409,7 @@ namespace NadekoBot.Modules { | ||||
|                     .Parameter("module", ParameterType.Required) | ||||
|                     .Parameter("bool", ParameterType.Required) | ||||
|                     .Parameter("channel", ParameterType.Unparsed) | ||||
|                     .Description("Sets permissions for all commands from a certain module at the channel level.\n**Usage**: ;acc <module_name> <enable/disable> <channel_name>") | ||||
|                     .Description("Sets permissions for all commands from a certain module at the channel level.\n**Usage**: ;acc [module_name] [enable/disable] [channel_name]") | ||||
|                     .Do(async e => { | ||||
|                         try { | ||||
|                             bool state = PermissionHelper.ValidateBool(e.GetArg("bool")); | ||||
| @@ -430,7 +431,7 @@ namespace NadekoBot.Modules { | ||||
|                 cgb.CreateCommand(prefix + "arm").Alias(prefix + "allrolemodules") | ||||
|                     .Parameter("bool", ParameterType.Required) | ||||
|                     .Parameter("role", ParameterType.Unparsed) | ||||
|                     .Description("Sets permissions for all modules at the role level.\n**Usage**: ;arm <enable/disable> <role_name>") | ||||
|                     .Description("Sets permissions for all modules at the role level.\n**Usage**: ;arm [enable/disable] [role_name]") | ||||
|                     .Do(async e => { | ||||
|                         try { | ||||
|                             bool state = PermissionHelper.ValidateBool(e.GetArg("bool")); | ||||
| @@ -453,7 +454,7 @@ namespace NadekoBot.Modules { | ||||
|                     .Parameter("module", ParameterType.Required) | ||||
|                     .Parameter("bool", ParameterType.Required) | ||||
|                     .Parameter("channel", ParameterType.Unparsed) | ||||
|                     .Description("Sets permissions for all commands from a certain module at the role level.\n**Usage**: ;arc <module_name> <enable/disable> <channel_name>") | ||||
|                     .Description("Sets permissions for all commands from a certain module at the role level.\n**Usage**: ;arc [module_name] [enable/disable] [channel_name]") | ||||
|                     .Do(async e => { | ||||
|                         try { | ||||
|                             bool state = PermissionHelper.ValidateBool(e.GetArg("bool")); | ||||
|   | ||||
| @@ -10,16 +10,14 @@ using NadekoBot.Classes; | ||||
| using NadekoBot.Commands; | ||||
|  | ||||
| namespace NadekoBot.Modules { | ||||
|     class Searches : DiscordModule { | ||||
|         private Random _r; | ||||
|         public Searches() : base() { | ||||
|     internal class Searches : DiscordModule { | ||||
|         private readonly Random rng; | ||||
|         public Searches() { | ||||
|             commands.Add(new LoLCommands()); | ||||
|             _r = new Random(); | ||||
|             rng = new Random(); | ||||
|         } | ||||
|  | ||||
|         public override void Install(ModuleManager manager) { | ||||
|             var client = NadekoBot.Client; | ||||
|  | ||||
|             manager.CreateCommands("", cgb => { | ||||
|  | ||||
|                 cgb.AddCheck(Classes.Permissions.PermissionChecker.Instance); | ||||
| @@ -34,14 +32,14 @@ namespace NadekoBot.Modules { | ||||
|  | ||||
|                         var str = await SearchHelper.ShortenUrl(await SearchHelper.FindYoutubeUrlByKeywords(e.GetArg("query"))); | ||||
|                         if (string.IsNullOrEmpty(str.Trim())) { | ||||
|                             await e.Channel.SendMessage("Query failed"); | ||||
|                             await e.Channel.SendMessage("Query failed."); | ||||
|                             return; | ||||
|                         } | ||||
|                         await e.Channel.SendMessage(str); | ||||
|                     }); | ||||
|  | ||||
|                 cgb.CreateCommand("~ani") | ||||
|                     .Alias("~anime").Alias("~aq") | ||||
|                     .Alias("~anime", "~aq") | ||||
|                     .Parameter("query", ParameterType.Unparsed) | ||||
|                     .Description("Queries anilist for an anime and shows the first result.") | ||||
|                     .Do(async e => { | ||||
| @@ -75,13 +73,10 @@ namespace NadekoBot.Modules { | ||||
|                     .Description("Shows a random cat image.") | ||||
|                     .Do(async e => { | ||||
|                         try { | ||||
|                             await e.Channel.SendMessage(JObject.Parse(new StreamReader( | ||||
|                                 WebRequest.Create("http://www.random.cat/meow") | ||||
|                                     .GetResponse() | ||||
|                                     .GetResponseStream()) | ||||
|                                 .ReadToEnd())["file"].ToString()); | ||||
|                             await e.Channel.SendMessage(JObject.Parse( | ||||
|                                 await SearchHelper.GetResponseAsync("http://www.random.cat/meow"))["file"].ToString()); | ||||
|                         } | ||||
|                         catch { } | ||||
|                         catch {} | ||||
|                     }); | ||||
|  | ||||
|                 cgb.CreateCommand("~i") | ||||
| @@ -91,11 +86,10 @@ namespace NadekoBot.Modules { | ||||
|                            if (string.IsNullOrWhiteSpace(e.GetArg("query"))) | ||||
|                                return; | ||||
|                            try { | ||||
|                                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 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.Channel.SendMessage(obj["items"][0]["link"].ToString()); | ||||
|                            } | ||||
|                            catch (Exception ex) { | ||||
|                            } catch (Exception ex) { | ||||
|                                await e.Channel.SendMessage($"💢 {ex.Message}"); | ||||
|                            } | ||||
|                        }); | ||||
| @@ -107,11 +101,10 @@ namespace NadekoBot.Modules { | ||||
|                            if (string.IsNullOrWhiteSpace(e.GetArg("query"))) | ||||
|                                return; | ||||
|                            try { | ||||
|                                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 reqString = $"https://www.googleapis.com/customsearch/v1?q={Uri.EscapeDataString(e.GetArg("query"))}&cx=018084019232060951019%3Ahs5piey28-e&num=1&searchType=image&start={ rng.Next(1, 150) }&fields=items%2Flink&key={NadekoBot.Creds.GoogleAPIKey}"; | ||||
|                                var obj = JObject.Parse(await SearchHelper.GetResponseAsync(reqString)); | ||||
|                                await e.Channel.SendMessage(obj["items"][0]["link"].ToString()); | ||||
|                            } | ||||
|                            catch (Exception ex) { | ||||
|                            } catch (Exception ex) { | ||||
|                                await e.Channel.SendMessage($"💢 {ex.Message}"); | ||||
|                            } | ||||
|                        }); | ||||
| @@ -134,8 +127,7 @@ namespace NadekoBot.Modules { | ||||
|                           return; | ||||
|                       } | ||||
|                       await e.Channel.SendIsTyping(); | ||||
|                       var headers = new WebHeaderCollection(); | ||||
|                       headers.Add("X-Mashape-Key", NadekoBot.creds.MashapeKey); | ||||
|                       var headers = new WebHeaderCollection {{"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); | ||||
| @@ -155,11 +147,8 @@ namespace NadekoBot.Modules { | ||||
|                           if (items.Count > 4) { | ||||
|                               await e.Channel.SendMessage("⚠ Found over 4 images. Showing random 4."); | ||||
|                           } | ||||
|                           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.Channel.SendMessage($"💢 Error {ex.Message}"); | ||||
|                       } | ||||
|                   }); | ||||
| @@ -180,11 +169,9 @@ namespace NadekoBot.Modules { | ||||
|                                   try { | ||||
|                                       await e.Channel.SendFile($"{e.GetArg("usr")}.png", new MemoryStream(cle.Result)); | ||||
|                                       await e.Channel.SendMessage($"`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 :\\"); | ||||
|                           } | ||||
|                       } | ||||
| @@ -201,7 +188,7 @@ namespace NadekoBot.Modules { | ||||
|                       } | ||||
|                       await e.Channel.SendIsTyping(); | ||||
|                       var headers = new WebHeaderCollection(); | ||||
|                       headers.Add("X-Mashape-Key", NadekoBot.creds.MashapeKey); | ||||
|                       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); | ||||
| @@ -210,8 +197,7 @@ namespace NadekoBot.Modules { | ||||
|                           sb.AppendLine($"`Definition:` {items["list"][0]["definition"].ToString()}"); | ||||
|                           sb.Append($"`Link:` <{await items["list"][0]["permalink"].ToString().ShortenUrl()}>"); | ||||
|                           await e.Channel.SendMessage(sb.ToString()); | ||||
|                       } | ||||
|                       catch { | ||||
|                       } catch { | ||||
|                           await e.Channel.SendMessage("💢 Failed finding a definition for that term."); | ||||
|                       } | ||||
|                   }); | ||||
| @@ -227,7 +213,7 @@ namespace NadekoBot.Modules { | ||||
|                       } | ||||
|                       await e.Channel.SendIsTyping(); | ||||
|                       var headers = new WebHeaderCollection(); | ||||
|                       headers.Add("X-Mashape-Key", NadekoBot.creds.MashapeKey); | ||||
|                       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); | ||||
| @@ -236,8 +222,7 @@ namespace NadekoBot.Modules { | ||||
|                           sb.AppendLine($"`Definition:` {items["defs"]["def"]["text"].ToString()}"); | ||||
|                           sb.Append($"`Link:` <{await items["defs"]["def"]["uri"].ToString().ShortenUrl()}>"); | ||||
|                           await e.Channel.SendMessage(sb.ToString()); | ||||
|                       } | ||||
|                       catch { | ||||
|                       } catch { | ||||
|                           await e.Channel.SendMessage("💢 Failed finidng a definition for that tag."); | ||||
|                       } | ||||
|                   }); | ||||
|   | ||||
| @@ -8,7 +8,7 @@ using System.Timers; | ||||
| using NadekoBot.Extensions; | ||||
|  | ||||
| namespace NadekoBot.Modules { | ||||
|     class Trello : DiscordModule { | ||||
|     internal class Trello : DiscordModule { | ||||
|         public override void Install(ModuleManager manager) { | ||||
|  | ||||
|             var client = manager.Client; | ||||
|   | ||||
| @@ -21,7 +21,7 @@ namespace NadekoBot { | ||||
|  | ||||
|         private static Channel OwnerPrivateChannel { get; set; } | ||||
|  | ||||
|         static void Main() { | ||||
|         private static void Main() { | ||||
|             try { | ||||
|                 //load credentials from credentials.json | ||||
|                 Creds = JsonConvert.DeserializeObject<Credentials>(File.ReadAllText("credentials.json")); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user