예제 #1
0
 /**
  * Find all handlers that are available for the current SlashCommand
  * and have a signature.
  *
  * @return Collection|SignatureHandler[]
  */
 protected function findAvailableHandlers() : Collection
 {
     return collect(config('laravel-slack-slash-command.handlers'))->map(function (string $handlerClassName) {
         return new $handlerClassName($this->request);
     })->filter(function (HandlesSlashCommand $handler) {
         return $handler instanceof SignatureHandler;
     })->filter(function (SignatureHandler $handler) {
         $signatureParts = new SignatureParts($handler->getSignature());
         return Str::is($signatureParts->getSlashCommandName(), $this->request->command);
     });
 }
 protected function findAlternativeHandlers(string $command) : Collection
 {
     $alternativeHandlers = collect(config('laravel-slack-slash-command.handlers'))->map(function (string $handlerClassName) {
         return new $handlerClassName($this->request);
     })->filter(function (HandlesSlashCommand $handler) {
         return $handler instanceof SignatureHandler;
     })->filter(function (SignatureHandler $handler) {
         $signatureParts = new SignatureParts($handler->getSignature());
         return Str::is($signatureParts->getSlashCommandName(), $this->request->command);
     });
     if (strpos($command, ':') !== false) {
         $subHandlers = $this->findInNamespace($alternativeHandlers, $command);
         if ($subHandlers->count()) {
             return $subHandlers;
         }
     }
     return $alternativeHandlers->filter(function (SignatureHandler $handler) use($command) {
         return levenshtein($handler->getName(), $command) <= 2;
     });
 }
 protected function bindSignature()
 {
     $signatureParts = new SignatureParts($this->signature);
     $signature = $signatureParts->getSignatureWithoutCommandName();
     list($name, $arguments, $options) = Parser::parse($signature);
     $this->name = $name;
     $inputDefinition = new InputDefinition();
     foreach ($arguments as $argument) {
         $inputDefinition->addArgument($argument);
     }
     foreach ($options as $option) {
         $inputDefinition->addOption($option);
     }
     $inputWithoutHandlerName = explode(' ', $this->request->text, 2)[1] ?? '';
     $this->input = new StringInput($inputWithoutHandlerName);
     $this->inputDefinition = $inputDefinition;
     try {
         $this->input->bind($inputDefinition);
     } catch (RuntimeException $exception) {
         return false;
     }
     return true;
 }