private async Task ProcessCommandInput(SocketMessage message, string command) { string[] parts = Regex.Split(command, "(?<=^[^\"]*(?:\"[^\"]*\"[^\"]*)*) (?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"); ////string[] parts = command.Split(" ", StringSplitOptions.RemoveEmptyEntries); command = parts[0]; List <string> args = new List <string>(); if (parts.Length > 1) { for (int i = 1; i < parts.Length; i++) { string arg = parts[i]; ////arg = arg.Replace("\"", string.Empty); if (string.IsNullOrEmpty(arg)) { continue; } arg = arg.Replace("\\n", "\n"); args.Add(arg); } } command = command.ToLower(); CommandMessage cmdMessage = new CommandMessage(command, message); if (args.Count == 1 && args[0] == "?") { Embed embed = await HelpService.GetHelp(cmdMessage); await message.Channel.SendMessageAsync(null, false, embed); return; } Log.Write("Received command: " + command + " with " + message.Content + " From user: "******"Bot"); _ = Task.Run(async() => await this.RunCommand(command, args.ToArray(), cmdMessage)); }
private async Task RunCommand(string commandStr, string[] args, CommandMessage message) { if (Program.Initializing) { IUserMessage waitMessage = await message.Channel.SendMessageAsync("Just drinking my morning coffee... Give me a minute..."); while (Program.Initializing) { await Task.Delay(1000); } await waitMessage.DeleteAsync(); } if (commandHandlers.ContainsKey(commandStr)) { SocketTextChannel?textChannel = message.Channel as SocketTextChannel; if (textChannel == null) { return; } using (textChannel.EnterTypingState()) { Exception?lastException = null; foreach (Command command in commandHandlers[commandStr]) { try { lastException = null; await command.Invoke(args, message); break; } catch (ParameterException ex) { lastException = ex; } catch (Exception ex) { lastException = ex; break; } } if (lastException != null) { if (lastException is UserException userEx) { await message.Channel.SendMessageAsync(userEx.Message); } else if (lastException is ParameterException paramEx) { await message.Channel.SendMessageAsync(paramEx.Message); await message.Channel.SendMessageAsync(null, false, await HelpService.GetHelp(message, commandStr)); } else if (lastException is NotImplementedException) { await message.Channel.SendMessageAsync("I'm sorry, seems like I don't quite know how to do that yet."); } else if (lastException is WebException webEx) { HttpStatusCode?status = (webEx.Response as HttpWebResponse)?.StatusCode; if (status == null || status != HttpStatusCode.ServiceUnavailable) { Log.Write(lastException); await message.Channel.SendMessageAsync("I'm sorry, something went wrong while handling that."); } else { await message.Channel.SendMessageAsync("I'm sorry, the service is unavailable right now."); } } else { Log.Write(lastException); await message.Channel.SendMessageAsync("I'm sorry, something went wrong while handling that."); } } } } else { await message.Channel.SendMessageAsync("I'm sorry, I didn't understand that command."); } }