/** * 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; }