diff --git a/.github/actions/spelling/allow.txt b/.github/actions/spelling/allow.txt
index 24555fd1..dfdbd479 100644
--- a/.github/actions/spelling/allow.txt
+++ b/.github/actions/spelling/allow.txt
@@ -1,11 +1,23 @@
+appid
+apikey
+apiname
+appdetails
+appids
+appinfo
deno
gpgarmor
github
githubassets
https
+IPlayer
+ISteam
leetcode
+Nie
npx
+personaname
pgn
+playerstats
+rtime
scm
shas
splatoon
@@ -13,5 +25,13 @@ Splatnet
ssh
statink
STATINK
+steamcommunity
+steamid
+steamids
+steampowered
+timecreated
ubuntu
+unlocktime
+userid
yargsparser
+webtoken
diff --git a/.github/actions/spelling/excludes.txt b/.github/actions/spelling/excludes.txt
index 51b24af1..7b180c74 100644
--- a/.github/actions/spelling/excludes.txt
+++ b/.github/actions/spelling/excludes.txt
@@ -55,3 +55,4 @@ ignore$
^\Qsource/templates/terminal/partials/screenshot.ejs\E$
^\Qtests/mocks/api/github/rest/emojis/get.mjs\E$
^\Qtests/mocks/api/axios/get/lichess.mjs\E$
+^\Qtests/mocks/api/axios/get/steam.mjs\E$
\ No newline at end of file
diff --git a/.github/readme/imgs/plugin_steam_userid.png b/.github/readme/imgs/plugin_steam_userid.png
new file mode 100644
index 00000000..30ede968
Binary files /dev/null and b/.github/readme/imgs/plugin_steam_userid.png differ
diff --git a/.github/readme/imgs/plugin_steam_webtoken.png b/.github/readme/imgs/plugin_steam_webtoken.png
new file mode 100644
index 00000000..63e83717
Binary files /dev/null and b/.github/readme/imgs/plugin_steam_webtoken.png differ
diff --git a/source/app/web/statics/embed/app.placeholder.js b/source/app/web/statics/embed/app.placeholder.js
index f671abaa..da229afd 100644
--- a/source/app/web/statics/embed/app.placeholder.js
+++ b/source/app/web/statics/embed/app.placeholder.js
@@ -1035,6 +1035,104 @@
},
})
: null),
+ //Steam
+ ...(set.plugins.enabled.steam
+ ? ({
+ steam: {
+ sections: options["anilist.sections"].split(",").map(x => x.trim()).filter(x => x),
+ player: {
+ level: faker.datatype.number(100),
+ avatar: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mOcOnfpfwAGfgLYttYINwAAAABJRU5ErkJggg==",
+ created: 1366386002,
+ name: faker.internet.userName(),
+ },
+ games: {
+ count: 2,
+ playtime: 89.23333333333333,
+ achievements: 0,
+ "most-played": [
+ {
+ id: 524220,
+ name: "NieR:Automata™",
+ icon:
+ "data:image/jpg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCABAAEADASIAAhEBAxEB/8QAHAAAAgMBAQEBAAAAAAAAAAAABgcFCAkEAwEA/8QAMBAAAQMDAwEGBQQDAAAAAAAAAQIDBAAFEQYHITESExQiQVEjMkJhcQhSobEVgcH/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8ArPebk9cpIW+U8D0FcJUTj39q+Kxnjp6VN6N0zcdV3xi12lpTjzqgCoDIQPc0EKlZ6YJI6Yrvt1oudwIRAhPPqV+1NXb252F01pmHGfuDHjLoPMtazlGfbsmmoxZbXHwI9uhN4/aykH+qDNa5afvNsBE+3vsgj6k1EqKgeRhXTmtQXbTb3jh6BEcT7LZSo/yKXevNktKaqbkOGGIk5acNuMnsJSfwKCgXbUlWfqrpts12DLS8zgqB5yKJNydDXLQl9ct9xQe7J+G5jhQ9KEU/MMUH5XUZOR9qu1+l7Q8fS+jDfLk0lufLyVLWPlb6giqdaYgpueorfDI8rzoSRWhGpbZKe20MK15D6YiEoSnqSAKCMTuzZv8AMeFUy6Ifb7vx2fhAjqKYTD7chpDzCgttYCkqHQikM3fbEnbB6yqhpevThU34NKfi9vI82cUz9EKfs+lILd+eS24oAISRykY4BoC5RwCSQPzS9uu6tmgXZcRCHJEdo4elIPkb980R3iWLvZp8ayS21TO78uOopC27VtqsGjLzpm/2l1m8rU4UhxIKpBUrjBxQMHfPSkDX+3L8yEEPSmGy9GcQOSeOKoU60piQ404PM2opUPYjitDNl7XPg6Ebau6VBTqlLS2vqlB6CqQbsWtFn3AusZsdlJcLmPyTQRGkZibfqq2ynD5Wngo1ou5Pks6et8yE33iCyhS04z5SkVmecpWCnqORV7/0266Z1ZoliHJfQq5RPI40evYHAoCKdqvR0BwyViCLljPd9gBeag7rutF75pk2N98k+TBHP4rx3F2YiX68qvlqfVGuSQMIUSUEj7UAzdtNwo0pl+LLjPOtqzgNelAwY+58W3zA2rT8lhx35jkDipuJrLRV5mI8aICbik5Sh5sKXn84pSx9ttwrhOW7cJUdBUAAe66Ue6G2WhWq6ovF+f8AG3JGCgtkpQD9x60DMtEp+WHHFoCI2MN4GOKz73lnouW410eRyAstjHuCauzvNrGLonQ81/vEty3GyiMgcEqrPSXJXMmyJLxy68srJ+5OaDxX81EOhNWXHR1/YudsdUlTagVIB4UPYioi4wZEJ/upCCleM1yhJ59KC/8AtzvRpnV8NhLstuFcSACw6rlSvXFM5JT84UCFDg54rLZpx1hxLsdS2lJ6KScEf7ootm4OqbatCmLvJV2eneOFQ/ug0jzzyefzQDr3dfTOjWHRMnNPTUDiM2rzVR27bjaruR7Ui7SEk8ZbWU/9oXlyZEt0uS3nH3T9S1FR/mgLd0df3LXl9cmTVqEYKIaazwkenFBaeo9K+dk56V7w4zsqQGWkFS1dAKD/2Q==",
+ playtime: 44.88333333333333,
+ played: 1582407120,
+ description: "NieR: Automata tells the story of androids 2B, 9S and A2 and their battle to reclaim the machine-driven dystopia overrun by powerful machines.",
+ genres: [
+ "Action",
+ "RPG",
+ ],
+ achievements: [
+ {
+ icon:
+ "data:image/jpg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAgACADASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAUGBwP/xAAmEAABAgQDCQAAAAAAAAAAAAABAAIDBAUGBxIUFiMxNVNhc5Gx/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAME/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8A6XVcM5QqlppTK+G4GJvSXEEngOyT7d1TpwPRRiVz5niH0qTWNVWbd1TpwPRTi1bhnK7UtNN5WQ2gRN0S0kg8D2Wdqsw158/xH6EBiVz5niH0qTWiXVb05XalqZTKyG0GHvQWkkHiOyT7CVTqQPZQSarMNefP8R+hGwlU6kD2U4tW3pyhVLUzeV8NwEPdAuIJPE9kH//Z",
+ achieved: true,
+ unlocked: 1565976624,
+ name: "Transcendent Being",
+ description: "",
+ id: "ACH_BAD_END",
+ },
+ {
+ icon:
+ "data:image/jpg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAgACADASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAABQQDAAL/xAAtEAABAwMCBAQGAwAAAAAAAAABAgMEAAURBiISITFBExQjMlFhcYGRsRXB0f/EABcBAQEBAQAAAAAAAAAAAAAAAAABAwT/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwC3UF7lWeeY8bc2rLnqKJIJPT6VhE1BdpCgAhtORy2qJ/ArxqprxtRIB7IH7pixMJZfZWOQPEB+DXG1FSL/AHhj3soB64IINU6evMm8TvLytqEYX6aikkg9D8vlSmomEPcK8hWEYIznuaE0uz4N/cx3R/dQdqdt3+cDkfgUtLZ2LOAr4DPaqbOiDeZrcW4w5cd2Mkq3HiQVBW4Ajl7eX3OOlb3W2yLjMMiPxJSklO9JByDjP0q+2tzIiAlyO27j4k1QfdotvsD7zjEOa9Hkoy64yBhrh6de2P1U2mXmpN2W8wh5Dakjh8UYKh3OKcuKZUpspbitNkjBOT/tHWu3yLfN8xJClpWQnYkqIyeX2oP/2Q==",
+ achieved: true,
+ unlocked: 1565976316,
+ name: "A Round by the Pond",
+ description: "20 different kinds of fish caught.",
+ id: "ACH_FISHING",
+ },
+ ],
+ rate: {
+ total: 47,
+ achieved: 47,
+ },
+ },
+ ],
+ "recently-played": [
+ {
+ id: 1113560,
+ name: "NieR Replicant ver.1.22474487139...",
+ icon:
+ "data:image/jpg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCABAAEADASIAAhEBAxEB/8QAHAAAAgIDAQEAAAAAAAAAAAAABgcDBQEECAIA/8QAMBAAAQMDAgUCBgEFAQAAAAAAAQIDBAAFERIhBhMxQVEHYRQiIzJCcRUIJFJigcH/xAAYAQADAQEAAAAAAAAAAAAAAAABAgMABP/EAB8RAAICAwACAwAAAAAAAAAAAAABAhEDEiEEQSIxYf/aAAwDAQACEQMRAD8A6m228CgT1PmN/DtMDd1s6z+jRfebg3abVJnSN2mEa1fqubeKOOBxNcBYoTwTcpaylxfX6Z+0DwaWT9FsMbezNluY5e3Jdpt0hoMqRh94jIx4HvV9ZbVHs0NMa3r5YTuvmb6vcV9Bsjdkt6GorJ0gfMvuVd81aWpUfWEqBKldSqpHV+lhHZCmNTbqSfyFYdjoQgKdSS0fzHQVOuGIriXUk8rqfet55DcVkTYg5jB+9pW9YWynjKkR5BcjFL7H+o3o1tPEbbiEtyxy1dM0K3S2amhMthUjI1AZ2J8YrUtt6DTyBcGg2UnAKhso0U6BKCmi09dLkm3cEvLdUUtuZSrfqKQ/oPbbchM6+SAVzHCUoKznAB2xTj/qVZMn08faQkqdVnTjzQF6dQmWOD4fKQOcjdxI/VNJ0LiXxDNy5FlvXo5jRPzHskeTUciNFmR0vwZCQ71Tg7ZoUeW6J5nWtZkxSdDzIOdGKEo/FlxmcQqZiwHmilWFJ7Y84qd2X1G1br4/8O7BeSEuDrqGc/qpLZc+RJMaUfpObJBPehlm6KU+0uc1yXBsVEdRUvEENu5RNKlrQtr6jC0Kxk1vsDjQfEKjRgw25g5K0at+teNUG5RXTIbCHEjC09/2KHrRc0XaAwlSyHUfTO++1ef5Q2+4FqajY7ax0Ioi6tBd6o2r+QjxtassqUQR2G1IK4sXPh65MXC3zELjh0pcjAbhI710h6gsvOWlHJISkElRPakTxE6yxqclIPwh+Vah296M+MGDsFZZw1CU4LjDQYsh0AOxldFjyBWxHgMc9UlLaQ6vZeBUMN2JCjMhb6dKkhSD3welbLMqDJePwMlLjgGVpT2qTtnSlqZlRfiHmFLwW0KyoeR4qJUpLbHORlbTSjgf+VsPvKDiUspKlDqmhuXJ+HYfLSgVJJOj/I+KMX6Fkm+klhuTFr4mXHQomPJwUgncKO5ovvqorrzSJK0pc/An8vakxeHC1Li3SM5qTHXrUQe/cVf8cX1f8FAfOdThyhwHocU9E2unQ/EUkXO3PvNqKYUdOvmdnD4pK8ZRFOfGW6WOWmUyChRGwB3FP3iRtL1qctkZCUuSRpAA2T7mgj1UtammLNISxzQkhp9SR9oCetPJeyGGdcOd/TG4G7zXbBc1KE2EsqjLUdl74A99qawZgWNouTHWoh/LVjKjSC9WZbNt4nactWuNNbOoqScZHagGVcrlOK3JEyS7k5IU4SKDx7O0Os+q1as6Ru/FYkkpgILLWcKWo/cPY0u+LuNmYrzTMJfMcZOsqB2UT2pdyOILm+xyVu4RpCfl2OKqMkryrJPcmtHHTthyeTaqKDnh3idtiW9FkkqgSDqyo50LO5/5RFd7wzcOCp0DX/cxAXU7/iemKUmQVbZx4qQOuDOHFZIwd+o8GncVdkFmdas//9k=",
+ playtime: 44.35,
+ played: 1625611102,
+ description: "The upgraded prequel of NieR:Automata. A kind young man sets out with Grimoire Weiss, a strange talking book, to search for the "Sealed verses" in order to save his sister Yonah, who fell terminally ill to the Black Scrawl.",
+ genres: [
+ "Action",
+ "Adventure",
+ "RPG",
+ ],
+ achievements: [
+ {
+ icon:
+ "data:image/jpg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAgACADASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAwUGBAL/xAAsEAACAgEDAwMDAwUAAAAAAAABAgMEBQAGERIhMSJBUQdhkRMUoRVDUnGz/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/xAAYEQEBAQEBAAAAAAAAAAAAAAABACERMf/aAAwDAQACEQMRAD8AsL+R3Jkd+5LEYnIrSr1Yo2QGFGDcqpJLEE88t4+2rbA08hXQDJ5N70jEDkxIgX/XSBzoWMxpr5vK3XPa08ZUD2CoF/PY6lZs7uaDaW9LmTr16NnHGT9nJGvVwvSCOxPq4DDhu3f21fcJ5a89nb8eKwVqKZ68mTtCoqxlAFLu3Qx6lbn0qPHzrNHlM5S3thcdcumercezDIpVCrGOIOGUhVIIblSD8ffSjIY3LZPZGzYzXS3LjpoLd4GRY1SJULBT1Hu3Qy/Y9/GqLH4dpc7jrP8ASWoVcfLI9UGRWLCVGMh4UkKvUV4HnudXCk+x+XisZ3IYz+9VCNz8hlB/jn+dSP1ZuGrs/dNeM8SW3pRIB5P6pCH/AJnXGWo7mxu/psvhKAvU7CKsimRF6V4UMOGYEN6fPfzphujZ1rPSLPDk7UD8wSiKZ+tVkicsvt7Bm4+CffUOCMYONyd/IboyG344QsVXJdVtyhCrVijjWNAf8pGX8Bu3fVVdz9SvuOhhnk5u3EeQIO5CgE8n8HSXBbZtbeny08Vy1dSy5siL9YiWWXjv1sex5+dI8Bh9yZL6hRbg3Jj4aaVYmihCOpBUhgPDE8+s8nto8Zt//9k=",
+ achieved: true,
+ unlocked: 1625610706,
+ name: "e8 a8 98 e6 86 b6 e3 82 b5 e3 83 bc e3 83 90 e3 83 bc",
+ description: "",
+ id: "ACHIEVEMENT_0230",
+ },
+ {
+ icon:
+ "data:image/jpg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAgACADASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAABgQFBwP/xAAsEAACAQQBAwIFBAMAAAAAAAABAgMEBQYRABIhMSJBBxMUUaEVIzJhUnGC/8QAFgEBAQEAAAAAAAAAAAAAAAAAAQAC/8QAGhEAAwEBAQEAAAAAAAAAAAAAAAERIUExMv/aAAwDAQACEQMRAD8AXZJe7vT5DVJLe1sVvR1hgeeCN4JGIH8pvV0MdghXC/0TxvY6S4UsJ/Urm9fIwBBMSIF/10gb5Gp7LG9wvclZFHPTXAorQyKHR0EYUgg+ffgDNbZk2BWSeuw27O1hh0Xt9SonajUt5iZgT0bIBU9wD7+z9Yi8HGaV60ENKTkMVmknf5MRljV1lc6+4Ovbv4G+/CtFeMnt3xHtljvVfFU09XHI5VIkA0EYqdgAhtr48a4dseE5ZltTb8lya4W2qi6FqKairY2eKRWXYUqmgi999tkHR0eaHHZK2qyS23m809ujq6cMiCjeR+gFWB6mYAMNHQAUd/f244sDWW1vu8VRfbhbN/vUoRt/cMoP43+eTLxQpdLPX2+TulVTyQn/AKUgfnXM9yCgyy3ZrV3fG6GOtiqIgvTI6BV9KgjTMp36B3/vifFbvks88aX/AB40miCZ4qiNl2D/AIhiRzM6hp0+Gc/1Hw7xqQb39BErb9mUdJ/IPJtZfqSmyKgszODW1aNIqDyFAJ2fsPSeVCxX+wYvFQ2e3U1wrIzN8tvniNEBlZkBDaJPSwHkDY88O4xaMpuWd02QZVb4KN6WBoUETp0nYYDQDMd+o8YnWV4f/9k=",
+ achieved: true,
+ unlocked: 1625607419,
+ name: "Daredevil",
+ description: "",
+ id: "ACHIEVEMENT_0460",
+ },
+ ],
+ rate: {
+ total: 47,
+ achieved: 44,
+ },
+ },
+ ],
+ },
+ },
+ })
+ : null),
//LeetCode
...(set.plugins.enabled.leetcode
? ({
diff --git a/source/plugins/steam/README.md b/source/plugins/steam/README.md
new file mode 100644
index 00000000..8d720a2a
--- /dev/null
+++ b/source/plugins/steam/README.md
@@ -0,0 +1,22 @@
+
+
+
+## ➡️ Available options
+
+
+
+
+## 🗝️ Obtaining a *Steam Web API* token
+
+Go to [steamcommunity.com/dev/apikey](https://steamcommunity.com/dev/apikey) to obtain a Steam Web API token:
+
+
+
+To retrieve your Steam ID, access your user account on [store.steampowered.com/account](https://store.steampowered.com/account) and copy the identifier located behind the header:
+
+
+
+## ℹ️ Examples workflows
+
+
+
diff --git a/source/plugins/steam/examples.yml b/source/plugins/steam/examples.yml
new file mode 100644
index 00000000..8a125ba7
--- /dev/null
+++ b/source/plugins/steam/examples.yml
@@ -0,0 +1,31 @@
+- name: Recently played games
+ uses: lowlighter/metrics@latest
+ with:
+ filename: metrics.plugin.steam.svg
+ token: NOT_NEEDED
+ base: ""
+ plugin_steam_token: ${{ secrets.STEAM_TOKEN }}
+ plugin_steam: yes
+ plugin_steam_user: 0
+ plugin_steam_sections: recently-played
+ plugin_steam_achievements_limit: 0
+ prod:
+ # ⚠️ Using mocked data for privacy reasons
+ with:
+ plugin_steam_token: MOCKED_TOKEN
+ use_mocked_data: yes
+
+- name: Profile and detailed game history
+ uses: lowlighter/metrics@latest
+ with:
+ filename: metrics.plugin.steam.full.svg
+ token: NOT_NEEDED
+ base: ""
+ plugin_steam_token: ${{ secrets.STEAM_TOKEN }}
+ plugin_steam: yes
+ plugin_steam_user: 0
+ prod:
+ # ⚠️ Using mocked data for privacy reasons
+ with:
+ plugin_steam_token: MOCKED_TOKEN
+ use_mocked_data: yes
\ No newline at end of file
diff --git a/source/plugins/steam/index.mjs b/source/plugins/steam/index.mjs
new file mode 100644
index 00000000..209eeef2
--- /dev/null
+++ b/source/plugins/steam/index.mjs
@@ -0,0 +1,104 @@
+//Setup
+export default async function({login, q, imports, data, account}, {token, enabled = false, extras = false} = {}) {
+ //Plugin execution
+ try {
+ //Check if plugin is enabled and requirements are met
+ if ((!q.steam) || (!imports.metadata.plugins.steam.enabled(enabled, {extras})))
+ return null
+
+ //Load inputs
+ let {user, sections, "games.ignored": _games_ignored, "games.limit": _games_limit, "recent.games.limit": _recent_games_limit, "achievements.limit": _achievements_limit, "playtime.threshold": _playtime_threshold} = imports.metadata.plugins.steam.inputs({data, account, q})
+
+ const urls = {
+ games: {
+ owned: `https://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=${token}&steamid=${user}&format=json&include_appinfo=1`,
+ schema: `https://api.steampowered.com/ISteamUserStats/GetSchemaForGame/v0002/?key=${token}&format=json`,
+ details: "https://store.steampowered.com/api/appdetails?",
+ },
+ player: {
+ summary: `https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=${token}&steamids=${user}&format=json`,
+ level: `https://api.steampowered.com/IPlayerService/GetSteamLevel/v1/?key=${token}&steamid=${user}&format=json`,
+ achievement: `https://api.steampowered.com/ISteamUserStats/GetPlayerAchievements/v0001/?key=${token}&steamid=${user}&format=json&l=en`,
+ },
+ }
+ const result = {sections, player: null, games: {count: 0, playtime: 0, achievements: 0}}
+
+ //Fetch owned games
+ console.debug(`metrics/compute/${login}/plugins > steam > fetching owned games`)
+ let {data: {response: {game_count: count, games}}} = await imports.axios.get(urls.games.owned)
+ result.games.count = count
+ result.games.playtime = games.reduce((total, {playtime_forever: playtime}) => (total += playtime), 0) / 60
+
+ //Fetch game achievements and order games by section
+ for (const section of ["most-played", "recently-played"]) {
+ if (!sections.includes(section))
+ continue
+ result.games[section] = await Promise.all(
+ games
+ .map(({appid: id, name, img_icon_url: icon, playtime_forever: playtime, rtime_last_played: played}) => ({id, name, icon: `http://media.steampowered.com/steamcommunity/public/images/apps/${id}/${icon}.jpg`, playtime: playtime / 60, played}))
+ .filter(({playtime}) => (playtime >= _playtime_threshold))
+ .filter(({id}) => (!_games_ignored.includes(`${id}`)))
+ .sort((a, b) => ({"most-played": (b.playtime - a.playtime), "recently-played": (b.played - a.played)}[section]))
+ .slice(0, ({"most-played": _games_limit, "recently-played": _recent_games_limit}[section]) || Infinity)
+ .map(async game => {
+ const schema = {}
+ try {
+ console.debug(`metrics/compute/${login}/plugins > steam > fetching schema for "${game.name}" (${game.id})`)
+ const {data: {game: {availableGameStats: {achievements = []} = {}}}} = await imports.axios.get(`${urls.games.schema}&appid=${game.id}`)
+ Object.assign(schema, Object.fromEntries(achievements.map(({name, icon}) => [name, {icon}])))
+ }
+ catch (error) {
+ console.debug(`metrics/compute/${login}/plugins > steam > failed to get schema for "${game.name}" (${game.id}) > ${error}`)
+ }
+ const about = {}
+ try {
+ console.debug(`metrics/compute/${login}/plugins > steam > fetching details for "${game.name}" (${game.id})`)
+ const {data: {[game.id]: {data}}} = await imports.axios.get(`${urls.games.details}&appids=${game.id}`)
+ about.description = data.short_description ?? ""
+ about.genres = data.genres?.map(({description}) => description) ?? []
+ }
+ catch (error) {
+ console.debug(`metrics/compute/${login}/plugins > steam > failed to get details for "${game.name}" (${game.id}) > ${error}`)
+ }
+
+ let achievements = []
+ const rate = {total: Object.keys(schema).length, achieved: 0}
+ try {
+ console.debug(`metrics/compute/${login}/plugins > steam > fetching player achievements "${game.name}" (${game.id})`)
+ let {data: {playerstats: {achievements: list = []}}} = await imports.axios.get(`${urls.player.achievement}&appid=${game.id}`)
+ achievements = await Promise.all(list.map(async ({apiname: id, achieved, unlocktime: unlocked, name, description}) => ({icon: await imports.imgb64(schema[id]?.icon ?? null, {width: 32, height: 32}), achieved: !!achieved, unlocked, name, description, id})))
+ achievements = achievements.sort((a, b) => (b.unlocked - a.unlocked))
+ rate.achieved = achievements.filter(({achieved}) => achieved).length
+ achievements = achievements.slice(0, _achievements_limit)
+ }
+ catch (error) {
+ console.debug(`metrics/compute/${login}/plugins > steam > failed to get player achievements for "${game.name}" (${game.id}) > ${error}`)
+ }
+ return {...game, ...about, icon: await imports.imgb64(game.icon, {width: 64, height: 64}), achievements, rate}
+ }),
+ )
+ }
+
+ //Fetch player info
+ if (sections.includes("player")) {
+ console.debug(`metrics/compute/${login}/plugins > steam > fetching profile info`)
+ let {data: {response: {players: [info]}}} = await imports.axios.get(urls.player.summary)
+ console.debug(`metrics/compute/${login}/plugins > steam > fetching profile level`)
+ const {data: {response: {player_level: level}}} = await imports.axios.get(urls.player.level)
+ result.player = {
+ level,
+ avatar: await imports.imgb64(info.avatar, {width: 64, height: 64}),
+ created: info.timecreated,
+ name: info.personaname,
+ }
+ }
+
+ //Results
+ console.log(JSON.stringify(result))
+ return result
+ }
+ //Handle errors
+ catch (error) {
+ throw imports.format.error(error)
+ }
+}
diff --git a/source/plugins/steam/metadata.yml b/source/plugins/steam/metadata.yml
new file mode 100644
index 00000000..d0b51951
--- /dev/null
+++ b/source/plugins/steam/metadata.yml
@@ -0,0 +1,93 @@
+name: 🕹️ Steam
+category: social
+description: |
+ This plugin can display your player profile and played games from your Steam account.
+disclaimer: |
+ This plugin is not affiliated, associated, authorized, endorsed by, or in any way officially connected with [Steam](https://store.steampowered.com).
+ All product and company names are trademarks™ or registered® trademarks of their respective holders.
+examples:
+ +Recently played games: https://github.com/lowlighter/metrics/blob/examples/metrics.plugin.steam.svg
+ Profile and detailed game history: https://github.com/lowlighter/metrics/blob/examples/metrics.plugin.steam.full.svg
+supports:
+ - user
+ - organization
+scopes: []
+inputs:
+
+ plugin_steam:
+ description: |
+ Enable steam plugin
+ type: boolean
+ default: no
+
+ plugin_steam_token:
+ description: |
+ Steam token
+ type: token
+ default: ""
+ extras:
+ - metrics.api.steam
+
+ plugin_steam_sections:
+ description: |
+ Displayed sections
+
+ - `player`: display profile
+ - `most-played`: display most played games
+ - `recently-played`: display recently played games
+ type: array
+ format: comma-separated
+ default: player, most-played, recently-played
+ options:
+ - player
+ - most-played
+ - recently-played
+
+ plugin_steam_user:
+ description: |
+ Steam user id
+
+ This can be found on your Steam user account details
+ type: string
+ preset: no
+
+ plugin_steam_games_ignored:
+ description: |
+ Ignored games
+
+ Use App id as they are referenced in Steam catalog
+ type: array
+ format: comma-separated
+ default: ""
+ example: 400, 620
+
+ plugin_steam_games_limit:
+ description: |
+ Display limit (Most played games)
+ type: number
+ min: 0
+ zero: disable
+ default: 1
+
+ plugin_steam_recent_games_limit:
+ description: |
+ Display limit (Recently played games)
+ type: number
+ min: 0
+ zero: disable
+ default: 1
+
+ plugin_steam_achievements_limit:
+ description: |
+ Display limit (Games achievements)
+ type: number
+ min: 0
+ default: 2
+
+ plugin_steam_playtime_threshold:
+ description: |
+ Display threshold (Game playtime in hours)
+ type: number
+ min: 0
+ default: 2
+
diff --git a/source/templates/classic/partials/_.json b/source/templates/classic/partials/_.json
index e8523ae5..a7886e43 100644
--- a/source/templates/classic/partials/_.json
+++ b/source/templates/classic/partials/_.json
@@ -42,5 +42,6 @@
"sponsorships",
"poopmap",
"fortune",
- "splatoon"
+ "splatoon",
+ "steam"
]
diff --git a/source/templates/classic/partials/steam.ejs b/source/templates/classic/partials/steam.ejs
new file mode 100644
index 00000000..9d1345e3
--- /dev/null
+++ b/source/templates/classic/partials/steam.ejs
@@ -0,0 +1,108 @@
+<% if (plugins.steam) { %>
+
+
+ Steam
+
+ <% if (plugins.steam.error) { %>
+
+
+ <%= {"most-played":"Most played", "recently-played":"Recently played"}[section] %>
+
+
+
+

The NieR:Automata™ Game of the YoRHa Edition includes the game itself and comes packed with DLC and bonus content for the full experience of the award-winning post-apocalyptic action RPG, including:

The NieR: Automata 3C3C1D119440927 DLC is out now and includes three new colosseums to challenge, plus additional sub-quests. Upon completion of these quests, players can earn various rewards including new costumes from NieR: Replicant, new equipment and cosmetic accessories such as masks, hairspray that change the color of your character, records that add special music tracks to the players’ jukebox and much more!<\/p>
9\/10 "Don’t miss this"<\/i> – VideoGamer<\/a>
10\/10 "One of the best games I’ve ever played"<\/i> – RPGSite<\/a>
4\/5 "Pure genius"<\/i> – Trusted Reviews<\/a>
9\/10 "One of the most interesting and unique games you’ll play this year"<\/i> – God is a Geek<\/a>
9\/10 "Classic Platinum action combined with a deep role-playing system"<\/i> – Metro<\/a><\/p>About the Game<\/h1>https:\/\/store.steampowered.com\/app\/1113560\/NieR_Replicant_ver122474487139\/<\/a>

NieR: Automata tells the story of androids 2B, 9S and A2 and their battle to reclaim the machine-driven dystopia overrun by powerful machines.
Humanity has been driven from the Earth by mechanical beings from another world. In a final effort to take back the planet, the human resistance sends a force of android soldiers to destroy the invaders. Now, a war between machines and androids rages on... A war that could soon unveil a long-forgotten truth of the world.
Key Features:
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
NieR: Automata tells the story of androids 2B, 9S and A2 and their battle to reclaim the machine-driven dystopia overrun by powerful machines.
Humanity has been driven from the Earth by mechanical beings from another world. In a final effort to take back the planet, the human resistance sends a force of android soldiers to destroy the invaders. Now, a war between machines and androids rages on... A war that could soon unveil a long-forgotten truth of the world.
Key Features:
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
*<\/strong>languages with full audio support",
+ "reviews":
+ '“Riveting and gratifying combat”
9\/10 – Gamespot<\/a>
“A breath of fresh air”
4.5\/5 – GamesRadar+<\/a>
“Bold, ambitious, and surprising”
Recommended – Eurogamer<\/a>
',
+ "header_image": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/524220\/header.jpg?t=1646911723",
+ "website": "http:\/\/www.niergame.com\/",
+ "pc_requirements": {
+ "minimum":
+ 'Minimum:<\/strong>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>Reviews & Accolades<\/h1>
<\/p>4 YoRHa<\/h1>

4 YoRHa is a free downloadable content.
Enjoy 4 costumes and 4 weapons from NieR:Automata in NieR Replicant ver.1.22474487139....
*Due to the story of the game, this content may not be playable during some scenes.
*The full game (sold separately) is required to use this content. Also, if the latest patch needs to be applied, please update before use.<\/p>About the Game<\/h1>

A thousand-year lie that would live on for eternity...
NieR Replicant ver.1.22474487139... is an updated version of NieR Replicant, previously only released in Japan.
Discover the one-of-a-kind prequel to the critically-acclaimed masterpiece NieR:Automata. Now with a modern upgrade, experience masterfully revived visuals, a fascinating storyline and more!
The protagonist is a kind young man living in a remote village. In order to save his sister Yonah, who fell terminally ill to the Black Scrawl, he sets out with Grimoire Weiss, a strange talking tome, to search for the "Sealed verses."
Experience the NieR Replicant story for the first time in the west through the eyes of the protagonist as a brother.
The original all-star team returns including acclaimed director, YOKO TARO (Drakengard \/ NieR:Automata), composer Keiichi Okabe (TEKKEN \/ Drakengard \/ NieR:Automata), and producer Yosuke Saito (DRAGON QUEST X \/ NieR:Automata).
In a distant, distant future, humanity is on the brink of extinction.
A black scrawl disease and strange beasts threaten the world.
A young kindhearted boy makes a promise to his little sister.
A thousand-year lie that would live on for eternity...
<\/li>
<\/li>
<\/li>
<\/li>
A thousand-year lie that would live on for eternity...
NieR Replicant ver.1.22474487139... is an updated version of NieR Replicant, previously only released in Japan.
Discover the one-of-a-kind prequel to the critically-acclaimed masterpiece NieR:Automata. Now with a modern upgrade, experience masterfully revived visuals, a fascinating storyline and more!
The protagonist is a kind young man living in a remote village. In order to save his sister Yonah, who fell terminally ill to the Black Scrawl, he sets out with Grimoire Weiss, a strange talking tome, to search for the "Sealed verses."
Experience the NieR Replicant story for the first time in the west through the eyes of the protagonist as a brother.
The original all-star team returns including acclaimed director, YOKO TARO (Drakengard \/ NieR:Automata), composer Keiichi Okabe (TEKKEN \/ Drakengard \/ NieR:Automata), and producer Yosuke Saito (DRAGON QUEST X \/ NieR:Automata).
In a distant, distant future, humanity is on the brink of extinction.
A black scrawl disease and strange beasts threaten the world.
A young kindhearted boy makes a promise to his little sister.
A thousand-year lie that would live on for eternity...
<\/li>
<\/li>
<\/li>
<\/li>
*<\/strong>languages with full audio support",
+ "reviews":
+ '“Lives up to the hype”
4.5\/5 – Windows Central<\/a>
“Incredible, refined version”
5\/5 – https:\/\/www.thegamer.com\/nier-replicant-remake-review\/<\/a>
“Ambitious, fascinating game”
10\/10 – GAMINGbible<\/a>
',
+ "header_image": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/header.jpg?t=1673963725",
+ "website": "https:\/\/nier.square-enix-games.com\/",
+ "pc_requirements": {
+ "minimum":
+ 'Minimum:<\/strong>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
<\/li>
\r\nNIER REPLICANT is a registered trademark or trademark of Square Enix Co., Ltd. SQUARE ENIX and the SQUARE ENIX logo are registered trademarks or trademarks of Square Enix Holdings Co., Ltd.",
+ "developers": [
+ "Square Enix",
+ "Toylogic Inc.",
+ ],
+ "publishers": [
+ "Square Enix",
+ ],
+ "price_overview": {
+ "currency": "CAD",
+ "initial": 7999,
+ "final": 7999,
+ "discount_percent": 0,
+ "initial_formatted": "",
+ "final_formatted": "CDN$ 79.99",
+ },
+ "packages": [
+ 502733,
+ ],
+ "package_groups": [
+ {
+ "name": "default",
+ "title": "Buy NieR Replicant™ ver.1.22474487139...",
+ "description": "",
+ "selection_text": "Select a purchase option",
+ "save_text": "",
+ "display_type": 0,
+ "is_recurring_subscription": "false",
+ "subs": [
+ {
+ "packageid": 502733,
+ "percent_savings_text": " ",
+ "percent_savings": 0,
+ "option_text": "NieR Replicant ver.1.22474487139 - CDN$ 79.99",
+ "option_description": "",
+ "can_get_free_license": "0",
+ "is_free_license": false,
+ "price_in_cents_with_discount": 7999,
+ },
+ ],
+ },
+ ],
+ "platforms": {
+ "windows": true,
+ "mac": false,
+ "linux": false,
+ },
+ "categories": [
+ {
+ "id": 2,
+ "description": "Single-player",
+ },
+ {
+ "id": 22,
+ "description": "Steam Achievements",
+ },
+ {
+ "id": 29,
+ "description": "Steam Trading Cards",
+ },
+ {
+ "id": 18,
+ "description": "Partial Controller Support",
+ },
+ {
+ "id": 23,
+ "description": "Steam Cloud",
+ },
+ ],
+ "genres": [
+ {
+ "id": "1",
+ "description": "Action",
+ },
+ {
+ "id": "25",
+ "description": "Adventure",
+ },
+ {
+ "id": "3",
+ "description": "RPG",
+ },
+ ],
+ "screenshots": [
+ {
+ "id": 0,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_2ff3ddb26c30b8397bce45abd0b4d847c3457259.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_2ff3ddb26c30b8397bce45abd0b4d847c3457259.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 1,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_f33bdbe53fa2d75e429f9b35a1299109c9ab8991.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_f33bdbe53fa2d75e429f9b35a1299109c9ab8991.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 2,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_b7867dae1f1fa62a2cc82165c8c79eb6821782d6.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_b7867dae1f1fa62a2cc82165c8c79eb6821782d6.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 3,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_8d7a5e5a0a7fe7782bf238763a2e29f8f6419e84.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_8d7a5e5a0a7fe7782bf238763a2e29f8f6419e84.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 4,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_f7689ef6964eee2407d9e996bc73b380e3e7a56a.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_f7689ef6964eee2407d9e996bc73b380e3e7a56a.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 5,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_6740ec558094fafc86f0933264e50e796c21e9cf.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_6740ec558094fafc86f0933264e50e796c21e9cf.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 6,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_eb6b583db6d9b3051c131ba748c768b2d6226277.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_eb6b583db6d9b3051c131ba748c768b2d6226277.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 7,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_c93af51b782d72cf081d4e8451836ad1716f63be.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_c93af51b782d72cf081d4e8451836ad1716f63be.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 8,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_56ecf25d6d95441a23f5481f895771c2dcb9ac18.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_56ecf25d6d95441a23f5481f895771c2dcb9ac18.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 9,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_a2c004272402bf76b70ed13c920fbd3c85d43d94.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_a2c004272402bf76b70ed13c920fbd3c85d43d94.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 10,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_0621ab7f10a0b23f4124509a13a8ace0487d856a.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_0621ab7f10a0b23f4124509a13a8ace0487d856a.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 11,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_ada29940be1bdb0e8b70e64788044f4c2592657f.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_ada29940be1bdb0e8b70e64788044f4c2592657f.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 12,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_1c972f496956e106c3b9023c68ff309fd649407e.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_1c972f496956e106c3b9023c68ff309fd649407e.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 13,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_344cfa42952beb6d51540d43bdfcbeaa0949c9a7.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_344cfa42952beb6d51540d43bdfcbeaa0949c9a7.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 14,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_2a5576351e2f84518dec11a796fbff609f4e5b9f.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_2a5576351e2f84518dec11a796fbff609f4e5b9f.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 15,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_071609b98112f7621067dd5275ce0ead665f13f2.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_071609b98112f7621067dd5275ce0ead665f13f2.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 16,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_b3a1dfdbb9d4a47b6407de5c8b1dc75ddfcea931.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_b3a1dfdbb9d4a47b6407de5c8b1dc75ddfcea931.1920x1080.jpg?t=1673963725",
+ },
+ {
+ "id": 17,
+ "path_thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_942e62e6f1bf312148a7480f943babe2325a3714.600x338.jpg?t=1673963725",
+ "path_full": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/ss_942e62e6f1bf312148a7480f943babe2325a3714.1920x1080.jpg?t=1673963725",
+ },
+ ],
+ "movies": [
+ {
+ "id": 256831765,
+ "name": "ESRB EN Launch NierRep",
+ "thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256831765\/movie.293x165.jpg?t=1619194859",
+ "webm": {
+ "480": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256831765\/movie480_vp9.webm?t=1619194859",
+ "max": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256831765\/movie_max_vp9.webm?t=1619194859",
+ },
+ "mp4": {
+ "480": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256831765\/movie480.mp4?t=1619194859",
+ "max": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256831765\/movie_max.mp4?t=1619194859",
+ },
+ "highlight": true,
+ },
+ {
+ "id": 256831398,
+ "name": "PEGI FR Gestalt NierRep",
+ "thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256831398\/movie.293x165.jpg?t=1619194237",
+ "webm": {
+ "480": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256831398\/movie480_vp9.webm?t=1619194237",
+ "max": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256831398\/movie_max_vp9.webm?t=1619194237",
+ },
+ "mp4": {
+ "480": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256831398\/movie480.mp4?t=1619194237",
+ "max": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256831398\/movie_max.mp4?t=1619194237",
+ },
+ "highlight": true,
+ },
+ {
+ "id": 256831395,
+ "name": "ESRB EN Extra content NierRep",
+ "thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256831395\/movie.293x165.jpg?t=1619194332",
+ "webm": {
+ "480": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256831395\/movie480_vp9.webm?t=1619194332",
+ "max": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256831395\/movie_max_vp9.webm?t=1619194332",
+ },
+ "mp4": {
+ "480": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256831395\/movie480.mp4?t=1619194332",
+ "max": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256831395\/movie_max.mp4?t=1619194332",
+ },
+ "highlight": true,
+ },
+ {
+ "id": 256827494,
+ "name": "ESRB EN OpeningCinematic NierRep",
+ "thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256827494\/movie.293x165.jpg?t=1616752558",
+ "webm": {
+ "480": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256827494\/movie480_vp9.webm?t=1616752558",
+ "max": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256827494\/movie_max_vp9.webm?t=1616752558",
+ },
+ "mp4": {
+ "480": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256827494\/movie480.mp4?t=1616752558",
+ "max": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256827494\/movie_max.mp4?t=1616752558",
+ },
+ "highlight": true,
+ },
+ {
+ "id": 256813164,
+ "name": "ESRB EN TGA 2020 NierRep",
+ "thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256813164\/movie.293x165.jpg?t=1607687616",
+ "webm": {
+ "480": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256813164\/movie480_vp9.webm?t=1607687616",
+ "max": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256813164\/movie_max_vp9.webm?t=1607687616",
+ },
+ "mp4": {
+ "480": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256813164\/movie480.mp4?t=1607687616",
+ "max": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256813164\/movie_max.mp4?t=1607687616",
+ },
+ "highlight": true,
+ },
+ {
+ "id": 256802321,
+ "name": "ESRB EN TGS NierRep",
+ "thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256802321\/movie.293x165.jpg?t=1600963175",
+ "webm": {
+ "480": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256802321\/movie480_vp9.webm?t=1600963175",
+ "max": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256802321\/movie_max_vp9.webm?t=1600963175",
+ },
+ "mp4": {
+ "480": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256802321\/movie480.mp4?t=1600963175",
+ "max": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256802321\/movie_max.mp4?t=1600963175",
+ },
+ "highlight": true,
+ },
+ {
+ "id": 256782057,
+ "name": "ESRB EN - Teaser",
+ "thumbnail": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256782057\/movie.293x165.jpg?t=1600964179",
+ "webm": {
+ "480": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256782057\/movie480_vp9.webm?t=1600964179",
+ "max": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256782057\/movie_max_vp9.webm?t=1600964179",
+ },
+ "mp4": {
+ "480": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256782057\/movie480.mp4?t=1600964179",
+ "max": "http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/256782057\/movie_max.mp4?t=1600964179",
+ },
+ "highlight": true,
+ },
+ ],
+ "recommendations": {
+ "total": 15065,
+ },
+ "achievements": {
+ "total": 47,
+ "highlighted": [
+ {
+ "name": "The Final Verse",
+ "path": "https:\/\/cdn.akamai.steamstatic.com\/steamcommunity\/public\/images\/apps\/1113560\/a9369e5eddeb1486ffd849aa3820607353ddbc23.jpg",
+ },
+ {
+ "name": "The Book of Legend",
+ "path": "https:\/\/cdn.akamai.steamstatic.com\/steamcommunity\/public\/images\/apps\/1113560\/6d11bfa34275061352048988a9202c3194259851.jpg",
+ },
+ {
+ "name": "The Wild Companion",
+ "path": "https:\/\/cdn.akamai.steamstatic.com\/steamcommunity\/public\/images\/apps\/1113560\/8ac7d0d717ccda449162f94f81054073e9679fc5.jpg",
+ },
+ {
+ "name": "The Mellow Companion",
+ "path": "https:\/\/cdn.akamai.steamstatic.com\/steamcommunity\/public\/images\/apps\/1113560\/1981aa8fe7fb43d11720331503fa3c9028f0e18a.jpg",
+ },
+ {
+ "name": "Release",
+ "path": "https:\/\/cdn.akamai.steamstatic.com\/steamcommunity\/public\/images\/apps\/1113560\/88d76547290c9c200536cbb1a48d255303010a5b.jpg",
+ },
+ {
+ "name": "Gratitude",
+ "path": "https:\/\/cdn.akamai.steamstatic.com\/steamcommunity\/public\/images\/apps\/1113560\/d9b8fd4cc2e4fc270edf18b177729b07e8a32cc9.jpg",
+ },
+ {
+ "name": "Key Collector",
+ "path": "https:\/\/cdn.akamai.steamstatic.com\/steamcommunity\/public\/images\/apps\/1113560\/6629579d96114c2a268898911634495f8235ce08.jpg",
+ },
+ {
+ "name": "A World in Flux",
+ "path": "https:\/\/cdn.akamai.steamstatic.com\/steamcommunity\/public\/images\/apps\/1113560\/4b3b4bcf8267f93bb73600cc688323c2c910e0b5.jpg",
+ },
+ {
+ "name": "Combo Fanatic",
+ "path": "https:\/\/cdn.akamai.steamstatic.com\/steamcommunity\/public\/images\/apps\/1113560\/d19d83d2254a60554435a1e1d99896e96bdf64d5.jpg",
+ },
+ {
+ "name": "Combo Master",
+ "path": "https:\/\/cdn.akamai.steamstatic.com\/steamcommunity\/public\/images\/apps\/1113560\/d62e08ce00fd14c0fb72acebdfb09c838803a102.jpg",
+ },
+ ],
+ },
+ "release_date": {
+ "coming_soon": false,
+ "date": "23 Apr, 2021",
+ },
+ "support_info": {
+ "url": "https:\/\/support.square-enix-games.com\/",
+ "email": "",
+ },
+ "background": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/page_bg_generated_v6b.jpg?t=1673963725",
+ "background_raw": "https:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/1113560\/page.bg.jpg?t=1673963725",
+ "content_descriptors": {
+ "ids": [
+ 2,
+ 5,
+ ],
+ "notes": "NieR Replicant ver.1.22474487139… contains adult scenes and theme, strong language in certain areas of the game, including blood, violence, criminal acts and killing. ",
+ },
+ },
+ },
+ },
+ })
+ }
+
+ //Steam api
+ if (/^https:..api.steampowered.com.*$/.test(url)) {
+ //Owned games
+ if (/^.*IPlayerService.GetOwnedGames.v0001.*$/.test(url)) {
+ console.debug(`metrics/compute/mocks > mocking steam api result > ${url}`)
+ return ({
+ status: 200,
+ data: {
+ "response": {
+ "game_count": 2,
+ "games": [
+ {
+ "appid": 524220,
+ "name": "NieR:Automata™",
+ "playtime_forever": 2693,
+ "img_icon_url": "ec431ecb2a5178c5a01bb15550f112f93af029bb",
+ "has_community_visible_stats": true,
+ "playtime_windows_forever": 3,
+ "playtime_mac_forever": 0,
+ "playtime_linux_forever": 0,
+ "rtime_last_played": 1582407120,
+ },
+ {
+ "appid": 1113560,
+ "name": "NieR Replicant ver.1.22474487139...",
+ "playtime_forever": 2661,
+ "img_icon_url": "8ca16d03995179d1ba3a2263e03db170100c6382",
+ "has_community_visible_stats": true,
+ "playtime_windows_forever": 2661,
+ "playtime_mac_forever": 0,
+ "playtime_linux_forever": 0,
+ "rtime_last_played": 1625611102,
+ "content_descriptorids": [
+ 2,
+ 5,
+ ],
+ },
+ ],
+ },
+ },
+ })
+ }
+ //Game schema
+ if (/^.*ISteamUserStats.GetSchemaForGame.v0002.*$/.test(url)) {
+ console.debug(`metrics/compute/mocks > mocking steam api result > ${url}`)
+ return ({
+ status: 200,
+ data: /appid=524220/.test(url)
+ ? {
+ "game": {
+ "gameName": "TRAIN",
+ "gameVersion": "14",
+ "availableGameStats": {
+ "achievements": [
+ {
+ "name": "ACH_VISITED_BUNKER",
+ "defaultvalue": 0,
+ "displayName": "Resuscitated Body",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/3396a4732f6c521900195182eadc9c523988e271.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_VISITED_RUINS_CITY",
+ "defaultvalue": 0,
+ "displayName": "Vestiges of Prosperity",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/a68518be86868a69b68d64b9720d65a33068713f.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_CLEAR_DESERT_AREA",
+ "defaultvalue": 0,
+ "displayName": "It's a Healthy Baby Boy!",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/9c038749e650134ddbe142a76c7a920e98947a82.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_CLEAR_AMUSEMENT_PARK",
+ "defaultvalue": 0,
+ "displayName": "We Await Your Next Visit",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/e028dca2f5773e58e6a36c0bbb5e3dfc4de1806a.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_CLEAR_ALIEN_SHIP",
+ "defaultvalue": 0,
+ "displayName": "Creation and Insurrection",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/52cadba291448ae488147c0a31e9ffddd64adab7.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_CLEAR_CASTLE_FOREST",
+ "defaultvalue": 0,
+ "displayName": "The Mechanical Kingdom",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/f57deb02acdf63c9cf9adc21abb5a3158db77cfa.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_CLEAR_SUBMERGE_CITY",
+ "defaultvalue": 0,
+ "displayName": "Ruler of the Deep",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/6af7569b29b4f6f2b62f4a8d4b3be6f25183e8da.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_CLEAR_COPY_CITY",
+ "defaultvalue": 0,
+ "displayName": "Those Who Love Humans",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/ef85393debcb1c87e0f48f50b8afd89305d65c73.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_CLEAR_ROBOT_MT",
+ "defaultvalue": 0,
+ "displayName": "Iron Soul",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/80808a96458c14f827bb66a12c1ef0a5c877b9d4.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_CLEAR_A",
+ "defaultvalue": 0,
+ "displayName": "One Battle Ends",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5172a623c717e83a83c41b52f52e9b39077f0289.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_CLEAR_B",
+ "defaultvalue": 0,
+ "displayName": "A New Battle Begins",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/91df4ff96e60f0f0434afd1105c82a59dddb20a9.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_SEE_2B_DIE",
+ "defaultvalue": 0,
+ "displayName": "Final Wish",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/9337b450a269e175ac5c96606237f7b5cedf52e4.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_PLAY_A2_FIRST_TIME",
+ "defaultvalue": 0,
+ "displayName": "Treacherous Blade",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/f8bbe8253972c94d1692dcc3733e98f37c0fd92e.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_LAST_REQUEST_PASCAL",
+ "defaultvalue": 0,
+ "displayName": "Farewell, Pascal",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/392b60acb70e7d048edbd4de5cfb5bb39ccc524c.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_KILL_ROBOT_BROTHER",
+ "defaultvalue": 0,
+ "displayName": "Justice",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/c81d259248687088bc59cdb50a668434bbb1e246.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_DEVOLA_NOVEL_END",
+ "defaultvalue": 0,
+ "displayName": "Crime and Punishment",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/9eb6d496221f65495a09764d3ae1ec453f12208f.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_CLEAR_9S",
+ "defaultvalue": 0,
+ "displayName": "Leaving for the New World",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/f92c92e085c3d6edec542f25b3561d8eb810c5d7.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_CLEAR_A2",
+ "defaultvalue": 0,
+ "displayName": "Beautiful World",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/c36712e0b97b65ee1ecb027db8e3ff8798d3bb55.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_TRUE_END",
+ "defaultvalue": 0,
+ "displayName": "The Minds That Emerged",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/2989eb6c7f2918ecfc7c756e401a271c17157c74.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_RECOVERY_SELF_CORPSE",
+ "defaultvalue": 0,
+ "displayName": "The Circle of Death",
+ "hidden": 0,
+ "description": "Have your body collected.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/076ec7fa27bb95797b07da45c3b65af5c3a447a9.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_RECOVERY_CORPSE",
+ "defaultvalue": 0,
+ "displayName": "Cherish Our Resources",
+ "hidden": 0,
+ "description": "Have 100 bodies collected.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/1940860e6bd542954652853f5fbbe8bcd58fbac4.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_CLEAR_QUEST_FIRST_TIME",
+ "defaultvalue": 0,
+ "displayName": "First Errand",
+ "hidden": 0,
+ "description": "Complete your first quest.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/f31eb13d16a028fb3de23f5623955b8441e57c7c.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_CLEAR_MANY_QUEST",
+ "defaultvalue": 0,
+ "displayName": "The Mercenary",
+ "hidden": 0,
+ "description": "80% of all quests completed.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/bbdd00f461406cbf64726d753dac5f3abe066ef8.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_COLLECT_ARCHIVE",
+ "defaultvalue": 0,
+ "displayName": "Information Master",
+ "hidden": 0,
+ "description": "80% of all archives found.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/8d536964d4eabac2027adfc2705661fea25ede6b.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_COLLECT_EM_LIST",
+ "defaultvalue": 0,
+ "displayName": "Destruction is My Job",
+ "hidden": 0,
+ "description": "80% of all unit data unlocked.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/8048ddee99c03defd4562520d28bc4445938bda0.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_COLLECT_CHIP",
+ "defaultvalue": 0,
+ "displayName": "Chip Collector",
+ "hidden": 0,
+ "description": "80% of all plug-in chips collected.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/c8600b37d39a3d09ba4730a480d4ea5c87790a22.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_HAS_ALL_ACTIVE_SKILL",
+ "defaultvalue": 0,
+ "displayName": "Weapons Maniac",
+ "hidden": 0,
+ "description": "All Pod programs obtained.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/bd78a999e5b0eea50d60e7e1158a93a58d82a517.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_WEAPON_LV_MAX",
+ "defaultvalue": 0,
+ "displayName": "Tools of the Trade",
+ "hidden": 0,
+ "description": "Any weapon upgraded to the highest level.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/6bd93e150b03f8de3c857e3589a4e92eed0b03cc.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_WEAPON_LV_MAX_ALL",
+ "defaultvalue": 0,
+ "displayName": "Inorganic Blade",
+ "hidden": 0,
+ "description": "All weapons upgraded to the highest level.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/54bf4e0bef1e06348ccc291d1e87d49ce58e63db.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_POD_LV_MAX_ALL",
+ "defaultvalue": 0,
+ "displayName": "Supreme Support Weapons",
+ "hidden": 0,
+ "description": "All Pods upgraded to the highest level.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/254d29f9ddf775427dec4ea2e2456ee32100f0bc.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_CLEAR_HACKING_9S",
+ "defaultvalue": 0,
+ "displayName": "Fighting's Not My Thing",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/aa7810edbe2376ebe0456f553bd3d33a139bd539.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_HACKING_KILL",
+ "defaultvalue": 0,
+ "displayName": "A Scanner's Power",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/a8077834157c6407d5855157d0a902f5415edf07.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_REMOTO_KILL",
+ "defaultvalue": 0,
+ "displayName": "Machines vs. Machines",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/ac4bc0d5ea71c94f14b5b6d18c7aee30804fff55.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_BERSERKER_KILL",
+ "defaultvalue": 0,
+ "displayName": "The Power of Hate",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/ca0c9026a53cc307519c09b43b198823bd4a28b5.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_SHOOTING",
+ "defaultvalue": 0,
+ "displayName": "Ruler of the Skies",
+ "hidden": 0,
+ "description": "255 enemies destroyed using a flight unit.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/ed342c90ae36c5655e9e5ff2bef89162a5af8f62.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_EXTRACTION",
+ "defaultvalue": 0,
+ "displayName": "Harvest King",
+ "hidden": 0,
+ "description": "Materials gathered at a hidden harvest point 10 times.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/7434e8cf28fa79d62acf02c37359155c42223bef.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_GET_ALL_POD",
+ "defaultvalue": 0,
+ "displayName": "Pod Hunter",
+ "hidden": 0,
+ "description": "All Pods found.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/1f40b92b07294e7c25ef3b1d19dfb14f452e662c.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_RICH_MAN",
+ "defaultvalue": 0,
+ "displayName": "Desire Without Emotion",
+ "hidden": 0,
+ "description": "At least 100,000 G in possession.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/e899966832c71f405fc33a0e0302212efc66ee5a.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_ANIMAL_RUN",
+ "defaultvalue": 0,
+ "displayName": "Animal Rider",
+ "hidden": 0,
+ "description": "Any animal ridden for 5 kilometers.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/6985b5f0ff4c7b03aa8e652015e548d72198c575.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_FISHING",
+ "defaultvalue": 0,
+ "displayName": "A Round by the Pond",
+ "hidden": 0,
+ "description": "20 different kinds of fish caught.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/08f09efe530ca0dc577b3808a7d7a94a936df655.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_NPC_KILL",
+ "defaultvalue": 0,
+ "displayName": "Wait! Don't Kill Me!",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/41b7f8c6625f9a566c625b49f1c6cc8314202aad.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_SKIRT_ESCAPE",
+ "defaultvalue": 0,
+ "displayName": "What Are You Doing?",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/bf5e3ee4db9b1cd77223e1f30657325fda93b9f2.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_PANTS",
+ "defaultvalue": 0,
+ "displayName": "Not That I Mind...",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/31aef58a56f5e92d65437f17718c3dd01c54cf56.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_EMILE_SHOP",
+ "defaultvalue": 0,
+ "displayName": "Come Take a Look!",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/99f6388ed11b885d386eb979a2a8736290a4a235.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_KILL_EM1010",
+ "defaultvalue": 0,
+ "displayName": "Naughty Children",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/6e29e9ce653df1b4f4e51778df371f40851e409c.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_BAD_END",
+ "defaultvalue": 0,
+ "displayName": "Transcendent Being",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5649159a9e23e6f490360e0de38dd65da1fa9fdb.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ {
+ "name": "ACH_CALL_AT_KAINES_ROOM",
+ "defaultvalue": 0,
+ "displayName": "Lunar Tear",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/6b6e361e2917f8996a39b977b8df7a8fc640729d.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/524220/5cad263135d7f42d3304918370f492b353aa46f3.jpg",
+ },
+ ],
+ },
+ },
+ }
+ : {
+ "game": {
+ "gameName": "",
+ "gameVersion": "30",
+ "availableGameStats": {
+ "achievements": [
+ {
+ "name": "ACHIEVEMENT_0000",
+ "defaultvalue": 0,
+ "displayName": "The Final Verse",
+ "hidden": 0,
+ "description": "Congratulations! Thank you for playing!",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/a9369e5eddeb1486ffd849aa3820607353ddbc23.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0010",
+ "defaultvalue": 0,
+ "displayName": "The Book of Legend",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/6d11bfa34275061352048988a9202c3194259851.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0020",
+ "defaultvalue": 0,
+ "displayName": "The Wild Companion",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/8ac7d0d717ccda449162f94f81054073e9679fc5.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0030",
+ "defaultvalue": 0,
+ "displayName": "The Mellow Companion",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/1981aa8fe7fb43d11720331503fa3c9028f0e18a.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0040",
+ "defaultvalue": 0,
+ "displayName": "Release",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/88d76547290c9c200536cbb1a48d255303010a5b.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0050",
+ "defaultvalue": 0,
+ "displayName": "Gratitude",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/d9b8fd4cc2e4fc270edf18b177729b07e8a32cc9.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0060",
+ "defaultvalue": 0,
+ "displayName": "Key Collector",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/6629579d96114c2a268898911634495f8235ce08.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0070",
+ "defaultvalue": 0,
+ "displayName": "A World in Flux",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/4b3b4bcf8267f93bb73600cc688323c2c910e0b5.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0080",
+ "defaultvalue": 0,
+ "displayName": "Combo Fanatic",
+ "hidden": 0,
+ "description": "You pulled off a 50-hit combo.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/d19d83d2254a60554435a1e1d99896e96bdf64d5.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0090",
+ "defaultvalue": 0,
+ "displayName": "Combo Master",
+ "hidden": 0,
+ "description": "You pulled off a 100-hit combo.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/d62e08ce00fd14c0fb72acebdfb09c838803a102.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0100",
+ "defaultvalue": 0,
+ "displayName": "The Magic Man",
+ "hidden": 0,
+ "description": "You learned every type of magic.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/2d7124c94623283b25cd1889cc6599d23b8cab5c.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0110",
+ "defaultvalue": 0,
+ "displayName": "Wordsmith",
+ "hidden": 0,
+ "description": "You collected 50 percent of all words.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/8a8b550048c266f8132d1d6c36967f2dee42a0ec.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0120",
+ "defaultvalue": 0,
+ "displayName": "Weapons Collector",
+ "hidden": 0,
+ "description": "You found every weapon.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/36b528043b6af91f11116aeed684d950722f1d60.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0130",
+ "defaultvalue": 0,
+ "displayName": "Village Handyman",
+ "hidden": 0,
+ "description": "You completed 10 quests.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/93856660d44eccb4edc0ebbb9d63a5445e688528.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0140",
+ "defaultvalue": 0,
+ "displayName": "Jack of All Trades",
+ "hidden": 0,
+ "description": "You completed 20 quests.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/ca294c1039d08d7c72682ca2a8dd88bca4a48cf0.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0150",
+ "defaultvalue": 0,
+ "displayName": "Go-To Guy",
+ "hidden": 0,
+ "description": "You completed 30 quests.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/ca294c1039d08d7c72682ca2a8dd88bca4a48cf0.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0160",
+ "defaultvalue": 0,
+ "displayName": "Dear Diary",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/676d5f5e2cd45a24738dc6078031f14d56ed923e.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0170",
+ "defaultvalue": 0,
+ "displayName": "Man of Means",
+ "hidden": 0,
+ "description": "You accumulated 1,000,000 pieces of gold.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/d7fb76788b77cd73639cefd292567e596ecc912a.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0180",
+ "defaultvalue": 0,
+ "displayName": "Educated Warrior",
+ "hidden": 0,
+ "description": "You read all novel segments about your friends' pasts.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/d59ca2f03b4015bc9b6134d921262f8768f843f1.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0190",
+ "defaultvalue": 0,
+ "displayName": "Call Her Back",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/cfbbf964649924e25af995c47f9207e6bdb0e82a.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0200",
+ "defaultvalue": 0,
+ "displayName": "Lingering Memories",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/7f65bb588647210451d003101fb6ce7ca335fb92.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0210",
+ "defaultvalue": 0,
+ "displayName": "Thank You",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/acd8fa3e92c01655b9dfeb91ea13b7c997df3825.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0220",
+ "defaultvalue": 0,
+ "displayName": "Something Very Special",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/5bc97058ccbe271edd966ca6ee9d0f4aefc0307b.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0230",
+ "defaultvalue": 0,
+ "displayName": "e8 a8 98 e6 86 b6 e3 82 b5 e3 83 bc e3 83 90 e3 83 bc",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/d556f212037cb9645aa17c87c1a01a34ccacfaa5.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0240",
+ "defaultvalue": 0,
+ "displayName": "Legendary Gardener",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/636ac036eb45750ac6d125ea8d6936ed1130266d.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0250",
+ "defaultvalue": 0,
+ "displayName": "Fish of Legend",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/b5e054f5234a31c7bbc3b458c0f3ae5289069b81.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0260",
+ "defaultvalue": 0,
+ "displayName": "A Round by the Pond",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/c67e64eb2e069c0b115a5feea3cb02451df4f11a.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0270",
+ "defaultvalue": 0,
+ "displayName": "Material Hunter",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/c0d448fc0d573abb796053bf7f2b12eb0b6f4c32.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0280",
+ "defaultvalue": 0,
+ "displayName": "Upgrade Apprentice",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/369a20404467230c20b158f7a3dd77699be9effd.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0290",
+ "defaultvalue": 0,
+ "displayName": "Reform Specialist",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/3abb815e20d23a97e80b2a10742cc3afd38e53cc.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0300",
+ "defaultvalue": 0,
+ "displayName": "Forging Master",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/ef2b7d68560bcfb3d32347e8884a0b736be4750b.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0310",
+ "defaultvalue": 0,
+ "displayName": "All Aboared!",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/669fb049d3b0d0ac200125736144e4e274c7620e.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0320",
+ "defaultvalue": 0,
+ "displayName": "The Sheep Whisperer",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/3c40216c95eb8d9acdb90435760c921dc6bd3954.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0330",
+ "defaultvalue": 0,
+ "displayName": "Lightspeed Fighter",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/f61dd8bd207e6a897ca5fa0297dbfbab0ff51103.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0340",
+ "defaultvalue": 0,
+ "displayName": "King of the Lost Shrine",
+ "hidden": 0,
+ "description": "You defeated Gretel within three minutes and twenty seconds.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/70883d0681b1993aa430bbcd8f9d4241f637b3ce.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0350",
+ "defaultvalue": 0,
+ "displayName": "A True Friend",
+ "hidden": 0,
+ "description": "You stopped the berserk Kainé within one minute.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/0b7d266b6959f86fa40ce0108cda8d7c7df207f9.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0360",
+ "defaultvalue": 0,
+ "displayName": "Boss of the Junk Heap",
+ "hidden": 0,
+ "description": "You defeated P-33 within four and a half minutes.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/602644eaf05ce46aa16b2d58299210d68e114d92.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0370",
+ "defaultvalue": 0,
+ "displayName": "Scourge of The Aerie",
+ "hidden": 0,
+ "description": "You defeated Wendy within eight and a half minutes.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/0ef270a84980596473ae130aee58f8275ee15ef2.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0380",
+ "defaultvalue": 0,
+ "displayName": "Protector of Facade",
+ "hidden": 0,
+ "description": "You defeated Roc within three and a half minutes.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/d9e9a588af83858f08ad062bba1d2148e23fdcde.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0390",
+ "defaultvalue": 0,
+ "displayName": "The Little Mermaid",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/0c6faf92c5cdfb91223238bfd12a0829bd8b13a9.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0400",
+ "defaultvalue": 0,
+ "displayName": "Permission Granted",
+ "hidden": 0,
+ "description": "You drove off Devola and Popola within three minutes.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/52b749ff62320430f2440c7dff89898e9fae3473.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0410",
+ "defaultvalue": 0,
+ "displayName": "A Dirge for the Hero",
+ "hidden": 0,
+ "description": "You defeated Goose within two minutes.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/c33b07dfe29428d7caab6a1f7c6a13c49e539ceb.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0420",
+ "defaultvalue": 0,
+ "displayName": "Soul Crusher",
+ "hidden": 0,
+ "description": "You defeated Devola and Popola within three and a half minutes.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/f80e7782c38c6657bb6a39f9c8904219e1cb3d1a.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0430",
+ "defaultvalue": 0,
+ "displayName": "Book Burner",
+ "hidden": 0,
+ "description": "You defeated Grimoire Noir within one and a half minutes.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/f0c1804eee52d941045b24beb6353967ad522eb7.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0440",
+ "defaultvalue": 0,
+ "displayName": "The Once and Final King",
+ "hidden": 0,
+ "description": "You defeated the Shadowlord within four minutes and twenty seconds.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/9395b1e23f8ffecde59ac3d84d4c17844d9c13e9.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0450",
+ "defaultvalue": 0,
+ "displayName": "The Strongest Bond",
+ "hidden": 0,
+ "description": "You defeated the berserk Kainé within three and a half minutes.",
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/66a42f466f875af265a505380e0c9754c8d2c550.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/dccf83b1927eb511d794ec172eb2a8737aa5f317.jpg",
+ },
+ {
+ "name": "ACHIEVEMENT_0460",
+ "defaultvalue": 0,
+ "displayName": "Daredevil",
+ "hidden": 1,
+ "icon": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/9c70d4e9d69a09bcda912fa4323bded42b9d183a.jpg",
+ "icongray": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/1113560/67f2dca4872e41dd6ce5b923edf54bf16d42ef53.jpg",
+ },
+ ],
+ },
+ },
+ },
+ })
+ }
+
+ //Player level
+ if (/^.*IPlayerService.GetSteamLevel.v1.*$/.test(url)) {
+ console.debug(`metrics/compute/mocks > mocking steam api result > ${url}`)
+ return ({
+ status: 200,
+ data: {
+ response: {
+ player_level: faker.datatype.number(500),
+ },
+ },
+ })
+ }
+
+ //Player summary
+ if (/^.*ISteamUser.GetPlayerSummaries.v0002.*$/.test(url)) {
+ console.debug(`metrics/compute/mocks > mocking steam api result > ${url}`)
+ return ({
+ status: 200,
+ data: {
+ "response": {
+ "players": [
+ {
+ "steamid": "0",
+ "communityvisibilitystate": 3,
+ "profilestate": 1,
+ "personaname": faker.internet.userName(),
+ "commentpermission": 2,
+ "profileurl": "https://steamcommunity.com/id",
+ "avatar": null,
+ "avatarmedium": null,
+ "avatarfull": null,
+ "avatarhash": "562c4d8db58d44af73b0f5f46d2f1bb5a24e54b3",
+ "lastlogoff": 1676688802,
+ "personastate": 0,
+ "primaryclanid": "0",
+ "timecreated": 1366386002,
+ "personastateflags": 0,
+ "loccountrycode": "FR",
+ },
+ ],
+ },
+ },
+ })
+ }
+
+ //Player achievements
+ if (/^.*ISteamUserStats.GetPlayerAchievements.v0001.*$/.test(url)) {
+ console.debug(`metrics/compute/mocks > mocking steam api result > ${url}`)
+ return ({
+ status: 200,
+ data: /appid=524220/.test(url)
+ ? {
+ "playerstats": {
+ "steamID": "76561198089224516",
+ "gameName": "NieR:Automata™",
+ "achievements": [
+ {
+ "apiname": "ACH_VISITED_BUNKER",
+ "achieved": 1,
+ "unlocktime": 1565069702,
+ "name": "Resuscitated Body",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_VISITED_RUINS_CITY",
+ "achieved": 1,
+ "unlocktime": 1565376632,
+ "name": "Vestiges of Prosperity",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_CLEAR_DESERT_AREA",
+ "achieved": 1,
+ "unlocktime": 1565974024,
+ "name": "It's a Healthy Baby Boy!",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_CLEAR_AMUSEMENT_PARK",
+ "achieved": 1,
+ "unlocktime": 1565974917,
+ "name": "We Await Your Next Visit",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_CLEAR_ALIEN_SHIP",
+ "achieved": 1,
+ "unlocktime": 1565431434,
+ "name": "Creation and Insurrection",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_CLEAR_CASTLE_FOREST",
+ "achieved": 1,
+ "unlocktime": 1565433829,
+ "name": "The Mechanical Kingdom",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_CLEAR_SUBMERGE_CITY",
+ "achieved": 1,
+ "unlocktime": 1565434679,
+ "name": "Ruler of the Deep",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_CLEAR_COPY_CITY",
+ "achieved": 1,
+ "unlocktime": 1565441114,
+ "name": "Those Who Love Humans",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_CLEAR_ROBOT_MT",
+ "achieved": 1,
+ "unlocktime": 1565444308,
+ "name": "Iron Soul",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_CLEAR_A",
+ "achieved": 1,
+ "unlocktime": 1565447636,
+ "name": "One Battle Ends",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_CLEAR_B",
+ "achieved": 1,
+ "unlocktime": 1565532631,
+ "name": "A New Battle Begins",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_SEE_2B_DIE",
+ "achieved": 1,
+ "unlocktime": 1565537220,
+ "name": "Final Wish",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_PLAY_A2_FIRST_TIME",
+ "achieved": 1,
+ "unlocktime": 1565537371,
+ "name": "Treacherous Blade",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_LAST_REQUEST_PASCAL",
+ "achieved": 1,
+ "unlocktime": 1565548811,
+ "name": "Farewell, Pascal",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_KILL_ROBOT_BROTHER",
+ "achieved": 1,
+ "unlocktime": 1565551466,
+ "name": "Justice",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_DEVOLA_NOVEL_END",
+ "achieved": 1,
+ "unlocktime": 1565553188,
+ "name": "Crime and Punishment",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_CLEAR_9S",
+ "achieved": 1,
+ "unlocktime": 1565558387,
+ "name": "Leaving for the New World",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_CLEAR_A2",
+ "achieved": 1,
+ "unlocktime": 1565556538,
+ "name": "Beautiful World",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_TRUE_END",
+ "achieved": 1,
+ "unlocktime": 1565558387,
+ "name": "The Minds That Emerged",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_RECOVERY_SELF_CORPSE",
+ "achieved": 1,
+ "unlocktime": 1565431434,
+ "name": "The Circle of Death",
+ "description": "Have your body collected.",
+ },
+ {
+ "apiname": "ACH_RECOVERY_CORPSE",
+ "achieved": 1,
+ "unlocktime": 1565473831,
+ "name": "Cherish Our Resources",
+ "description": "Have 100 bodies collected.",
+ },
+ {
+ "apiname": "ACH_CLEAR_QUEST_FIRST_TIME",
+ "achieved": 1,
+ "unlocktime": 1565378552,
+ "name": "First Errand",
+ "description": "Complete your first quest.",
+ },
+ {
+ "apiname": "ACH_CLEAR_MANY_QUEST",
+ "achieved": 1,
+ "unlocktime": 1565543033,
+ "name": "The Mercenary",
+ "description": "80% of all quests completed.",
+ },
+ {
+ "apiname": "ACH_COLLECT_ARCHIVE",
+ "achieved": 1,
+ "unlocktime": 1565897848,
+ "name": "Information Master",
+ "description": "80% of all archives found.",
+ },
+ {
+ "apiname": "ACH_COLLECT_EM_LIST",
+ "achieved": 1,
+ "unlocktime": 1565551063,
+ "name": "Destruction is My Job",
+ "description": "80% of all unit data unlocked.",
+ },
+ {
+ "apiname": "ACH_COLLECT_CHIP",
+ "achieved": 1,
+ "unlocktime": 1565470147,
+ "name": "Chip Collector",
+ "description": "80% of all plug-in chips collected.",
+ },
+ {
+ "apiname": "ACH_HAS_ALL_ACTIVE_SKILL",
+ "achieved": 1,
+ "unlocktime": 1565901900,
+ "name": "Weapons Maniac",
+ "description": "All Pod programs obtained.",
+ },
+ {
+ "apiname": "ACH_WEAPON_LV_MAX",
+ "achieved": 1,
+ "unlocktime": 1565520201,
+ "name": "Tools of the Trade",
+ "description": "Any weapon upgraded to the highest level.",
+ },
+ {
+ "apiname": "ACH_WEAPON_LV_MAX_ALL",
+ "achieved": 1,
+ "unlocktime": 1565892897,
+ "name": "Inorganic Blade",
+ "description": "All weapons upgraded to the highest level.",
+ },
+ {
+ "apiname": "ACH_POD_LV_MAX_ALL",
+ "achieved": 1,
+ "unlocktime": 1565892998,
+ "name": "Supreme Support Weapons",
+ "description": "All Pods upgraded to the highest level.",
+ },
+ {
+ "apiname": "ACH_CLEAR_HACKING_9S",
+ "achieved": 1,
+ "unlocktime": 1565448443,
+ "name": "Fighting's Not My Thing",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_HACKING_KILL",
+ "achieved": 1,
+ "unlocktime": 1565483879,
+ "name": "A Scanner's Power",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_REMOTO_KILL",
+ "achieved": 1,
+ "unlocktime": 1565883806,
+ "name": "Machines vs. Machines",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_BERSERKER_KILL",
+ "achieved": 1,
+ "unlocktime": 1565903370,
+ "name": "The Power of Hate",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_SHOOTING",
+ "achieved": 1,
+ "unlocktime": 1565433829,
+ "name": "Ruler of the Skies",
+ "description": "255 enemies destroyed using a flight unit.",
+ },
+ {
+ "apiname": "ACH_EXTRACTION",
+ "achieved": 1,
+ "unlocktime": 1565892563,
+ "name": "Harvest King",
+ "description": "Materials gathered at a hidden harvest point 10 times.",
+ },
+ {
+ "apiname": "ACH_GET_ALL_POD",
+ "achieved": 1,
+ "unlocktime": 1565524165,
+ "name": "Pod Hunter",
+ "description": "All Pods found.",
+ },
+ {
+ "apiname": "ACH_RICH_MAN",
+ "achieved": 1,
+ "unlocktime": 1565467456,
+ "name": "Desire Without Emotion",
+ "description": "At least 100,000 G in possession.",
+ },
+ {
+ "apiname": "ACH_ANIMAL_RUN",
+ "achieved": 1,
+ "unlocktime": 1565522297,
+ "name": "Animal Rider",
+ "description": "Any animal ridden for 5 kilometers.",
+ },
+ {
+ "apiname": "ACH_FISHING",
+ "achieved": 1,
+ "unlocktime": 1565976316,
+ "name": "A Round by the Pond",
+ "description": "20 different kinds of fish caught.",
+ },
+ {
+ "apiname": "ACH_NPC_KILL",
+ "achieved": 1,
+ "unlocktime": 1565481959,
+ "name": "Wait! Don't Kill Me!",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_SKIRT_ESCAPE",
+ "achieved": 1,
+ "unlocktime": 1565902246,
+ "name": "What Are You Doing?",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_PANTS",
+ "achieved": 1,
+ "unlocktime": 1565903882,
+ "name": "Not That I Mind...",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_EMILE_SHOP",
+ "achieved": 1,
+ "unlocktime": 1565435609,
+ "name": "Come Take a Look!",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_KILL_EM1010",
+ "achieved": 1,
+ "unlocktime": 1565889756,
+ "name": "Naughty Children",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_BAD_END",
+ "achieved": 1,
+ "unlocktime": 1565976624,
+ "name": "Transcendent Being",
+ "description": "",
+ },
+ {
+ "apiname": "ACH_CALL_AT_KAINES_ROOM",
+ "achieved": 1,
+ "unlocktime": 1565903768,
+ "name": "Lunar Tear",
+ "description": "",
+ },
+ ],
+ "success": true,
+ },
+ }
+ : {
+ "playerstats": {
+ "steamID": "76561198089224516",
+ "gameName": "NieR Replicant ver.1.22474487139...",
+ "achievements": [
+ {
+ "apiname": "ACHIEVEMENT_0000",
+ "achieved": 0,
+ "unlocktime": 0,
+ "name": "The Final Verse",
+ "description": "Congratulations! Thank you for playing!",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0010",
+ "achieved": 1,
+ "unlocktime": 1623873057,
+ "name": "The Book of Legend",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0020",
+ "achieved": 1,
+ "unlocktime": 1624294156,
+ "name": "The Wild Companion",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0030",
+ "achieved": 1,
+ "unlocktime": 1624466800,
+ "name": "The Mellow Companion",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0040",
+ "achieved": 1,
+ "unlocktime": 1624471033,
+ "name": "Release",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0050",
+ "achieved": 1,
+ "unlocktime": 1625520706,
+ "name": "Gratitude",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0060",
+ "achieved": 1,
+ "unlocktime": 1624486870,
+ "name": "Key Collector",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0070",
+ "achieved": 1,
+ "unlocktime": 1624489046,
+ "name": "A World in Flux",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0080",
+ "achieved": 1,
+ "unlocktime": 1624399122,
+ "name": "Combo Fanatic",
+ "description": "You pulled off a 50-hit combo.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0090",
+ "achieved": 1,
+ "unlocktime": 1624486870,
+ "name": "Combo Master",
+ "description": "You pulled off a 100-hit combo.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0100",
+ "achieved": 1,
+ "unlocktime": 1624397883,
+ "name": "The Magic Man",
+ "description": "You learned every type of magic.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0110",
+ "achieved": 1,
+ "unlocktime": 1625391608,
+ "name": "Wordsmith",
+ "description": "You collected 50 percent of all words.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0120",
+ "achieved": 1,
+ "unlocktime": 1625417752,
+ "name": "Weapons Collector",
+ "description": "You found every weapon.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0130",
+ "achieved": 1,
+ "unlocktime": 1624277733,
+ "name": "Village Handyman",
+ "description": "You completed 10 quests.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0140",
+ "achieved": 1,
+ "unlocktime": 1624305463,
+ "name": "Jack of All Trades",
+ "description": "You completed 20 quests.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0150",
+ "achieved": 1,
+ "unlocktime": 1624310689,
+ "name": "Go-To Guy",
+ "description": "You completed 30 quests.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0160",
+ "achieved": 1,
+ "unlocktime": 1625417752,
+ "name": "Dear Diary",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0170",
+ "achieved": 1,
+ "unlocktime": 1625396749,
+ "name": "Man of Means",
+ "description": "You accumulated 1,000,000 pieces of gold.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0180",
+ "achieved": 1,
+ "unlocktime": 1625590899,
+ "name": "Educated Warrior",
+ "description": "You read all novel segments about your friends' pasts.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0190",
+ "achieved": 1,
+ "unlocktime": 1624489684,
+ "name": "Call Her Back",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0200",
+ "achieved": 1,
+ "unlocktime": 1625437212,
+ "name": "Lingering Memories",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0210",
+ "achieved": 1,
+ "unlocktime": 1625592439,
+ "name": "Thank You",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0220",
+ "achieved": 1,
+ "unlocktime": 1625598751,
+ "name": "Something Very Special",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0230",
+ "achieved": 1,
+ "unlocktime": 1625610706,
+ "name": "e8 a8 98 e6 86 b6 e3 82 b5 e3 83 bc e3 83 90 e3 83 bc",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0240",
+ "achieved": 1,
+ "unlocktime": 1625515136,
+ "name": "Legendary Gardener",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0250",
+ "achieved": 1,
+ "unlocktime": 1625399355,
+ "name": "Fish of Legend",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0260",
+ "achieved": 1,
+ "unlocktime": 1625406465,
+ "name": "A Round by the Pond",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0270",
+ "achieved": 1,
+ "unlocktime": 1624305463,
+ "name": "Material Hunter",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0280",
+ "achieved": 1,
+ "unlocktime": 1625396391,
+ "name": "Upgrade Apprentice",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0290",
+ "achieved": 1,
+ "unlocktime": 1625517105,
+ "name": "Reform Specialist",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0300",
+ "achieved": 1,
+ "unlocktime": 1625517174,
+ "name": "Forging Master",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0310",
+ "achieved": 1,
+ "unlocktime": 1625522791,
+ "name": "All Aboared!",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0320",
+ "achieved": 1,
+ "unlocktime": 1625600972,
+ "name": "The Sheep Whisperer",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0330",
+ "achieved": 0,
+ "unlocktime": 0,
+ "name": "Lightspeed Fighter",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0340",
+ "achieved": 1,
+ "unlocktime": 1625516447,
+ "name": "King of the Lost Shrine",
+ "description": "You defeated Gretel within three minutes and twenty seconds.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0350",
+ "achieved": 1,
+ "unlocktime": 1625392124,
+ "name": "A True Friend",
+ "description": "You stopped the berserk Kainé within one minute.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0360",
+ "achieved": 1,
+ "unlocktime": 1625405608,
+ "name": "Boss of the Junk Heap",
+ "description": "You defeated P-33 within four and a half minutes.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0370",
+ "achieved": 1,
+ "unlocktime": 1625518485,
+ "name": "Scourge of The Aerie",
+ "description": "You defeated Wendy within eight and a half minutes.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0380",
+ "achieved": 1,
+ "unlocktime": 1625521457,
+ "name": "Protector of Facade",
+ "description": "You defeated Roc within three and a half minutes.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0390",
+ "achieved": 0,
+ "unlocktime": 0,
+ "name": "The Little Mermaid",
+ "description": "",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0400",
+ "achieved": 1,
+ "unlocktime": 1625589841,
+ "name": "Permission Granted",
+ "description": "You drove off Devola and Popola within three minutes.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0410",
+ "achieved": 1,
+ "unlocktime": 1625437212,
+ "name": "A Dirge for the Hero",
+ "description": "You defeated Goose within two minutes.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0420",
+ "achieved": 1,
+ "unlocktime": 1625595493,
+ "name": "Soul Crusher",
+ "description": "You defeated Devola and Popola within three and a half minutes.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0430",
+ "achieved": 1,
+ "unlocktime": 1625595593,
+ "name": "Book Burner",
+ "description": "You defeated Grimoire Noir within one and a half minutes.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0440",
+ "achieved": 1,
+ "unlocktime": 1625591368,
+ "name": "The Once and Final King",
+ "description": "You defeated the Shadowlord within four minutes and twenty seconds.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0450",
+ "achieved": 1,
+ "unlocktime": 1625596007,
+ "name": "The Strongest Bond",
+ "description": "You defeated the berserk Kainé within three and a half minutes.",
+ },
+ {
+ "apiname": "ACHIEVEMENT_0460",
+ "achieved": 1,
+ "unlocktime": 1625607419,
+ "name": "Daredevil",
+ "description": "",
+ },
+ ],
+ "success": true,
+ },
+ },
+ })
+ }
+ }
+}
diff --git a/tests/secrets.json b/tests/secrets.json
index 97ffeb99..809c6094 100644
--- a/tests/secrets.json
+++ b/tests/secrets.json
@@ -12,6 +12,7 @@
"GOOGLE_MAP_TOKEN": "MOCKED_TOKEN",
"STOCK_TOKEN":"MOCKED_TOKEN",
"CHESS_TOKEN":"MOCKED_TOKEN",
+ "STEAM_TOKEN":"MOCKED_TOKEN",
"SPLATOON_TOKEN":"{}",
"SPLATOON_STATINK_TOKEN":"MOCKED_TOKEN",
"POOPMAP_TOKEN":"MOCKED_TOKEN"