コード例 #1
0
        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));
        }
コード例 #2
0
        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.");
            }
        }