- try {
- let result = await request({uri: req, resolveWithFullResponse: true, json: true});
- let appRateLimit = result.headers["x-app-rate-limit"];
- let appRateLimitCount = result.headers["x-app-rate-limit-count"];
- appRateLimit1 = appRateLimit.split(",")[0].split(":")[0];
- appRateLimit120 = appRateLimit.split(",")[1].split(":")[0];
- appRateLimitCount1 = appRateLimitCount.split(",")[0].split(":")[0];
- appRateLimitCount120 = appRateLimitCount.split(",")[1].split(":")[0];
- let delay1 = 1000 / (appRateLimit1 - 1);
- let delay120 = 120000 / (appRateLimit120 - 1);
- await sleep(Math.max(delay1, delay120));
- console.log(Math.max(delay1, delay120));
- return result.body;
- } catch (err) {
- console.log(err.message);
- return await riotRequest(region, url, params, retries - 1);
- }
+ return new Promise((resolve, reject) => {
+ requests.push({ url: req, retries: 5, res: resolve, rej: reject });
+ });
+}
+// ----------------
+
+// User functionality
+// ------------------
+let users = {};
+let nameLookup = {};
+
+async function loadUserDb(region, accountId) {
+ if (!users[region]) users[region] = {};
+ if (users[region][accountId]) return;
+ let adapter = new FileAsync("data/" + region + "/" + accountId + ".json");
+ let db = await low(adapter);
+ await db.defaults({ games: [], gameSummaries: [], account: {} })
+ .write();
+ users[region][accountId] = db;
+}
+
+async function loadUserInfo(region, summonerName) {
+ if (!nameLookup[region]) nameLookup[region] = {};
+ if (nameLookup[region][summonerName]) return;
+ let user = await riotRequest(region, "/lol/summoner/v4/summoners/by-name/" + summonerName, {}, 5);
+ let accountId = user.accountId;
+ await loadUserDb(region, accountId);
+ users[region][accountId].set("account", user);
+ nameLookup[region][summonerName] = accountId;