NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Sorare - quick check Offers
// @namespace http://tampermonkey.net/
// @version 0.1.12
// @description Quick check of the offers in SorareData page.
// @author You
// @include /^(?:https?:\/\/)?(?:www\.)?soraredata.com\/liveMarket/
// @icon https://www.google.com/s2/favicons?domain=soraredata.com
// @grant none
// @require http://code.jquery.com/jquery-3.4.1.min.js
// @license MIT
// @updateURL https://openuserjs.org/meta/BushRod/Sorare_-_quick_check_Offers.meta.js
// ==/UserScript==
(function () {
'use strict';
addButton("Quick Check offers<br/>(only works for football cards)");
function quickCheckOffers() {
/*let sportVal = $('input[placeholder="Select one scarcity or more"]').val();
if (sportVal != 'Sorare Football') {
alert('You must select the "Sorare Football" on Sports Filter (don\'t forget to click on the "filter" button aswell)');
return;
}*/
$('.infinite-scroll-component > div > div').each(function (index) {
let box = $(this);
let styledBox = box.children("div:first");
let primary = styledBox.children("div:first");
let secondary = primary.children("div:first");
let infoBox = secondary.children('div:eq(1)');
let infoBoxPlays = infoBox.children('div:eq(1)');
let imageBox = secondary.children('div:eq(0)');
// valeurs
let ethValues = infoBox.children("div:first");
let ethVal = ethValues.find('div:eq(2) p').text();
let num = ethVal.match(/[\d\,.]+/g);
let ethValNum = parseFloat(num[0].replace(/\./g, '').replace(',', '.'));
let marketVal = ethValues.find('div[data-tip="Floor price"] p').text();
let marketValNum = marketVal.match(/[\d\,.]+/g);
if (marketValNum == null) {
marketValNum = 10000000;
}
else {
marketValNum = parseFloat(marketValNum[0].replace(/\./g, '').replace(',', '.'));
}
//3 days average
let threedaysVal = ethValues.find('div[data-tip="3 days average"] p').text();
let threedaysValNum = threedaysVal.match(/[\d\,.]+/g);
threedaysValNum = threedaysValNum && threedaysValNum[0] ? parseFloat(threedaysValNum[0].replace(/\./g, '').replace(',', '.')) : 0;
//1 week average
let oneweekVal = ethValues.find('div[data-tip="1 week average"] p').text();
let oneweekValNum = oneweekVal.match(/[\d\,.]+/g);
oneweekValNum = oneweekValNum && oneweekValNum[0] ? parseFloat(oneweekValNum[0].replace(/\./g, '').replace(',', '.')) : 0;
let pointValues = infoBox.children('div:eq(1)');
//percent 5 games.
let L5width = infoBoxPlays.children('div:eq(1)').children('div:eq(0)').children('a:eq(0)').children('div:eq(0)').children('div:eq(1)').children().children().children().attr('style');
let percent5GameNum = L5width.replace(/\D/g, '');
/*let percent5Game = pointValues.find('div[data-tip$="games played over the past 5 games"]').next('.text-center').text();
let percent5GameNum = percent5Game.match(/[\d\,.]+/g);*/
percent5GameNum = percent5GameNum ? parseInt(percent5GameNum) : 0;
//percent 15 games.
let L15width = infoBoxPlays.children('div:eq(1)').children('div:eq(1)').children('a:eq(0)').children('div:eq(0)').children('div:eq(1)').children().children().children().attr('style');
let percent15GameNum = L15width.replace(/\D/g, '');
/*let percent15Game = pointValues.find('div[data-tip$="games played over the past 15 games"]').next('.text-center').text();
let percent15GameNum = percent15Game.match(/[\d\,.]+/g);*/
percent15GameNum = percent15GameNum ? parseInt(percent15GameNum) : 0;
//points 5 games.
let points5Game = pointValues.find("div[data-tip='Average SO5 points (DNPs excluded) over the past 5 games']").text();
let points5GameNum = points5Game.match(/[\d\,.]+/g);
points5GameNum = points5GameNum && points5GameNum[0] ? parseInt(points5GameNum[0]) : 0;
// if there is 3days average or 1 week average AND diff beetween price and average higher than 10%, add triangle.
let percentDiff = 0;
if (threedaysValNum > 0) {
let decreaseValue = threedaysValNum - ethValNum;
percentDiff = (decreaseValue / threedaysValNum) * 100;
}
else if (oneweekValNum > 0) {
let decreaseValue = oneweekValNum - ethValNum;
percentDiff = (decreaseValue / oneweekValNum) * 100;
}
// if price better by 10%, super offer, append triangle.
if (percentDiff >= 15) {
$('<span class="triangle-topleft"></span>').appendTo(box);
}
else {
//box.remove();
}
// If price <= best market price AND price <= average 3 days or average 1 week AND percent 5 games >= 80 AND points 5 games >= 45 = blue.
if ((ethValNum <= marketValNum) && ((ethValNum <= threedaysValNum) || (ethValNum <= oneweekValNum)) && percent5GameNum >= 80 && points5GameNum >= 45) {
imageBox.css('border', '2px solid rgb(0,0,255)');
imageBox.css('border-bottom', '0');
infoBox.css('border', '2px solid rgb(0,0,255)');
infoBox.css('border-top', '0');
// If price <= best market price AND price <= average 3 days or average 1 week AND percent 5 games >= 40 AND points 5 games >= 35 = green.
}
else if ((ethValNum <= marketValNum) && ((ethValNum <= threedaysValNum) || (ethValNum <= oneweekValNum)) && (percent5GameNum >= 40) && points5GameNum >= 35) {
imageBox.css('border', '2px solid rgb(0,255,0)');
imageBox.css('border-bottom', '0');
infoBox.css('border', '2px solid rgb(0,255,0)');
infoBox.css('border-top', '0');
// If price <= best market price AND percent 5 games > 60% = yellow.
}
else if ((ethValNum <= marketValNum) && percent5GameNum >= 60) {
imageBox.css('border', '2px solid rgb(204,204,0)');
imageBox.css('border-bottom', '0');
infoBox.css('border', '2px solid rgb(204,204,0)');
infoBox.css('border-top', '0');
//box.remove();
// If price <= best market price AND percent 5 games < 60% = orange.
}
else if ((ethValNum <= marketValNum) && percent5GameNum < 60) {
imageBox.css('border', '2px solid orange');
imageBox.css('border-bottom', '0');
infoBox.css('border', '2px solid orange');
infoBox.css('border-top', '0');
//box.remove();
}
// If price > best market price OR percent 15 games = 0 (DNP) OR price > three days average (if exists) = RED.
if ((ethValNum > marketValNum) || (percent15GameNum <= 0) || ((ethValNum > threedaysValNum) && threedaysValNum > 0)) {
imageBox.css('border', '2px solid red');
imageBox.css('border-bottom', '0');
infoBox.css('border', '2px solid red');
infoBox.css('border-top', '0');
//box.remove();
}
// If no market price, can't calculate = grey.
if (marketValNum == 10000000) {
imageBox.css('border', '2px solid grey');
imageBox.css('border-bottom', '0');
infoBox.css('border', '2px solid grey');
infoBox.css('border-top', '0');
//box.remove();
}
});
}
function addButton(text, onclick, cssObj) {
cssObj = cssObj || {
position: "fixed",
bottom: "5%",
right: "1%",
"z-index": 3,
fontWeight: "600",
fontSize: "14px",
backgroundColor: "#00cccc",
color: "white",
border: "none",
padding: "10px 20px"
};
let button = document.createElement("button"),
btnStyle = button.style;
document.body.appendChild(button);
button.innerHTML = text;
// Setting function for button when it is clicked.
button.onclick = quickCheckOffers;
Object.keys(cssObj).forEach(key => (btnStyle[key] = cssObj[key]));
return button;
}
function GM_addStyle(css) {
const style = document.getElementById("GM_addStyleBy8626") || (function () {
const style = document.createElement('style');
style.type = 'text/css';
style.id = "GM_addStyleBy8626";
document.head.appendChild(style);
return style;
})();
const sheet = style.sheet;
sheet.insertRule(css, (sheet.rules || sheet.cssRules || []).length);
}
GM_addStyle(".triangle-topleft{width:0;height:0;border-top:70px solid gold;border-right:70px solid transparent;position: absolute; z-index: 1;}");
})();