public static void ExecuteAction(string action, string line, string parameter, string assistantParam)
        {
            int?actionNumber = null;

            Actions actionExecution = new Actions();

            switch (action.ToLower())
            {
            case "shutdown":
                //Shuts down the computer
                actionExecution.Shutdown(parameter);
                break;

            case "restart":
                //Restart the computer
                actionExecution.Restart(parameter);
                break;

            case "sleep":
                //Puts computer to sleep
                actionExecution.Sleep(parameter);
                break;

            case "hibernate":
                //Hibernates computer
                actionNumber = 12;
                actionExecution.Hibernate(parameter);
                break;

            case "logout":
                //Logs out of the current user
                actionExecution.Logout(parameter);
                break;

            case "lock":
                //Lock computer
                actionExecution.Lock(parameter);
                break;

            case "mute":
                //Mutes windows
                //Parameter optional (true/false)
                actionExecution.Mute(parameter);
                break;

            case "set_volume":
                //Sets volume to a specific percent
                //Requires parameter (percent, int)
                if (RequireParameter(parameter))
                {
                    actionExecution.SetVolume(parameter);
                }
                break;

            case "music":
                if (RequireParameter(parameter))
                {
                    switch (parameter)
                    {
                    case "previous":
                    case "previousx2":
                        actionNumber = 8;
                        break;

                    case "next":
                        actionNumber = 10;
                        break;

                    case "play_pause":
                        actionNumber = 9;
                        break;
                    }
                    actionExecution.Music(parameter);
                }
                break;

            case "open":
                if (RequireParameter(parameter))
                {
                    actionExecution.Open(parameter);
                }
                break;

            case "open_all":
                if (RequireParameter(parameter))
                {
                    actionExecution.OpenAll(parameter);
                }
                break;

            case "die":
                //Exit ACC
                actionExecution.Die(parameter);
                break;

            case "monitors_off":
                actionExecution.MonitorsOff(parameter);
                break;

            /*case "keypress":
             *  if (RequireParameter(parameter)) {
             *      if (parameter.Length > 1) {
             *          if (!MainProgram.testingAction) {
             *              successMessage = "Pressed \"" + parameter + "\"";
             *              PressKey((char)parameter[0]);
             *          } else {
             *              successMessage = "Simulated press of \"" + parameter + "\"";
             *          }
             *      } else {
             *          MainProgram.DoDebug("ERROR: Parameter can only be one character long");
             *          MainProgram.errorMessage = "(Keypress) Parameter can only be one character long";
             *      }
             *  }
             *  break;*/
            case "write_out":
                if (RequireParameter(parameter))
                {
                    actionExecution.WriteOut(parameter, line);
                }
                break;

            /*case "key_shortcut": //TODO - version 1.3(?)
             *  //Currently just keeps holding CTRL down, f*****g everything up
             *  //Do "testing" check
             *  if (RequireParameter(parameter)) {
             *      parameter = parameter.Replace("ctrl", "%");
             *
             *      /*foreach (char c in parameter) {
             *          if (c == '%') {
             *              keybd_event(VK_RCONTROL, 0, KEYEVENTF_EXTENTEDKEY, 0);
             *              keybd_event(VK_RCONTROL, 0, KEYEVENTF_KEYUP, 0);
             *          } else {
             *              PressKey(c);
             *          }
             *      }*/
            /*}
             * PressKeys();
             * break;*/
            case "create_file":
                if (RequireParameter(parameter))
                {
                    actionExecution.CreateFile(parameter);
                }
                break;

            case "delete_file":
                if (RequireParameter(parameter))
                {
                    actionExecution.DeleteFile(parameter);
                }
                break;

            case "append_text":
                if (RequireParameter(parameter))
                {
                    actionExecution.AppendText(parameter);
                }
                break;

            case "message_box":
                if (RequireParameter(parameter))
                {
                    actionExecution.DoMessageBox(parameter);
                }
                break;

            default:
                //Unknown action
                MainProgram.DoDebug("ERROR: Unknown action \"" + action + "\"");
                MainProgram.errorMessage = "Unknown action \"" + action + "\"";
                break;
            }

            successMessage = actionExecution.successMessage;

            lastActionWasFatal       = actionExecution.wasFatal;
            actionExecution.wasFatal = false;

            if (successMessage != "")
            {
                if (actionNumber != null)
                {
                    //Has specified number
                    MainProgram.AnalyticsAddCount(null, (int)actionNumber, assistantParam);
                }
                else
                {
                    //YOLO
                    MainProgram.AnalyticsAddCount(action, null, assistantParam);
                }

                MainProgram.DoDebug("\nSUCCESS: " + successMessage + "\n");
            }

            if (MainProgram.testingAction)
            {
                MainProgram.testActionWindow.ActionExecuted(successMessage, MainProgram.errorMessage, action, parameter, line);
            }
            successMessage = "";
        }