110 lines
3.4 KiB
JavaScript
110 lines
3.4 KiB
JavaScript
// ==UserScript==
|
|
// @name 725984
|
|
// @version 1
|
|
// @grant none
|
|
// @include /^https?://([^\.]*\.)?twitch\.tv/(moderator/)?[^/]+$/
|
|
// @description auto claim active bonus. should probably keep this secret?
|
|
// ==/UserScript==
|
|
|
|
var reportToast = document.createElement("div");
|
|
reportToast.id = "snackbar";
|
|
var summaryObject = null;
|
|
var claimInterval = -1;
|
|
var summarySearch = setInterval(() => {
|
|
popToast("725984 is alive");
|
|
//reportToast.appendChild(document.createTextNode());
|
|
//document.body.appendChild(reportToast);
|
|
//reportToast.className = "show";
|
|
console.log("725984 survived most of init");
|
|
setInterval(function(){ reportToast.className = reportToast.className.replace("show", ""); }, 3000);
|
|
|
|
summaryObject = document.querySelector(".community-points-summary");
|
|
if(summaryObject !== null){
|
|
popToast("725984: online");
|
|
clearInterval(summarySearch);
|
|
claimInterval = setTimeout(claim, 1000 + Math.random() * 1000);
|
|
summaryObject.insertBefore(document.createTextNode("🟢"), summaryObject.firstChild)
|
|
} else {
|
|
console.log("725984: not ready");
|
|
popToast("725984: not ready");
|
|
}
|
|
}, 5000);
|
|
|
|
function claim(){
|
|
//look for claim. if found:
|
|
|
|
summaryObject.querySelectorAll("button").forEach((elem) => {
|
|
//console.log(Date());
|
|
let claimability = elem.querySelector(".claimable-bonus__icon");
|
|
if(claimability !== null){
|
|
console.log("725984: in motion");
|
|
if(Math.random() < 0.1){
|
|
popToast("725984 claims");
|
|
elem.click();
|
|
}else{
|
|
popToast("725984 abstains");
|
|
}
|
|
}
|
|
clearTimeout(claimInterval);
|
|
claimInterval = setTimeout(claim, 1000 + Math.random() * 1000);
|
|
});
|
|
|
|
}
|
|
|
|
function popToast(msg){
|
|
console.log(msg);
|
|
reportToast.innerHTML = "";
|
|
reportToast.appendChild(document.createTextNode(msg));
|
|
reportToast.className = "show";
|
|
}
|
|
|
|
let newStyle = document.createElement("style");
|
|
newStyle.setAttribute("type", "text/css");
|
|
newStyle.textContent = `
|
|
#snackbar {
|
|
visibility: hidden; /* Hidden by default. Visible on click */
|
|
min-width: 250px; /* Set a default minimum width */
|
|
margin-left: -125px; /* Divide value of min-width by 2 */
|
|
background-color: #333; /* Black background color */
|
|
color: #fff; /* White text color */
|
|
text-align: center; /* Centered text */
|
|
border-radius: 2px; /* Rounded borders */
|
|
padding: 16px; /* Padding */
|
|
position: fixed; /* Sit on top of the screen */
|
|
z-index: 1; /* Add a z-index if needed */
|
|
right: 30px; /* near the right; where you'll be looking (probably) */
|
|
bottom: 30px; /* 30px from the bottom */
|
|
}
|
|
|
|
/* Show the snackbar when clicking on a button (class added with JavaScript) */
|
|
#snackbar.show {
|
|
visibility: visible; /* Show the snackbar */
|
|
/* Add animation: Take 0.5 seconds to fade in and out the snackbar.
|
|
However, delay the fade out process for 2.5 seconds */
|
|
-webkit-animation: fadein 0.5s, fadeout 0.5s 2.5s;
|
|
animation: fadein 0.5s, fadeout 0.5s 2.5s;
|
|
}
|
|
|
|
/* Animations to fade the snackbar in and out */
|
|
@-webkit-keyframes fadein {
|
|
from {bottom: 0; opacity: 0;}
|
|
to {bottom: 30px; opacity: 1;}
|
|
}
|
|
|
|
@keyframes fadein {
|
|
from {bottom: 0; opacity: 0;}
|
|
to {bottom: 30px; opacity: 1;}
|
|
}
|
|
|
|
@-webkit-keyframes fadeout {
|
|
from {bottom: 30px; opacity: 1;}
|
|
to {bottom: 0; opacity: 0;}
|
|
}
|
|
|
|
@keyframes fadeout {
|
|
from {bottom: 30px; opacity: 1;}
|
|
to {bottom: 0; opacity: 0;}
|
|
}
|
|
`;
|
|
document.head.appendChild(newStyle);
|
|
document.body.appendChild(reportToast); |