View difference between Paste ID: Jw8LExGc and GAYSSTct
SHOW: | | - or go back to the newest paste.
1
// ==UserScript==
2
// @name        Genshin Daily Check-In
3
// @namespace   Violentmonkey Scripts
4
// @match       https://webstatic-sea.mihoyo.com/ys/event/signin-sea/index.html?act_id=e202102251931481*
5
// @grant       none
6
// @run-at      document-end
7
// @version     2.0
8
// @author      h010c
9
// @description Genshin Daily Check-In
10
// @icon        https://i.imgur.com/H8yt3g7.png
11
// ==/UserScript==
12
13
var hoursGenshin = 16;  // UTC time when Genshin jumps to the "next day"
14
var lang = "en";
15
var table;
16
17
if (/^(?:ru|uk)\b/.test(navigator.language) || document.URL.slice(-5) === "ru-ru") {
18
  lang = "ru";
19
}
20
21
checkLoot();
22
23
function checkLoot(reload = false) {
24
  if (reload) {
25
    table = 0;
26
    document.location.reload();
27
    return;
28
  }
29
30
  // element containing list of daily loot
31
  if (!table) {
32
    table = document.getElementsByClassName("components-home-assets-__sign-content_---list---3L0nzm")[0];
33
    setTimeout(checkLoot, 5000);
34
    return;
35
  }
36
37
  let timeNow = new Date();
38
39
  // show timers on webpage
40
  let elemNote = document.getElementsByClassName("components-home-assets-__sign-content_---desc---oUGkHX")[0];
41
  if (elemNote) {
42
    if (lang === "ru") {
43
      elemNote.innerText = `Лут проверен ${timeNow.toLocaleDateString()} в ${timeNow.toLocaleTimeString()}`;
44
    } else {
45
      elemNote.innerText = `Loot checked ${timeNow.toLocaleDateString()} at ${timeNow.toLocaleTimeString()}`;
46
    }
47
  }
48
  console.log("Loot checked at " + timeNow.toLocaleTimeString());
49
  
50
  // notification indicator on loot waiting to be acquired
51
  let elem = table.getElementsByClassName("components-home-assets-__sign-content_---badge---26v3dm")[0];
52
  if (elem) {
53
    elem.parentNode.click();
54
  }
55
56
  // setting up the next check
57
  let hoursUTCNow = timeNow.getUTCHours();
58
  let hoursLeft =  hoursUTCNow <= hoursGenshin ? hoursGenshin - hoursUTCNow : 24 + hoursGenshin - hoursUTCNow;
59
  let minutesNow = timeNow.getMinutes();
60
  let minutesLeft = 60 - minutesNow;
61
62
  setTimeout( checkLoot, ((hoursLeft * 60 + minutesLeft + 5) * 60000), true );
63
  if (elemNote) {
64
    if (lang === "ru") {
65
      elemNote.innerText += `; следующая проверка через ${minutesLeft > 54 ? hoursLeft + 1 : hoursLeft} часов ${minutesLeft > 54 ? minutesLeft - 55 : minutesLeft + 5} минут.`;
66
    } else {
67
      elemNote.innerText += `; next loot check in ${minutesLeft > 54 ? hoursLeft + 1 : hoursLeft} hours ${minutesLeft > 54 ? minutesLeft - 55 : minutesLeft + 5} minutes.`;
68
    }
69
  }
70
  console.log("Next loot check in %.2d:%.2d:00", (minutesLeft > 54 ? hoursLeft + 1 : hoursLeft), (minutesLeft > 54 ? minutesLeft - 55 : minutesLeft + 5));
71
  return;
72
}