From: Daniel Karbach Date: Sat, 3 Jan 2026 17:33:20 +0000 (+0100) Subject: beer league s3 X-Git-Url: https://git.localhorst.tv/?a=commitdiff_plain;h=2fb1ee37741a7ee9107d63a38c9e45234addb82a;p=alttp.git beer league s3 --- diff --git a/app/Console/Commands/SyncBeerLeague.php b/app/Console/Commands/SyncBeerLeague.php index f031ac2..a88f442 100644 --- a/app/Console/Commands/SyncBeerLeague.php +++ b/app/Console/Commands/SyncBeerLeague.php @@ -44,15 +44,26 @@ class SyncBeerLeague extends Command { return Command::SUCCESS; } - $schedule = Http::get('https://sheets.googleapis.com/v4/spreadsheets/1LMW5cq35rlPTXIfKQ7bkpMm0vTwG2sj7SqEKrzMy-cw/values/MATCH%20SUBMISSION', [ - 'alt' => 'json', - 'key' => config('google.api_key'), - ])->json(); + $html = Http::get('https://docs.google.com/spreadsheets/d/e/2PACX-1vQoetX31OD-O1FGP7x0hfWjxQpwx7W_a2OWhi3hb4B1whPHe_Z0KmsnyLFbL2bVZs4cWN6WLXJcSQPt/pubhtml/sheet?headers=false&gid=1221273995')->body(); + $dom = new \DOMDocument(); + $dom->loadHTML($html); + $rows = $dom->getElementsByTagName('tr'); + $schedule = []; + foreach ($rows as $row) { + $cells = $row->getElementsByTagName('td'); + $entry = []; + foreach ($cells as $cell) { + $entry[] = $cell->textContent; + } + if (!empty($entry)) { + $schedule[] = $entry; + } + } foreach ($events as $event) { try { $this->line('syncing '.$event->name); - $this->syncEvent($event, $schedule['values']); + $this->syncEvent($event, $schedule); } catch (\Exception $e) { $this->error('error syncing event '.$event->name.': '.$e->getMessage()); } @@ -62,13 +73,13 @@ class SyncBeerLeague extends Command { } private function syncEvent(Event $event, $schedule): void { - for ($i = 5; $i < count($schedule); ++$i) { + for ($i = 1; $i < count($schedule); ++$i) { $this->syncSchedule($event, $schedule[$i]); } } private function syncSchedule(Event $event, $row): void { - $ext_id = 'beer:'.$event->id.':'.$row[0]; + $ext_id = 'beer:'.$event->id.':'.$row[0].$row[1].$row[4].$row[5].$row[6]; $episode = Episode::query()->firstWhere('ext_id', '=', $ext_id); if (!$episode) { $episode = new Episode(); @@ -76,14 +87,65 @@ class SyncBeerLeague extends Command { $episode->confirmed = true; } $episode->event()->associate($event); - $episode->title = $row[2].' vs '.$row[3]; - $episode->comment = $row[1]; - $start = Carbon::createFromFormat('m/d/Y h:i:s A', $row[4].' '.$row[5], 'America/Detroit')->setTimezone('UTC'); + $episode->title = $row[0].' vs '.$row[1]; + $episode->comment = $row[4].' - '.$row[7]; + $start = Carbon::createFromFormat('m/d/Y h:i A \E\S\T', $row[5].' '.$row[6], 'America/Detroit')->setTimezone('UTC'); if (!$episode->start || $start->ne($episode->start)) { $episode->start = $start; } - $episode->estimate = 90 * 60; + $episode->estimate = 120 * 60; $episode->save(); + + $players_a = explode(' ', $row[2]); + $players_b = explode(' ', $row[3]); + for ($i = 0; $i < count($players_a); ++$i) { + $this->syncPlayer($episode, $players_a[$i]); + $this->syncPlayer($episode, $players_b[$i]); + } + } + + private function syncPlayer(Episode $episode, string $codename): EpisodePlayer|null { + if (empty($codename)) { + return null; + } + $lower_name = substr(strtolower($codename), 1); + $ext_id = 'beer:'.$lower_name; + $player = $episode->players()->firstWhere('ext_id', '=', $ext_id); + if (!$player) { + $player = new EpisodePlayer(); + $player->ext_id = $ext_id; + $player->episode()->associate($episode); + } + $user = $this->getUser($lower_name); + if ($user) { + $player->name_override = ''; + $player->user()->associate($user); + } else { + $player->name_override = substr($codename, 1); + $player->user()->disassociate(); + } + $player->save(); + return $player; + } + + private function getUser(string $codename): User|null { + $user = User::query()->firstWhere('username', 'LIKE', $codename); + if ($user) { + return $user; + } + $user = User::query()->firstWhere('global_name', 'LIKE', $codename); + if ($user) { + return $user; + } + $user = User::query()->firstWhere('discord_nickname', 'LIKE', $codename); + if ($user) { + return $user; + } + $user = User::query()->firstWhere('stream_link', 'LIKE', '%/'.$codename); + if ($user) { + return $user; + } + return null; } }