[GC] - Underwater Fishing Data Logger

Fishing rewards logging.

目前为 2024-02-13 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name [GC] - Underwater Fishing Data Logger
  3. // @namespace Grundo's Cafe
  4. // @match https://www.grundos.cafe/water/fishing/
  5. // @grant none
  6. // @version 1.2.1
  7. // @license MIT
  8. // @author Cupkait
  9. // @icon https://i.imgur.com/4Hm2e6z.png
  10. // @description Fishing rewards logging.
  11. // ==/UserScript==
  12.  
  13. const getPetLevelsAsync = fetch("/quickref/")
  14. .then(response => {
  15. if (!response.ok) {
  16. throw new Error(`Network response was not ok: ${response.statusText}`);
  17. }
  18. return response.text();
  19. })
  20. .then(async html => {
  21. const node = await new DOMParser().parseFromString(html, "text/html");
  22. const pageEventElement = node.getElementById('page_event');
  23.  
  24. //Credit to Twiggies and Devi for the RE handle portion of this code!
  25. if (pageEventElement.innerHTML.trim() !== '') {
  26. const existingPageEvent = document.getElementById('page_event');
  27. existingPageEvent.innerHTML += pageEventElement.innerHTML;
  28. }
  29.  
  30. return node;
  31. })
  32. .catch(error => {
  33. // Handle errors here
  34. console.error('Error:', error);
  35. })
  36.  
  37. .then(node => {
  38. const petList = node.querySelector('#quickref_petlist').children;
  39.  
  40. const petLevels = {};
  41.  
  42. $(petList).each(function () {
  43. const petrefName = $(this).find('a').eq(0).attr('href').match(/_name=(.*?)$/)[1];
  44. const petFishingLevel = $(this).find('span').eq(12).text().match(/Fishing : (.*?)$/)[1];
  45. petLevels[petrefName] = petFishingLevel;
  46. });
  47.  
  48.  
  49. return petLevels;
  50. })
  51. .catch(error => {
  52. console.error(error);
  53. });
  54.  
  55. let confirmResults = document.createElement("div");
  56. confirmResults.innerHTML = "Pending...";
  57. confirmResults.id = "confirmResults";
  58. confirmResults.style.cssText = "color: green; text-align: center; link-color:green; font-size:14px; font-weight:bold;";
  59. let getAvatar = ' ';
  60.  
  61. getPetLevelsAsync.then(petLevels => {
  62. const fishContent = document.querySelector('div#page_content > main');
  63. const welcomeText = fishContent.children[1].innerText;
  64. const patientText = fishContent.children[2].innerText;
  65. const petCount = document.querySelectorAll('main > div > div');
  66. const petName = document.querySelector('div#userinfo > a').href;
  67. let opts = {
  68. mode: "no-cors",
  69. referrer: "no-referrer",
  70. headers: {
  71. 'Content-Type': 'application/x-www-form-urlencoded',
  72. }
  73. };
  74.  
  75. function avatarCheck() {
  76. const avatarContainer = document.querySelector('div#page_event');
  77. if (
  78. !avatarContainer.innerText.includes("Let's Get This Bread") &&
  79. !avatarContainer.innerText.includes("Fishing - Titanic Squid")
  80. ) {
  81. getAvatar = '';
  82. console.log("No avatar detected.");
  83. } else {
  84. console.log("Avatar detected.");
  85. if (avatarContainer.innerText.includes("Fishing - Titanic Squid")) {
  86. getAvatar = 'Skeith - Fishing - Titanic Squid';
  87. } else if (avatarContainer.innerText.includes("Let's Get This Bread")) {
  88. getAvatar = 'Let\'s Get This Bread';
  89. }
  90. console.log(`Avatar:`, getAvatar);
  91. }
  92. }
  93. let freeOne = $("#userinfo a").eq(2).text();
  94.  
  95. if ((welcomeText.startsWith('Welcome to the') || patientText.startsWith('Nothing!') || patientText.startsWith('Looks like')) && freeOne === null) {
  96. console.log("Nothing to log here... it looks like no one went fishing.");
  97. } else {
  98. if (petCount.length === 0) { // One Pet
  99. const content = $("#page_content");
  100. const userName = /user=(.*?)"/g.exec(document.body.innerHTML)[1];
  101. const petName = $("#userinfo a").eq(2).text();
  102. const coolDown = content.find("strong").eq(0).text();
  103. const itemName = fishContent.querySelector("img").alt;
  104.  
  105. let petLevel = petLevels[petName] || ' ';
  106. let levelUp = '';
  107.  
  108. try {
  109. levelUp = content.find("p").eq(2).text().match(/to (.*?)!/)[1];
  110. petLevel = !isNaN(levelUp) ? parseInt(levelUp, 10) - 1 : petLevel;
  111. } catch (error) {
  112. // DO NOTHING
  113. }
  114. fishContent.insertAdjacentElement('beforebegin', confirmResults);
  115. confirmResults.innerHTML = `Your fishing results have been <a href="https://lookerstudio.google.com/reporting/ec18c798-ee62-4a7d-8315-5569c8de5ef6" target="_blank">submitted</a>.`
  116. const logResponse = `https://docs.google.com/forms/d/e/1FAIpQLSdBhJS1NSxHCmy32BqH0DEdQRJci1IVPOWUFcaothsiZjXu-w/formResponse?usp=pp_url&entry.886049257=${userName}&entry.343654154=${petName}&entry.1922136733=${petLevel}&entry.693447328=${levelUp}&entry.881968876=${itemName}&entry.303510013=${coolDown}&entry.1110645895=${getAvatar}`;
  117. fetch(logResponse, opts);
  118. } else {
  119. $(".flex.center-items.big-gap").each(function () {
  120. const userName = /user=(.*?)"/g.exec(document.body.innerHTML)[1];
  121. const petName = $(this).find("strong").eq(0).text();
  122. const itemURL = $(this).find("img").eq(1).attr("src");
  123. const coolDown = $(this).find("strong").eq(1).text();
  124. const itemName = $(this).find("p").eq(0).text().match(/ a (.*?)!/)[1];
  125.  
  126. let petLevel = petLevels[petName] || '';
  127. let levelUp = '';
  128.  
  129. try {
  130. levelUp = $(this).find("p").eq(1).text().match(/to (.*?)!/)[1];
  131. petLevel = !isNaN(levelUp) ? parseInt(levelUp, 10) - 1 : petLevel;
  132. } catch (error) {
  133. // DO NOTHING
  134. }
  135. fishContent.insertAdjacentElement('beforebegin', confirmResults);
  136. confirmResults.innerHTML = `Your fishing results have been <a href="https://lookerstudio.google.com/reporting/ec18c798-ee62-4a7d-8315-5569c8de5ef6" target="_blank">submitted</a>.`
  137. const logResponse = `https://docs.google.com/forms/d/e/1FAIpQLSdBhJS1NSxHCmy32BqH0DEdQRJci1IVPOWUFcaothsiZjXu-w/formResponse?usp=pp_url&entry.886049257=${userName}&entry.343654154=${petName}&entry.1922136733=${petLevel}&entry.693447328=${levelUp}&entry.881968876=${itemName}&entry.303510013=${coolDown}&entry.1110645895=${getAvatar}`;
  138. fetch(logResponse, opts);
  139. });
  140. }
  141. }
  142. });