Slack API Laravel с использованием ошибок форматирования пакета команд spatie / laravel-slack-slash-command

Я использую посылку spatie / Laravel-отвисшей слэш-команда и приведенный ниже код работает нормально, за исключением этого условия, если пользователь не вводит аргумент, возникает ошибка, потому что в пакете есть класс Exceptions \ InvalidInput.php, я просто хотел бы знать, как отформатировать эту ошибку или как переопределить метод getResponse (), который выводит вот так, спасибо!

InvalidInput.php

public function getResponse(Request $request): Response
{
return parent::getResponse($request)
->withAttachment(
Attachment::create()
->setText($this->handler->getHelpDescription())
);
}

ошибка

Вот как я хотел бы отформатировать ошибку

 if (empty($slack_request))
{
return $this->respondToSlack("Argument Missing")
->withAttachment(Attachment::create()
->setColor('warning')
->setText("You must provide two digits between 00 and 13 after ex : /tasks day {00}")
);
}

Вот мой класс

<?php

namespace App\SlashCommandHandlers;

use Spatie\SlashCommand\Attachment;
use Spatie\SlashCommand\AttachmentField;
use Spatie\SlashCommand\Handlers\SignatureHandler;
use Spatie\SlashCommand\Request;
use Spatie\SlashCommand\Response;
use App\Models\Retry42\Project;

class Projects extends SignatureHandler
{
protected $signature = 'tasks day {day}';

public function handle(Request $request): Response
{

$slack_request = $this->getArgument('day');

if (empty($slack_request))
{
return $this->respondToSlack("Argument Missing")
->withAttachment(Attachment::create()
->setColor('warning')
->setText("You must provide two digits between 00 and 13 after ex : /tasks day {00}")
);
}

if(!preg_match("/^(0[0-9]|1[0-3])$/", $slack_request))
{
return $this->respondToSlack("Invalid argument, two digits between 00 and 13")
->withAttachment(Attachment::create()
->setColor('warning')
->setText("Project day must be two digits between 00 and 13")
);
}

$day =  $slack_request;

$project = 'Day '.$day;

$project = Project::where('name', '=', $project)->firstOrFail();

$tasks = $project->tasks->toArray();

if (!count($tasks)) {
return $this->respondToSlack("Sorry we could not get you any tasks for Day {$day}")
->withAttachment(Attachment::create()
->setColor('warning')
->setText("Try another day!")
);
}

$attachmentFields = collect($tasks)->reduce(function (array $attachmentFields, array $task) {
$value = $task['description'] ?? '';

if($task['visible'] == 1)
{
$attachmentFields[] = AttachmentField::create('Name', $task['name'])->displaySideBySide();
$attachmentFields[] = AttachmentField::create('Description', $value)->displaySideBySide();
}

return $attachmentFields;
}, []);

return $this->respondToSlack("Here are the tasks for Day {$day}")
->withAttachment(Attachment::create()
->setColor('good')
->setFields($attachmentFields)
);
}
}

Я пытался, как предложил редактировать SignatureHandler.php от $ foo до этого

public function getArgument($foo = null)
{
if($foo == null) return [];
return $this->input->getArgument($foo);
}

а затем пытается проверить, если пусто, но это тоже не сработало

 if (empty($slack_request))
{
return $this->respondToSlack("Argument Missing")
->withAttachment(Attachment::create()
->setColor('warning')
->setText("You must provide two digits between 00 and 13 after ex : /tasks day {00}")
);
}

Извините, я забыл сказать вам привет!

1

Решение

где возникает ошибка? когда вы не передаете ‘day’ в функцию getArgument ()?

1

Другие решения

Можете ли вы создать черту, затем включить и использовать эту черту для переопределения метода? Таким образом, пакет будет по-прежнему обновляться, и ваша черта приобретет функциональность, которую вы хотите использовать.

1

Нашел, как получить ожидаемый результат, изменив метод validate () в SignatureHandler.php комментирующая исключительная ситуация, возвращающая вместо пустого массива и проверяющая, работает ли пусто теперь в методе handle Спасибо за помощь. Хотя это не лучший способ сделать это, это самый быстрый способ выполнить то, что я хотел для этого.

 public function validate()
{
try {
$this->input->validate();
} catch (RuntimeException $exception) {
//throw new InvalidInput($exception->getMessage(), $this, $exception);
return [];
}
}

Форматированный вывод

0
По вопросам рекламы [email protected]