GC - Fishing Logger

Beta version of a fishing reward logging script. Features coming soon: Webhooks!

当前为 2023-12-25 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name GC - Fishing Logger
  3. // @namespace Grundo's Cafe
  4. // @match https://www.grundos.cafe/water/fishing/
  5. // @version 1
  6. // @license MIT
  7. // @author Cupkait
  8. // @description Beta version of a fishing reward logging script. Features coming soon: Webhooks!
  9. // ==/UserScript==
  10.  
  11. //Last updated: December 24, 2023
  12.  
  13.  
  14. const getPetLevelsAsync = fetch("/quickref/")
  15. .then(response => {
  16. if (!response.ok) {
  17. throw new Error(`Network response was not ok: ${response.statusText}`);
  18. }
  19. return response.text();
  20. })
  21. .then(html => {
  22. const tempElement = document.createElement('div');
  23. tempElement.innerHTML = html;
  24. const petList = tempElement.querySelector('#quickref_petlist').children;
  25.  
  26. const petLevels = {};
  27. $(petList).each(function () {
  28. const petrefName = $(this).find('a').eq(0).attr('href').match(/_name=(.*?)$/)[1];
  29. const petFishingLevel = $(this).find('span').eq(12).text().match(/Fishing : (.*?)$/)[1];
  30. petLevels[petrefName] = petFishingLevel;
  31. });
  32.  
  33. return petLevels;
  34. })
  35. .catch(error => {
  36. console.error(error);
  37. });
  38. let confirmResults = document.createElement("div");
  39. confirmResults.innerHTML = "Pending...";
  40. confirmResults.id = "confirmResults";
  41. confirmResults.style.cssText = "color: green; text-align: center; link-color:green; font-size:14px; font-weight:bold;";
  42.  
  43.  
  44. getPetLevelsAsync.then(petLevels => {
  45. const fishContent = document.querySelector('div#page_content > main');
  46. const welcomeText = fishContent.children[1].innerText;
  47. const patientText = fishContent.children[2].innerText;
  48. const petCount = document.querySelectorAll('main > div > div');
  49. const petName = document.querySelector('div#userinfo > a').href;
  50.  
  51. let opts = {
  52. mode: "no-cors",
  53. referrer: "no-referrer",
  54. headers: {
  55. 'Content-Type': 'application/x-www-form-urlencoded',
  56. }
  57. }
  58.  
  59. if (welcomeText.startsWith('Welcome to the') || patientText.startsWith('Nothing!')) {
  60. console.log("Nothing to log here... it looks like no one went fishing.");
  61. } else {
  62. if (petCount.length === 0) { // One Pet
  63. const content = $("#page_content");
  64. const userName = /user=(.*?)"/g.exec(document.body.innerHTML)[1];
  65. const petName = $("#userinfo a").eq(2).text();
  66. const coolDown = content.find("strong").eq(0).text();
  67. const itemName = fishContent.querySelector("img").alt;
  68.  
  69. let petLevel = petLevels[petName] || ' ';
  70. let levelUp = '';
  71.  
  72. try {
  73. levelUp = content.find("p").eq(2).text().match(/to (.*?)!/)[1];
  74. petLevel = !isNaN(levelUp) ? parseInt(levelUp, 10) - 1 : petLevel;
  75. } catch (error) {
  76. // DO NOTHING
  77. }
  78. fishContent.insertAdjacentElement('beforebegin', confirmResults);
  79. confirmResults.innerHTML = `Your fishing results have been <a href="https://lookerstudio.google.com/reporting/ec18c798-ee62-4a7d-8315-5569c8de5ef6" target="_blank">submitted</a>.`
  80. 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}`;
  81. fetch(logResponse, opts);
  82. } else {
  83. $(".flex.center-items.big-gap").each(function () {
  84. const userName = /user=(.*?)"/g.exec(document.body.innerHTML)[1];
  85. const petName = $(this).find("strong").eq(0).text();
  86. const itemURL = $(this).find("img").eq(1).attr("src");
  87. const coolDown = $(this).find("strong").eq(1).text();
  88. const itemName = $(this).find("p").eq(0).text().match(/ a (.*?)!/)[1];
  89. let petLevel = petLevels[petName] || '';
  90. let levelUp = '';
  91.  
  92. try {
  93. levelUp = $(this).find("p").eq(1).text().match(/to (.*?)!/)[1];
  94. petLevel = !isNaN(levelUp) ? parseInt(levelUp, 10) - 1 : petLevel;
  95. } catch (error) {
  96. // DO NOTHING
  97. }
  98. fishContent.insertAdjacentElement('beforebegin', confirmResults);
  99. confirmResults.innerHTML = `Your fishing results have been <a href="https://lookerstudio.google.com/reporting/ec18c798-ee62-4a7d-8315-5569c8de5ef6" target="_blank">submitted</a>.`
  100. 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}`;
  101. fetch(logResponse, opts);
  102. });
  103. }
  104. }
  105. });