products()->detach(); }); } public static function syncEggs() { Nest::syncNests(); Nest::all()->each(function (Nest $nest) { $eggs = Pterodactyl::getEggs($nest); foreach ($eggs as $egg) { $array = []; $environment = []; $array['id'] = $egg['attributes']['id']; $array['nest_id'] = $egg['attributes']['nest']; $array['name'] = $egg['attributes']['name']; $array['description'] = $egg['attributes']['description']; $array['docker_image'] = $egg['attributes']['docker_image']; $array['startup'] = $egg['attributes']['startup']; $array['updated_at'] = now(); //get environment variables foreach ($egg['attributes']['relationships']['variables']['data'] as $variable) { $environment[$variable['attributes']['env_variable']] = $variable['attributes']['default_value']; } $array['environment'] = json_encode([$environment]); self::query()->updateOrCreate([ 'id' => $array['id'], ], array_diff_key($array, array_flip(['id'])) ); } self::removeDeletedEggs($nest, $eggs); }); } /** * @description remove eggs that have been deleted on pterodactyl * * @param Nest $nest * @param array $eggs */ private static function removeDeletedEggs(Nest $nest, array $eggs): void { $ids = array_map(function ($data) { return $data['attributes']['id']; }, $eggs); $nest->eggs()->each(function (Egg $egg) use ($ids) { if (! in_array($egg->id, $ids)) { $egg->delete(); } }); } /** * @return array */ public function getEnvironmentVariables() { $array = []; foreach (json_decode($this->environment) as $variable) { foreach ($variable as $key => $value) { $array[$key] = $value; } } return $array; } /** * @return BelongsTo */ public function nest() { return $this->belongsTo(Nest::class); } /** * @return BelongsToMany */ public function products() { return $this->belongsToMany(Product::class); } }