conn = new MySQLConnection(); $this->readAccounts(); $this->readEntries(); } private function readAccounts(): void { $accounts = []; $sql = $this->conn->query("SELECT * FROM `accounts`"); while ($row = $sql->fetch_assoc()) { $account = new Account(); $account->puuid = $row["puuid"]; $account->gameName = $row["gameName"]; $account->tagLine = $row["tagLine"]; $accounts[$account->puuid] = $account; } $this->accounts = $accounts; } private function readEntries(): void { $sql = $this->conn->query(" SELECT accounts.puuid AS puuid, date, tier, `rank`, points FROM accounts LEFT JOIN elo_entries ON id = accountId ORDER BY accounts.puuid, date "); $result = []; while ($row = $sql->fetch_assoc()) { $puuid = $row["puuid"]; $date = $row["date"]; if (!isset($result[$puuid])) $result[$puuid] = []; if (!$date) continue; $elo = new Elo(); $elo->tier = $row["tier"]; $elo->rank = $row["rank"]; $elo->points = $row["points"]; $result[$puuid][$date] = $elo; } $this->entries = $result; } public function update(): void { foreach ($this->accounts as $puuid => $account) { $account->updateRiotID(); $account->addNewEloEntry($this->entries[$puuid]); } } } class Account { public string $puuid; public string $gameName; public string $tagLine; /** * @param Elo[] $eloEntries */ public function addNewEloEntry(array &$eloEntries): void { $summonerId = (new RiotRequest("lol/summoner/v4/summoners/by-puuid/$this->puuid"))->run()->id; $fetchedLeagues = (new RiotRequest("lol/league/v4/entries/by-summoner/$summonerId"))->run(); $currentElo = end($eloEntries); foreach ($fetchedLeagues as $fetchedElo) { if ($fetchedElo->queueType === "RANKED_SOLO_5x5" && ($fetchedElo->wins + $fetchedElo->losses >= 5)) { if (!$currentElo || $currentElo->tier !== $fetchedElo->tier || $currentElo->rank !== $fetchedElo->rank || $currentElo->points !== $fetchedElo->leaguePoints){ $currentElo = new Elo(); $currentElo->tier = $fetchedElo->tier; $currentElo->rank = $fetchedElo->rank; $currentElo->points = $fetchedElo->leaguePoints; $date = (new DateTime("now"))->format("Y-m-d H:i:s"); $eloEntries[$date] = $currentElo; $conn = new MySQLConnection(); $sqlAccountId = $conn->query(" SELECT id FROM `accounts` WHERE puuid = '$this->puuid' ")->fetch_assoc()["id"]; $conn->prepare(" INSERT INTO `elo_entries` (accountId, date, tier, `rank`, points) VALUES (?, ?, ?, ?, ?) ")->execute([ $sqlAccountId, $date, $currentElo->tier, $currentElo->rank, $currentElo->points ]); } } } } public function updateRiotID(): void { $request = new RiotRequest("riot/account/v1/accounts/by-puuid/$this->puuid"); $request->useRouting(); $result = $request->run(); if ($request->responseCode == 200) { $this->gameName = $result->gameName; $this->tagLine = $result->tagLine; $conn = new MySQLConnection(); $conn->query(" UPDATE `accounts` SET `gameName` = '$this->gameName', `tagLine` = '$this->tagLine' WHERE `puuid` = '$this->puuid' "); } } } class Elo { public string $tier; public string $rank; public int $points; public function value() : int { $tiers = [ "CHALLENGER" => 2800, "GRANDMASTER" => 2800, "MASTER" => 2800, "DIAMOND" => 2400, "EMERALD" => 2000, "PLATINUM" => 1600, "GOLD" => 1200, "SILVER" => 800, "BRONZE" => 400, "IRON" => 0, ]; $ranks = [ "I" => 300, "II" => 200, "III" => 100, "IV" => 0, ]; $tier = $this->tier; if ($tier === "MASTER" || $tier === "GRANDMASTER" || $tier === "CHALLENGER") return $tiers[$tier] + $this->points; return $tiers[$tier] + $ranks[$this->rank] + $this->points; } }