· 4 years ago · Apr 25, 2021, 11:56 PM
1// ==UserScript==
2// @name UK Lieutenancy Streak Counter (Automated)
3// @include /^(https?)?(\:)?(\/\/)?([^\/]*\.)?geoguessr\.com($|\/.*)/
4// @description Adds a UK Lieutanancy streak (with the councils of Scotland) to the GeoGuessr website
5// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
6// @require http://code.jquery.com/jquery-3.4.1.min.js
7// @grant GM_addStyle
8// ==/UserScript==
9
10//Get your API key from https://www.bigdatacloud.net and paste it in place of PASTE_YOUR_API_KEY_HERE (keep the apostrophes)
11//1 to increase streak manually, 2 to decrease streak manually, 0 to reset streak manually, and 8 to restore streak manually.
12
13let API_Key = 'PASTE_YOUR_API_KEY_HERE';
14
15var $ = window.jQuery
16let streak = parseInt(sessionStorage.getItem("Streak"), 10);
17let streakBackup = parseInt(sessionStorage.getItem("StreakBackup"), 10);
18let checked = parseInt(sessionStorage.getItem("Checked"), 10);
19let last_guess = [0,0];
20let guess_btn = null;
21let check_result = null;
22
23if(sessionStorage.getItem("Streak") == null) {
24 sessionStorage.setItem("Streak", 0);
25 streak = 0;
26};
27
28if(sessionStorage.getItem("StreakBackup") == null) {
29 sessionStorage.setItem("StreakBackup", 0);
30 streakBackup = 0;
31};
32
33if(sessionStorage.getItem("Checked") == null) {
34 sessionStorage.setItem("Checked", 0);
35 checked = 0;
36};
37var WalesDict = {
38 'GB-AGY': 'Gwynedd',
39 'GB-GWN': 'Gwynedd',
40 'GB-DEN': 'Clwyd',
41 'GB-FLN': 'Clwyd',
42 'GB-WRX': 'Clwyd',
43 'GB-POW': 'Powys',
44 'GB-CGN': 'Dyfed',
45 'GB-CMN': 'Dyfed',
46 'GB-PEM': 'Dyfed',
47 'GB-CRF': 'Gwent',
48 'GB-BGW': 'Gwent',
49 'GB-TOF': 'Gwent',
50 'GB-NWP': 'Gwent',
51 'GB-MON': 'Gwent',
52 'GB-VGL': 'South Glamorgan',
53 'GB-CRF': 'South Glamorgan',
54 'GB-SWA': 'West Glamorgan',
55 'GB-NTL': 'West Glamorgan',
56 'GB-BGE': 'Mid Glamorgan',
57 'GB-RCT': 'Mid Glamorgan',
58 'GB-MTY': 'Mid Glamorgan'
59}
60function updateStreak(newVariable) {
61 streak = newVariable;
62 if(document.getElementById("country-streak") != null) {
63 document.getElementById("country-streak").innerHTML = `<div id="country-streak"><font size="5"><h6>${streak}</h6></font></div>`;
64 };
65 if(document.getElementById("country-streak2") != null && document.getElementsByClassName("stack__item").length >= 3) {
66 document.getElementById("country-streak2").innerHTML = `<h2>Country Streak: ${streak}</h2><br>`;
67 };
68 if(document.getElementById("country-streak2") != null && !!document.querySelector('.result__more')) {
69 document.getElementById("country-streak2").innerHTML = `<h2>Country Streak: ${streak}</h2>`;
70 };
71};
72
73function addCounter(newDiv0) {
74 if(document.getElementsByClassName("game-status").length == 3) {
75 newDiv0 = document.createElement("div")
76 newDiv0.className = 'game-status';
77 document.getElementsByClassName("game-statuses")[0].appendChild(newDiv0);
78 newDiv0.innerHTML = `<div class="game-status__heading">Streak</div><div id="country-streak"><font size="5"><h6>${streak}</h6></font></div>`;
79 };
80 if(document.getElementsByClassName("game-status").length == 4 && document.getElementsByClassName("game-status__heading")[3].innerText == "TIME LEFT") {
81 newDiv0 = document.createElement("div")
82 newDiv0.className = 'game-status';
83 document.getElementsByClassName("game-statuses")[0].appendChild(newDiv0);
84 newDiv0.innerHTML = `<div class="game-status__heading">Streak</div><div id="country-streak"><font size="5"><h6>${streak}</h6></font></div>`;
85 };
86};
87
88function addCounterOnRefresh() {
89 setTimeout(function(){
90 addCounter();
91 },50);
92 setTimeout(function(){
93 addCounter();
94 },300);
95};
96
97function addCounter2() {
98 addCounter();
99 if(document.getElementsByClassName("game-status").length == 0) {
100 setTimeout(function() {
101 addCounter();
102 if(document.getElementsByClassName("game-status").length == 0) {
103 setTimeout(function() {
104 addCounter();
105 if(document.getElementsByClassName("game-status").length == 0) {
106 setTimeout(function() {
107 addCounter();
108 if(document.getElementsByClassName("game-status").length == 0) {
109 setTimeout(function() {
110 addCounter();
111 if(document.getElementsByClassName("game-status").length == 0) {
112 setTimeout(function() {
113 addCounter();
114 }, 4000);
115 };
116 }, 3000);
117 };
118 }, 2000);
119 };
120 }, 1200);
121 };
122 }, 400);
123 };
124};
125
126async function getUserAsync(location) {
127 let api = "https://api.bigdatacloud.net/data/reverse-geocode?latitude="+location[0]+"&longitude="+location[1]+"&localityLanguage=en&key="+API_Key
128 let response = await fetch(api)
129 .then(res => res.json())
130 .then((out) => {
131 return '' + out.principalSubdivisionCode
132 })
133 return response;
134};
135async function getUserAsync1(Location) {
136 let api = "https://api.bigdatacloud.net/data/reverse-geocode?latitude="+Location[0]+"&longitude="+Location[1]+"&localityLanguage=en&key="+API_Key
137 let response = await fetch(api)
138 .then(res => res.json())
139 .then((out) => {
140 return '' + out.localityInfo.administrative[2].isoCode
141 })
142 return response;
143};
144async function getUserAsync2(locatioN) {
145 let api = "https://api.bigdatacloud.net/data/reverse-geocode?latitude="+locatioN[0]+"&longitude="+locatioN[1]+"&localityLanguage=en&key="+API_Key
146 let response = await fetch(api)
147 .then(res => res.json())
148 .then((out) => {
149 return '' + out.localityInfo.administrative[3].isoCode
150 })
151 return response;
152};
153async function getUserAsync3(LocatioN) {
154 let api = "https://api.bigdatacloud.net/data/reverse-geocode?latitude="+LocatioN[0]+"&longitude="+LocatioN[1]+"&localityLanguage=en&key="+API_Key
155 let response = await fetch(api)
156 .then(res => res.json())
157 .then ((out) => {
158 return WalesDict[out.localityInfo.administrative[2].isoCode]
159 })
160 return response
161}
162function checkCountry() {
163 //try to recreate the existing check function, but make it check which UK country you are in
164 const game_tag = window.location.href.substring(window.location.href.lastIndexOf('/') + 1)
165 const api_url = "https://www.geoguessr.com/api/v3/games/"+game_tag
166 let rounds_tab = document.getElementsByClassName("game-status__body")
167 let current_round = rounds_tab[1].innerHTML.substr(0, rounds_tab[1].innerHTML.indexOf('/')).trim();
168 fetch(api_url)
169 .then(res => res.json())
170 .then((out) => {
171 rounds_tab = document.getElementsByClassName("game-status__body")
172 current_round = rounds_tab[1].innerHTML.substr(0, rounds_tab[1].innerHTML.indexOf('/')).trim();
173 let guess_counter = out.player.guesses.length
174 let guess = [out.player.guesses[guess_counter-1].lat,out.player.guesses[guess_counter-1].lng]
175 if (guess[0] == last_guess[0] && guess[1] == last_guess[1]) {
176 return;
177 };
178 last_guess = guess
179 let location = [out.rounds[guess_counter-1].lat,out.rounds[guess_counter-1].lng]
180 getUserAsync(location)
181 .then(loc => {
182 if (loc == 'GB-WLS'){
183 getUserAsync3(guess)
184 .then(guessss => {
185 getUserAsync3(location)
186 .then(locsss => {
187 if (guessss == locsss){
188 updateStreak(streak + 1);
189 sessionStorage.setItem("Streak", streak);
190 streakBackup = streak;
191 sessionStorage.setItem("StreakBackup", streak);
192 }
193 else {
194 if(streak == 0){
195 streakBackup = 0;
196 sessionStorage.setItem("StreakBackup", 0);
197 };
198 if(streak == 1){
199 updateStreak(0);
200 sessionStorage.setItem("Streak", 0);
201 document.getElementById("country-streak2").innerHTML = `<h2>Country Streak: ${streak}</h2>Your streak ended after correctly guessing <b>${streakBackup}</b> country.<br><br>`;
202 };
203 if(streak > 1){
204 updateStreak(0);
205 sessionStorage.setItem("Streak", 0);
206 document.getElementById("country-streak2").innerHTML = `<h2>Country Streak: ${streak}</h2>Your streak ended after correctly guessing <b>${streakBackup}</b> countries in a row.<br><br>`;
207 };
208 };
209 });
210 });
211 } else
212 if (loc == 'GB-SCT') {
213 getUserAsync1(guess)
214 .then(guesss => {
215 getUserAsync1(location)
216 .then(locss => {
217 if (guesss == locss){
218 updateStreak(streak + 1);
219 sessionStorage.setItem("Streak", streak);
220 streakBackup = streak;
221 sessionStorage.setItem("StreakBackup", streak);
222 }
223 else {
224 if(streak == 0){
225 streakBackup = 0;
226 sessionStorage.setItem("StreakBackup", 0);
227 };
228 if(streak == 1){
229 updateStreak(0);
230 sessionStorage.setItem("Streak", 0);
231 document.getElementById("country-streak2").innerHTML = `<h2>Country Streak: ${streak}</h2>Your streak ended after correctly guessing <b>${streakBackup}</b> country.<br><br>`;
232 };
233 if(streak > 1){
234 updateStreak(0);
235 sessionStorage.setItem("Streak", 0);
236 document.getElementById("country-streak2").innerHTML = `<h2>Country Streak: ${streak}</h2>Your streak ended after correctly guessing <b>${streakBackup}</b> countries in a row.<br><br>`;
237 };
238 };
239 });
240 });
241
242 } else if (loc == 'GB-ENG' || loc == 'GB-NIR'){
243 getUserAsync2(guess)
244 .then(gues => {
245 getUserAsync2(location)
246 .then(locs => {
247 if (gues == locs){
248 updateStreak(streak+1);
249 sessionStorage.setItem("Streak", streak);
250 streakBackup = streak;
251 sessionStorage.setItem("StreakBackup", streak);
252 }
253 else {
254 if(streak == 0){
255 streakBackup = 0;
256 sessionStorage.setItem("StreakBackup", 0);
257 };
258 if(streak == 1){
259 updateStreak(0);
260 sessionStorage.setItem("Streak", 0);
261 document.getElementById("country-streak2").innerHTML = `<h2>Country Streak: ${streak}</h2>Your streak ended after correctly guessing <b>${streakBackup}</b> country.<br><br>`;
262 };
263 if(streak > 1){
264 updateStreak(0);
265 sessionStorage.setItem("Streak", 0);
266 document.getElementById("country-streak2").innerHTML = `<h2>Country Streak: ${streak}</h2>Your streak ended after correctly guessing <b>${streakBackup}</b> countries in a row.<br><br>`;
267 };
268 };
269 });
270 });
271 } else {
272 document.getElementById("country-streak2").innerHTML = `<h2> Not the United Kingdom, carry on<br><br></h2>`
273 }
274 });
275 }) .catch(err => { throw err });;
276 };
277
278
279function addStreak1(newDiv1) {
280 if(document.getElementById("country-streak2") == null && document.getElementsByClassName("stack__item").length == 3 && location.pathname.startsWith("/game/")) {
281 newDiv1 = document.createElement("div")
282 document.getElementsByClassName("stack__item")[0].appendChild(newDiv1);
283 newDiv1.innerHTML = `<div id="country-streak2" style="text-align:center"><h2>Country Streak: ${streak}</h2><br></div>`;
284 };
285};
286
287function addStreak2(newDiv2) {
288 if(document.getElementById("country-streak2") == null && !!document.querySelector('.result__more') && location.pathname.startsWith("/game/")) {
289 newDiv2 = document.createElement("div")
290 document.getElementsByClassName("margin--bottom")[0].appendChild(newDiv2);
291 newDiv2.innerHTML = `<div id="country-streak2" style="text-align:center"><h2>Country Streak: ${streak}</h2></div>`;
292 };
293};
294
295function addStreak() {
296 if (!!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") == 0){
297 checkCountry();
298 checked = checked + 1;
299 sessionStorage.setItem("Checked", checked);
300 }
301 else if (!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") != 0) {
302 checked = 0;
303 sessionStorage.setItem("Checked", checked)
304 };
305 setTimeout(function() {
306 if (!!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") == 0){
307 checkCountry();
308 checked = checked + 1;
309 sessionStorage.setItem("Checked", checked);
310 }
311 else if (!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") != 0) {
312 checked = 0;
313 sessionStorage.setItem("Checked", checked)
314 };
315 }, 250);
316 setTimeout(function() {
317 if (!!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") == 0){
318 checkCountry();
319 checked = checked + 1;
320 sessionStorage.setItem("Checked", checked);
321 }
322 else if (!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") != 0) {
323 checked = 0;
324 sessionStorage.setItem("Checked", checked)
325 };
326 }, 500);
327 setTimeout(function() {
328 if (!!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") == 0){
329 checkCountry();
330 checked = checked + 1;
331 sessionStorage.setItem("Checked", checked);
332 }
333 else if (!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") != 0) {
334 checked = 0;
335 sessionStorage.setItem("Checked", checked)
336 };
337 }, 1200);
338 setTimeout(function() {
339 if (!!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") == 0){
340 checkCountry();
341 checked = checked + 1;
342 sessionStorage.setItem("Checked", checked);
343 }
344 else if (!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") != 0) {
345 checked = 0;
346 sessionStorage.setItem("Checked", checked)
347 };
348 }, 2000);
349 setTimeout(function(){
350 addStreak1();
351 },300);
352 setTimeout(function(){
353 addStreak1();
354 },500);
355 setTimeout(function(){
356 addStreak2();
357 },200);
358 setTimeout(function(){
359 addStreak2();
360 },400);
361 setTimeout(function(){
362 addStreak1();
363 addStreak2();
364 },1200);
365 setTimeout(function(){
366 addStreak1();
367 addStreak2();
368 },2000);
369};
370
371document.addEventListener('keypress', (e) => {
372 switch (e.key) {
373 case '1':
374 updateStreak(streak + 1);
375 sessionStorage.setItem("Streak", streak);
376 streakBackup = streak;
377 sessionStorage.setItem("StreakBackup", streak);
378 break;
379 case '2':
380 updateStreak(streak - 1);
381 sessionStorage.setItem("Streak", streak);
382 streakBackup = streak;
383 sessionStorage.setItem("StreakBackup", streak);
384 break;
385 case '8':
386 updateStreak(streakBackup + 1);
387 sessionStorage.setItem("Streak", streak);
388 streakBackup = streak;
389 sessionStorage.setItem("StreakBackup", streak);
390 break;
391 case '0':
392 updateStreak(0);
393 sessionStorage.setItem("Streak", 0);
394 streakBackup = 0;
395 sessionStorage.setItem("StreakBackup", 0);
396 break;
397 };
398});
399
400document.addEventListener('click', addCounter2, false);
401document.addEventListener('click', addStreak, false);
402document.addEventListener('load', addCounterOnRefresh(), false);