Last active
July 4, 2024 15:44
-
-
Save Kurotaku-sama/5c67a635ae4f8ee09bd88748ad99ebdc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name givee.club improvements | |
// @name:de givee.club Verbesserungen | |
// @namespace https://kurotaku.de | |
// @version 1.2.6 | |
// @description A script for some improvements for givee.club | |
// @description:de Ein Skript für einige Verbesserungen für givee.club | |
// @author Kurotaku | |
// @license MIT | |
// @match https://givee.club/* | |
// @icon https://givee.club/favicon.ico | |
// @updateURL https://gist.github.com/Kurotaku-sama/5c67a635ae4f8ee09bd88748ad99ebdc/raw/givee.club%2520improvement.user.js | |
// @downloadURL https://gist.github.com/Kurotaku-sama/5c67a635ae4f8ee09bd88748ad99ebdc/raw/givee.club%2520improvement.user.js | |
// @require https://gist.github.com/Kurotaku-sama/9ebeb659500f6eee2f780344948e1e8f/raw/kuros_library.user.js | |
// @require https://openuserjs.org/src/libs/sizzle/GM_config.js | |
// @grant GM_getValue | |
// @grant GM_setValue | |
// @grant GM_registerMenuCommand | |
// ==/UserScript== | |
let loc = window.location.href; | |
(async function() { | |
await init_gm_config(); // Initialize the configuration | |
if(GM_config.get("script_enabled")) { // Check if the script is disabled in config | |
loc = window.location.href; | |
if(GM_config.get("hide_ads")) | |
hide_ads(); | |
if(!loc.includes("/event/")) { | |
if(GM_config.get("hide_items_from_list_by_default")) | |
toggle_hidden_itemlist(); | |
if(GM_config.get("hide_item_buttons")) | |
hide_item_buttons(); | |
} | |
if(loc.includes("/event/")) { | |
insert_giveaway_draw_time(); | |
insert_task_buttons(); | |
} | |
} | |
})(); | |
function init_gm_config() { | |
GM_registerMenuCommand('Configuration', () => { | |
GM_config.open(); | |
}); | |
let frame = document.createElement('div'); | |
document.body.appendChild(frame); | |
GM_config.init( | |
{ | |
'id': 'configuration', | |
'title': 'givee.club improvements', | |
'fields': | |
{ | |
'companion': | |
{ | |
'label': 'Install Giveaway Companion (Recommended)', | |
'type': 'button', | |
'size': 100, | |
'click': function() { | |
window.open("https://raw.githubusercontent.com/longnull/GiveawayCompanion/master/GiveawayCompanion.user.js", '_blank'); | |
} | |
}, | |
'script_enabled': | |
{ | |
'label': 'Enable/Disable all improvements', | |
'type': 'checkbox', | |
'default': true | |
}, | |
'hide_ads': | |
{ | |
'label': 'Hide sponsored content', | |
'type': 'checkbox', | |
'default': true | |
}, | |
'items_to_hide': | |
{ | |
'label': 'Hide items by name<br>(each item name must be written in a new line)', | |
'type': 'textarea', | |
'default': '' | |
}, | |
'hide_items_from_list_by_default': | |
{ | |
'label': 'Hide items by default', | |
'type': 'checkbox', | |
'default': true | |
}, | |
'hide_item_buttons': | |
{ | |
'label': 'Button in top right corner for qick hide', | |
'type': 'checkbox', | |
'default': true | |
}, | |
}, | |
'frame': frame, | |
'css': '#configuration {height:auto !important; width:auto !important; padding:20px !important;max-height: 600px !important;max-width:500px !important; border: 3px solid #fff !important; background-color: #020923; color:#fff} #configuration .config_header {font-size:17pt; font-weight:bold} #configuration .config_var {margin-top:10px; display: flex;} #configuration_buttons_holder {text-align: center;} #configuration #configuration_resetLink {color:#fff;} .config_var input[type="checkbox"] {order:-1; margin: 0 10px 0 0} #configuration #configuration_items_to_hide_var {display : block;} #configuration_field_items_to_hide {height: 150px; width: 100%; resize: none;background-color: #020923; color:#fff}' | |
}); | |
} | |
function hide_ads() { | |
let elements = document.querySelectorAll(".definetelynotanad"); | |
for(let i = 0; i < elements.length; i++) { | |
if(elements[i].parentElement.attributes.class.value === "col-md-4 col-sm-6") | |
elements[i].parentElement.remove(); | |
else | |
elements[i].remove(); | |
} | |
} | |
function hide_item_buttons() { | |
let items = document.querySelectorAll(".event-card"); | |
let eye_button = `<div class="eye-slash-container"><div class="eye slash"><div></div><div></div></div></div>`; | |
items.forEach((item) => { | |
item.parentNode.insertAdjacentHTML('afterbegin', eye_button); | |
item.parentNode.querySelector(".eye-slash-container").addEventListener("click", add_to_hidden, false); | |
}); | |
} | |
function add_to_hidden(event) { | |
let item = event.target; // Get the item | |
while(item.classList.value !== "col-md-4 col-sm-6") // Go up till you reach the item | |
item = item.parentNode; | |
let add_to_hidden_button = item.querySelector(".eye-slash-container"); | |
add_to_hidden_button.remove(); // Remove the button | |
let href_and_title = get_event_href_and_title(item); | |
GM_config.set("items_to_hide", get_prepared_items_to_hide(href_and_title)); // Override old list | |
if(GM_config.get("hide_items_from_list_by_default")) | |
item.classList.add("gray-out-item"); | |
// let hide_itemlist_enabled = document.querySelector("#toggle-hide-itemlist").checked; | |
// if(hide_itemlist_enabled) | |
// item.classList.add("hide-item"); | |
GM_config.save(); | |
} | |
function get_event_href_and_title(event) { | |
return `${event.querySelector(".event-card").pathname} - ${event.querySelector(".event-title .vertical-align-middle").innerText}`; | |
} | |
function get_event_href(event) { | |
return `${event.querySelector(".event-card").pathname}`; | |
} | |
function get_prepared_items_to_hide(new_title = null) { | |
let items_to_hide = GM_config.get("items_to_hide"); | |
if(new_title) // Add new item title if exist | |
items_to_hide += `\n${new_title.trim()}`; | |
items_to_hide = items_to_hide.replace(/^\s*$(?:\r\n?|\n)/gm, ""); // Remove blank lines | |
items_to_hide = trim_spaces(items_to_hide); // Remove Spaces | |
items_to_hide = sort_alphabetically(items_to_hide); // Sort alphabetical | |
return items_to_hide; | |
} | |
function toggle_hidden_itemlist() { | |
let hidden_items = get_hidden_items_array(); | |
let events = document.querySelectorAll("#event-active .col-md-4.col-sm-6"); // Get all items in store | |
events.forEach(function(event) { | |
if(event.querySelector(".definetelynotanad") === null) { | |
let href = get_event_href(event); | |
if(hidden_items.includes(href)) { | |
event.classList.toggle("hide-item"); | |
} | |
} | |
}) | |
} | |
function get_hidden_items_array() { | |
let hidden_items = GM_config.get("items_to_hide").split("\n"); | |
hidden_items = hidden_items.map(function (el) {return el.split(" - ")[0].trim();}); // Trim away the spaces | |
hidden_items = hidden_items.filter((el) => el !== ""); // Remove all empty lines (shouldn't happen anymore, but safe is safe) | |
return hidden_items; | |
} | |
function insert_giveaway_draw_time() { | |
let countdown = document.querySelector(".event-countdown"); | |
if(countdown) { | |
let time = new Date(); | |
let time_left = parseInt(countdown.getAttribute("data-timeleft")); | |
time.setSeconds(time.getSeconds() + time_left); | |
countdown.insertAdjacentHTML('afterend', `<div style="font-size:18px;margin-top:20px;">Giveaway will be drawn on: <span style="font-weight:bold">${format_date_time(time)}</span></div>`); | |
} | |
} | |
function format_date_time(time) { | |
let date = time.getDate() >= 10 ? time.getDate() : '0'+time.getDate(); | |
let month = time.getMonth() >= 10 ? time.getMonth() : '0'+time.getMonth(); | |
let full_year = time.getFullYear(); | |
let hours = time.getHours() >= 10 ? time.getHours() : '0'+time.getHours(); | |
let minutes = time.getMinutes() >= 10 ? time.getMinutes() : '0'+time.getMinutes(); | |
let formated_date = `${date}.${month}.${full_year} - ${hours}:${(minutes)}`; | |
return formated_date | |
} | |
function insert_task_buttons() { | |
let destination = document.querySelector(".actions-submit"); | |
let button = "<button type='button' class='btn btn-success btn-sm' id='k-do-tasks' disabled>Do Tasks</button> <button type='button' class='btn btn-success btn-sm' id='k-check-tasks'>Check Tasks</button>"; | |
if(destination) { | |
destination.innerHTML = button + destination.innerHTML; | |
document.getElementById("k-do-tasks").addEventListener ("click", do_tasks, false); | |
document.getElementById("k-check-tasks").addEventListener ("click", check_tasks, false); | |
} | |
} | |
function do_tasks() { | |
let elements = document.querySelectorAll(".event-actions table tr:not(.hidden)"); | |
for (var i = 0; i < elements.length; i++) { | |
let element = elements[i]; | |
let type = ""; | |
let label = element.querySelector(".event-action-label").innerHTML; | |
if(label.includes("Confirm account email")) type = "Confirm account email"; | |
else if(label.includes("profile level")) type = "profile level"; | |
else if(label.includes("Wishlist")) type = "Wishlist Game"; | |
else if(label.includes("Join")) type = "Join Group"; | |
if(type == "Confirm account email" || type == "profile level") { | |
// do nothing | |
} | |
else if(type == "Wishlist Game") { | |
if(!element.querySelector("button").disabled) { | |
let appid = element.querySelector(".event-action-label a").getAttribute('data-steam-wishlist-appid'); | |
//addToWishlist(appid); | |
window.open("https://store.steampowered.com/app/" + appid); | |
} | |
} | |
else if(type == "Join Group") { | |
if(!element.querySelector("button").disabled) { | |
element.querySelector(".event-action-label a").click(); | |
} | |
} | |
} | |
} | |
function check_tasks(element) { | |
let elements = document.querySelectorAll(".event-actions table tr:not(.hidden)"); | |
for (var i = 0; i < elements.length; i++) { | |
let element = elements[i]; | |
element.querySelector("button").click(); | |
} | |
document.querySelector("#k-do-tasks").disabled = false; | |
} | |
// EXPERIMENTAL DOESNT WORK | |
//await getSessionId("https://store.steampowered.com/app/2173600"); | |
// async function getSessionId(url) { | |
// let response = await GM_xmlhttpRequest({ | |
// method: 'GET', | |
// url: url, | |
// timeout: 5000 | |
// }); | |
// console.log(response); | |
// const sessionId = response.responseText.match(/g_sessionID\s*=\s*"(.+?)"/); | |
// if (!sessionId) { | |
// console.log("Steam session ID not found"); | |
// return false; | |
// } | |
// return sessionId[1]; | |
// } | |
// async function addToWishlist(appId) { | |
// const sessionId = await getSessionId(`https://store.steampowered.com/app/${appId}/`); | |
// if (!sessionId) { | |
// console.log("Steam login error"); | |
// return false; | |
// } | |
// const response = await GM_xmlhttpRequest({ | |
// method: 'POST', | |
// url:"https://store.steampowered.com/api/addtowishlist", | |
// headers: { | |
// 'Content-Type': 'application/x-www-form-urlencoded', | |
// 'Referer': `https://store.steampowered.com/app/${appId}/`, | |
// 'X-Requested-With': 'XMLHttpRequest' | |
// }, | |
// data: {sessionid: sessionId, appid: appId} | |
// }); | |
// return true; | |
// } | |
// Add custom styles | |
let styles = ` | |
/** Eye Slash **/ | |
.eye-slash-container { | |
position: absolute; | |
right: 0; | |
padding: 10px; | |
height: 40px; | |
width: 40px; | |
} | |
.eye-slash-container:hover { | |
cursor: pointer; | |
} | |
.eye{ | |
width:1.25em; | |
height:0.75em; | |
position:absolute; | |
display:inline-block; | |
--background:#aaa; | |
--color:currentColor; | |
} | |
.eye div{ | |
overflow:hidden; | |
height:50%; | |
position:relative; | |
margin-bottom:-1px; | |
} | |
.eye div:before{ | |
content:''; | |
background:currentColor; | |
position:absolute; | |
left:0; | |
right:0; | |
height:300%; | |
border-radius:100%; | |
} | |
.eye div:last-child:before{ | |
bottom:0; | |
} | |
.eye:before{ | |
content:''; | |
position:absolute; | |
top:50%; | |
left:50%; | |
transform:translate(-50%, -50%); | |
width:0.35em; | |
height:0.35em; | |
background:var(--color); | |
border:0.1em solid var(--background); | |
border-radius:100%; | |
z-index:1; | |
} | |
.eye:after{ | |
content:''; | |
position:absolute; | |
top:-0.15em; | |
left:calc(33.333% - 0.15em); | |
transform:rotate(45deg) scaleX(0); | |
transform-origin:left center; | |
width:90%; | |
height:0.1em; | |
background:var(--color); | |
border-top:0.1em solid var(--background); | |
z-index:2; | |
transition:transform 0.25s; | |
} | |
.eye.slash:after{ | |
transform:rotate(45deg) scaleX(1); | |
} | |
.gray-out-item {filter: saturate(0%)} | |
.hide-item {display: none !important}`; | |
// Insert custom Styles | |
let style_sheet = document.createElement("style"); | |
style_sheet.innerText = styles; | |
document.head.appendChild(style_sheet); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment