public function generateAnswer($userMessage, $userName = '', $dateTime = 0) { $request = new TchatMessage($userMessage, $userName, $dateTime); if (!$this->positrons->isBotTriggered($request)) { return null; } $request = $this->positrons->analyseRequest($request); $memory = $this->positrons->loadMemory($request); $answer = $this->positrons->generateSymbolicAnswer($request, $memory); $answer = $this->positrons->provideMeaning($request, $memory, $answer); $answer = $this->positrons->beautifyAnswer($request, $memory, $answer); if (null == $answer || '' == $answer->getMessage() && '' == $answer->getName()) { $answer = new TchatMessage('Ssqdijoezf ? Jkfd.', 'QTzbn'); } return $answer->toArray(); }
public function isBotTriggered(TchatMessage $request, $currentAnswer = true) { $content = $request->getMessage(); $triggered = NULL != $content; $identity = $this->knowledges->identity; // Triggered by specific rules if (isset($identity->trigger) && !empty($identity->trigger)) { // Called by his name if (!empty($identity->trigger->called)) { $triggered &= preg_match('!(?:^|\\s|[_-])(' . implode('|', $identity->trigger->called) . ')(?:$|\\s|[\'_-])!i', $content); } // Specific sentance if (!empty($identity->trigger->sentance)) { $triggered &= preg_match('!(' . implode('|', $identity->trigger->sentance) . ')!i', $content); } } return $triggered; }
public function analyseRequest(TchatMessage $request, AnalysedRequest $currentAnalysedRequest = null) { if (empty($this->selectedPositrons)) { return new AnalysedRequest($request->getMessage(), $request->getName(), $request->getDate(), $request); } foreach ($this->selectedPositrons as $positron) { $currentAnalysedRequest = $positron->analyseRequest($request, $currentAnalysedRequest); } if (null == $currentAnalysedRequest) { $currentAnalysedRequest = new AnalysedRequest($request->getMessage(), $request->getName(), $request->getDate(), $request); } return $currentAnalysedRequest; }