/** * 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; }); }
public function canHandle(Request $request) : bool { if (!$this->signatureIsBound) { return false; } $signatureParts = new SignatureParts($this->signature); if (!Str::is($signatureParts->getSlashCommandName(), $request->command)) { return false; } if (explode(' ', $request->text)[0] != $signatureParts->getHandlerName()) { return false; } return true; }