public function __construct($state, $data)
 {
     $this->invoiceRepo = app('App\\Ninja\\Repositories\\InvoiceRepository');
     parent::__construct($state, $data);
 }
 public function handleMessage($platform)
 {
     $input = Input::all();
     $botUserId = $input['from']['id'];
     if (!($token = $this->authenticate($input))) {
         return SkypeResponse::message(trans('texts.not_authorized'));
     }
     try {
         if ($input['type'] === 'contactRelationUpdate') {
             // brand new user, ask for their email
             if ($input['action'] === 'add') {
                 $response = SkypeResponse::message(trans('texts.bot_get_email'));
                 $state = BOT_STATE_GET_EMAIL;
             } elseif ($input['action'] === 'remove') {
                 $this->removeBot($botUserId);
                 $this->saveState($token, false);
                 return RESULT_SUCCESS;
             }
         } else {
             $state = $this->loadState($token);
             $text = strip_tags($input['text']);
             // user gaves us their email
             if ($state === BOT_STATE_GET_EMAIL) {
                 if ($this->validateEmail($text, $botUserId)) {
                     $response = SkypeResponse::message(trans('texts.bot_get_code'));
                     $state = BOT_STATE_GET_CODE;
                 } else {
                     $response = SkypeResponse::message(trans('texts.email_not_found', ['email' => $text]));
                 }
                 // user sent the scurity code
             } elseif ($state === BOT_STATE_GET_CODE) {
                 if ($this->validateCode($text, $botUserId)) {
                     $response = SkypeResponse::message(trans('texts.bot_welcome') . trans('texts.bot_help_message'));
                     $state = BOT_STATE_READY;
                 } else {
                     $response = SkypeResponse::message(trans('texts.invalid_code'));
                 }
                 // regular chat message
             } else {
                 if ($text === 'help') {
                     $response = SkypeResponse::message(trans('texts.bot_help_message'));
                 } elseif ($text == 'status') {
                     $response = SkypeResponse::message(trans('texts.intent_not_supported'));
                 } else {
                     if (!($user = User::whereBotUserId($botUserId)->with('account')->first())) {
                         return SkypeResponse::message(trans('texts.not_authorized'));
                     }
                     Auth::onceUsingId($user->id);
                     $user->account->loadLocalizationSettings();
                     $data = $this->parseMessage($text);
                     $intent = BaseIntent::createIntent($state, $data);
                     $response = $intent->process();
                     $state = $intent->getState();
                 }
             }
         }
         $this->saveState($token, $state);
     } catch (Exception $exception) {
         $response = SkypeResponse::message($exception->getMessage());
     }
     $this->sendResponse($token, $botUserId, $response);
     return RESULT_SUCCESS;
 }