/// <summary> /// Runs the logic for the chatbot action and records the start and stop of the action. /// </summary> /// <param name="action"></param> /// <param name="incomingChatMessage"></param> /// <param name="chatRoom"></param> private void RunChatbotAction(ChatbotAction action, Message incomingChatMessage, Room chatRoom) { // Record as started. var id = RunningChatbotActionsManager.MarkChatbotActionAsStarted( action.ActionName, incomingChatMessage.Author.Name, incomingChatMessage.Author.ID); try { action.RunAction(incomingChatMessage, chatRoom); // If the command was "stop bot", need to trigger a program shutdown. if (action is StopBot) { if (StopBotCommandIssued != null) { StopBotCommandIssued(this, new EventArgs()); } } } catch (Exception ex) { // ChatMessageProcessor is responsible for outputting any errors that occur // while running chatbot actions. Anything outside of the RunAction() method // should be handled higher up. TellChatAboutErrorWhileRunningAction(ex, chatRoom, action); } // Mark as finished. RunningChatbotActionsManager.MarkChatbotActionAsFinished(id); }