tournament_id = $result->round->tournament_id; $cmd->command = 'result'; $cmd->parameters = [ 'round' => $result->round_id, 'user' => $result->user_id, ]; $cmd->status = 'pending'; $cmd->save(); } public static function syncUser($user_id) { $cmd = new DiscordBotCommand(); $cmd->command = 'sync-user'; $cmd->parameters = [ 'user' => $user_id, ]; $cmd->status = 'pending'; $cmd->save(); } public function tournament() { return $this->belongsTo(Tournament::class); } public function user() { return $this->belongsTo(User::class); } public function execute(Discord $discord) { $this->setExecuting(); try { BaseCommand::resolve($discord, $this) ->execute() ->otherwise(function (\Throwable $e) { $this->setException($e); }) ->done(function($v = null) { $this->setDone(); }); } catch (\Exception $e) { $this->setException($e); } } private function setDone() { $this->status = 'done'; $this->save(); } private function setExecuting() { $this->status = 'executing'; $this->executed_at = now(); $this->save(); } private function setException(\Throwable $e) { $this->status = 'exception'; $this->result = [ 'type' => get_class($e), 'file' => $e->getFile(), 'line' => $e->getLine(), 'message' => $e->getMessage(), ]; $this->save(); } protected $casts = [ 'parameters' => 'array', 'result' => 'array', 'executed_at' => 'datetime', ]; }