status = 'executing'; $this->executed_at = now(); $this->save(); try { switch ($this->command) { case 'presence': $this->executePresence($discord); break; default: throw new Exception('unrecognized command'); } $this->status = 'done'; $this->save(); } catch (\Exception $e) { $this->status = 'exception'; $this->result = [ 'type' => get_class($e), 'message' => $e->getMessage(), ]; $this->save(); } } protected function executePresence(Discord $discord) { $activity = null; $idle = false; $status = 'online'; $afk = false; if (isset($this->parameters['activity'])) { $activity = new Activity($discord); $activity->type = $this->parameters['activity']; if (isset($this->parameters['name'])) { $activity->name = $this->parameters['name']; } if (isset($this->parameters['url'])) { $activity->url = $this->parameters['url']; } } if (isset($this->parameters['idle'])) { $idle = $this->parameters['idle']; } if (isset($this->parameters['status'])) { $status = $this->parameters['status']; } if (isset($this->parameters['afk'])) { $afk = $this->parameters['afk']; } $discord->updatePresence($activity, $idle, $status, $afk); } protected $casts = [ 'parameters' => 'array', 'result' => 'array', 'executed_at' => 'datetime', ]; }