51 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| declare(strict_types=1);
 | |
| 
 | |
| namespace Toby\Domain\Slack\Handlers;
 | |
| 
 | |
| use Illuminate\Support\Collection;
 | |
| use Spatie\SlashCommand\Attachment;
 | |
| use Spatie\SlashCommand\AttachmentField;
 | |
| use Spatie\SlashCommand\Handlers\CatchAll as BaseCatchAllHandler;
 | |
| use Spatie\SlashCommand\Handlers\SignatureHandler;
 | |
| use Spatie\SlashCommand\Request;
 | |
| use Spatie\SlashCommand\Response;
 | |
| 
 | |
| class CatchAll extends BaseCatchAllHandler
 | |
| {
 | |
|     public function handle(Request $request): Response
 | |
|     {
 | |
|         $response = $this->respondToSlack("Nie rozpoznaję tej komendy: `/{$request->command} {$request->text}`");
 | |
| 
 | |
|         [$command] = explode(' ', $this->request->text ?? "");
 | |
| 
 | |
|         $alternativeHandlers = $this->findAlternativeHandlers($command);
 | |
| 
 | |
|         if ($alternativeHandlers->count()) {
 | |
|             $response->withAttachment($this->getCommandListAttachment($alternativeHandlers));
 | |
|         }
 | |
| 
 | |
|         if ($this->containsHelpHandler($alternativeHandlers)) {
 | |
|             $response->withAttachment(Attachment::create()
 | |
|                 ->setText("Aby wyświetlić wszystkie komendy, napisz: `/toby pomoc`")
 | |
|             );
 | |
|         }
 | |
| 
 | |
|         return $response;
 | |
|     }
 | |
| 
 | |
|     protected function getCommandListAttachment(Collection $handlers): Attachment
 | |
|     {
 | |
|         $attachmentFields = $handlers
 | |
|             ->map(function (SignatureHandler $handler) {
 | |
|                 return AttachmentField::create($handler->getFullCommand(), $handler->getDescription());
 | |
|             })
 | |
|             ->all();
 | |
| 
 | |
|         return Attachment::create()
 | |
|             ->setColor('warning')
 | |
|             ->setTitle('Czy miałeś na myśli:')
 | |
|             ->setFields($attachmentFields);
 | |
|     }
 | |
| } |