5 use App\DiscordBotCommands\BaseCommand;
7 use Discord\Parts\Channel\Channel;
8 use Discord\Parts\Guild\Guild;
9 use Illuminate\Database\Eloquent\Factories\HasFactory;
10 use Illuminate\Database\Eloquent\Model;
12 class DiscordBotCommand extends Model
16 public static function queueResult(Result $result) {
17 $cmd = new DiscordBotCommand();
18 $cmd->tournament_id = $result->round->tournament_id;
19 $cmd->command = 'result';
21 'round' => $result->round_id,
22 'user' => $result->user_id,
24 $cmd->status = 'pending';
28 public function tournament() {
29 return $this->belongsTo(Tournament::class);
32 public function user() {
33 return $this->belongsTo(User::class);
36 public function execute(Discord $discord) {
37 $this->setExecuting();
40 BaseCommand::resolve($discord, $this)
42 ->otherwise(function (\Throwable $e) {
43 $this->setException($e);
45 ->done(function($v = null) {
48 } catch (\Exception $e) {
49 $this->setException($e);
54 private function setDone() {
55 $this->status = 'done';
59 private function setExecuting() {
60 $this->status = 'executing';
61 $this->executed_at = now();
65 private function setException(\Throwable $e) {
66 $this->status = 'exception';
68 'type' => get_class($e),
69 'file' => $e->getFile(),
70 'line' => $e->getLine(),
71 'message' => $e->getMessage(),
78 'parameters' => 'array',
80 'executed_at' => 'datetime',