· 4 years ago · Apr 25, 2021, 11:40 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//Put your own API key from https://www.bigdatacloud.net below, in place of PUT_YOUR_API_KEY_HERE (keep the apostrophes)
11//1 to manually add streak, 2 to manually decrease streak, 0 to manually reset streak, and 8 to manually restore streak.
12
13let API_Key = 'PUT_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 => {
185getUserAsync3(location)
186.then(locsss => {
187if (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
212 } else
213 if (loc == 'GB-SCT') {
214 getUserAsync1(guess)
215 .then(guesss => {
216 getUserAsync1(location)
217 .then(locss => {
218 if (guesss == locss){
219 updateStreak(streak + 1);
220 sessionStorage.setItem("Streak", streak);
221 streakBackup = streak;
222 sessionStorage.setItem("StreakBackup", streak);
223 }
224 else {
225 if(streak == 0){
226 streakBackup = 0;
227 sessionStorage.setItem("StreakBackup", 0);
228 };
229 if(streak == 1){
230 updateStreak(0);
231 sessionStorage.setItem("Streak", 0);
232 document.getElementById("country-streak2").innerHTML = `<h2>Country Streak: ${streak}</h2>Your streak ended after correctly guessing <b>${streakBackup}</b> country.<br><br>`;
233 };
234 if(streak > 1){
235 updateStreak(0);
236 sessionStorage.setItem("Streak", 0);
237 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>`;
238 };
239 };
240 });
241 });
242
243 } else if (loc == 'GB-ENG' || loc == 'GB-NIR'){
244 getUserAsync2(guess)
245 .then(gues => {
246 getUserAsync2(location)
247 .then(locs => {
248 if (gues == locs){
249 updateStreak(streak+1);
250 sessionStorage.setItem("Streak", streak);
251 streakBackup = streak;
252 sessionStorage.setItem("StreakBackup", streak);
253 }
254 else {
255 if(streak == 0){
256 streakBackup = 0;
257 sessionStorage.setItem("StreakBackup", 0);
258 };
259 if(streak == 1){
260 updateStreak(0);
261 sessionStorage.setItem("Streak", 0);
262 document.getElementById("country-streak2").innerHTML = `<h2>Country Streak: ${streak}</h2>Your streak ended after correctly guessing <b>${streakBackup}</b> country.<br><br>`;
263 };
264 if(streak > 1){
265 updateStreak(0);
266 sessionStorage.setItem("Streak", 0);
267 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>`;
268 };
269 };
270 });
271 });
272 } else {
273 document.getElementById("country-streak2").innerHTML = `<h2> Not the United Kingdom, carry on<br><br></h2>`
274 }
275 });
276 }) .catch(err => { throw err });;
277 };
278
279
280function addStreak1(newDiv1) {
281 if(document.getElementById("country-streak2") == null && document.getElementsByClassName("stack__item").length == 3 && location.pathname.startsWith("/game/")) {
282 newDiv1 = document.createElement("div")
283 document.getElementsByClassName("stack__item")[0].appendChild(newDiv1);
284 newDiv1.innerHTML = `<div id="country-streak2" style="text-align:center"><h2>Country Streak: ${streak}</h2><br></div>`;
285 };
286};
287
288function addStreak2(newDiv2) {
289 if(document.getElementById("country-streak2") == null && !!document.querySelector('.result__more') && location.pathname.startsWith("/game/")) {
290 newDiv2 = document.createElement("div")
291 document.getElementsByClassName("margin--bottom")[0].appendChild(newDiv2);
292 newDiv2.innerHTML = `<div id="country-streak2" style="text-align:center"><h2>Country Streak: ${streak}</h2></div>`;
293 };
294};
295
296function addStreak() {
297 if (!!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") == 0){
298 checkCountry();
299 checked = checked + 1;
300 sessionStorage.setItem("Checked", checked);
301 }
302 else if (!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") != 0) {
303 checked = 0;
304 sessionStorage.setItem("Checked", checked)
305 };
306 setTimeout(function() {
307 if (!!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") == 0){
308 checkCountry();
309 checked = checked + 1;
310 sessionStorage.setItem("Checked", checked);
311 }
312 else if (!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") != 0) {
313 checked = 0;
314 sessionStorage.setItem("Checked", checked)
315 };
316 }, 250);
317 setTimeout(function() {
318 if (!!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") == 0){
319 checkCountry();
320 checked = checked + 1;
321 sessionStorage.setItem("Checked", checked);
322 }
323 else if (!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") != 0) {
324 checked = 0;
325 sessionStorage.setItem("Checked", checked)
326 };
327 }, 500);
328 setTimeout(function() {
329 if (!!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") == 0){
330 checkCountry();
331 checked = checked + 1;
332 sessionStorage.setItem("Checked", checked);
333 }
334 else if (!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") != 0) {
335 checked = 0;
336 sessionStorage.setItem("Checked", checked)
337 };
338 }, 1200);
339 setTimeout(function() {
340 if (!!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") == 0){
341 checkCountry();
342 checked = checked + 1;
343 sessionStorage.setItem("Checked", checked);
344 }
345 else if (!document.querySelector('.result') && location.pathname.startsWith("/game/") && sessionStorage.getItem("Checked") != 0) {
346 checked = 0;
347 sessionStorage.setItem("Checked", checked)
348 };
349 }, 2000);
350 setTimeout(function(){
351 addStreak1();
352 },300);
353 setTimeout(function(){
354 addStreak1();
355 },500);
356 setTimeout(function(){
357 addStreak2();
358 },200);
359 setTimeout(function(){
360 addStreak2();
361 },400);
362 setTimeout(function(){
363 addStreak1();
364 addStreak2();
365 },1200);
366 setTimeout(function(){
367 addStreak1();
368 addStreak2();
369 },2000);
370};
371
372document.addEventListener('keypress', (e) => {
373 switch (e.key) {
374 case '1':
375 updateStreak(streak + 1);
376 sessionStorage.setItem("Streak", streak);
377 streakBackup = streak;
378 sessionStorage.setItem("StreakBackup", streak);
379 break;
380 case '2':
381 updateStreak(streak - 1);
382 sessionStorage.setItem("Streak", streak);
383 streakBackup = streak;
384 sessionStorage.setItem("StreakBackup", streak);
385 break;
386 case '8':
387 updateStreak(streakBackup + 1);
388 sessionStorage.setItem("Streak", streak);
389 streakBackup = streak;
390 sessionStorage.setItem("StreakBackup", streak);
391 break;
392 case '0':
393 updateStreak(0);
394 sessionStorage.setItem("Streak", 0);
395 streakBackup = 0;
396 sessionStorage.setItem("StreakBackup", 0);
397 break;
398 };
399});
400
401document.addEventListener('click', addCounter2, false);
402document.addEventListener('click', addStreak, false);
403document.addEventListener('load', addCounterOnRefresh(), false);