WillsonHaw/VacBanChecker

New Persona Version on Steam

mister-roboti opened this issue · 4 comments

Hi there,

I noticed the new Steam Design came out, so also the classnames and stuff changed...
Nonetheless I have solved it by now with a custom design. It's the same procedure with the bookmark. Enjoy.

javascript:(function(){function getDigit(x,digitIndex){return(digitIndex>=x.length)?"0":x.charAt(x.length-digitIndex-1)} function prefixZeros(strint,zeroCount){var result=strint;for(var i=0;i<zeroCount;i++){result="0"+result} return result} function add(x,y){var maxLength=Math.max(x.length,y.length);var result="";var borrow=0;var leadingZeros=0;for(var i=0;i<maxLength;i++){var lhs=Number(getDigit(x,i));var rhs=Number(getDigit(y,i));var digit=lhs+rhs+borrow;borrow=0;while(digit>=10){digit-=10;borrow++} if(digit===0){leadingZeros++}else{result=String(digit)+prefixZeros(result,leadingZeros);leadingZeros=0}} if(borrow>0){result=String(borrow)+result} return result} function getId(friend){var steam64identifier="76561197960265728";var miniProfileId=friend.attributes.getNamedItem('data-miniprofile').value;return add(steam64identifier,miniProfileId)} var friends=[].slice.call(document.querySelectorAll('.friend_block_v2'));var lookup={};friends.forEach(function(friend){var id=getId(friend);if(!lookup[id]){lookup[id]=[]} lookup[id].push(friend)});function setVacation(player){var friendElements=lookup[player.SteamId];friendElements.forEach(function(friend){var inGameText=friend.querySelector('.in-game');var span=document.createElement('span');span.style.fontWeight='bold';span.style.display='block';if(inGameText){inGameText.innerHTML=inGameText.innerHTML.replace(/<br ?\/?>/,' - ')} if(player.NumberOfVACBans||player.NumberOfGameBans){var text='';if(player.NumberOfGameBans){text+=player.NumberOfGameBans+' OW bans'} if(player.NumberOfVACBans){text+=(text===''?'':', ')+player.NumberOfVACBans+' VAC bans'} text+=' '+player.DaysSinceLastBan+' days ago.';span.style.color='rgb(255, 73, 73)';span.innerHTML=text;friend.setAttribute("style","background-color: rgba(100, 31, 36, .8);")}else{span.style.color='rgb(43, 203, 64)';span.innerHTML='No Bans for this player.'} friend.querySelector('.player_avatar.friend_block_link_overlay > img').setAttribute("style","height: 70px; width: 70px; border-radius: 15px;");friend.querySelector('.player_avatar.friend_block_link_overlay').style.height="70px";friend.style.height="70px";var selection=friend.querySelector('.blocked_text')!==null;if(selection){friend.querySelector('.blocked_text').outerHTML=""} friend.querySelector('.friend_small_text').appendChild(span)})} function onData(xmlHttp){if(xmlHttp.readyState===XMLHttpRequest.DONE&&xmlHttp.status===200){var data=JSON.parse(xmlHttp.responseText);data.players.forEach(setVacation)}} function makeApiCall(ids){var xmlHttp=new XMLHttpRequest();var endpointRoot='https://api.steampowered.com/ISteamUser/GetPlayerBans/v1/?key=12A1D1DE83F9932934EDD6DF2BA00463&steamids=';var endpoint=endpointRoot+ids.join(',');xmlHttp.onreadystatechange=function(){onData(xmlHttp)};xmlHttp.open('GET',endpoint,!0);xmlHttp.send()} var ids=Object.keys(lookup);while(ids.length>0){var batch=ids.splice(0,100);makeApiCall(batch)}})()

Not minified version:

`javascript:(function(){
// Javascript does not work well with integers greater than 53 bits precision... So we need
// to do our maths using strings.
function getDigit(x, digitIndex) {
return (digitIndex >= x.length) ? "0" : x.charAt(x.length - digitIndex - 1);
}
function prefixZeros(strint, zeroCount) {
var result = strint;
for (var i = 0; i < zeroCount; i++) {
result = "0" + result;
}
return result;
}
//Only works for positive numbers, which is fine in our use case.
function add(x, y) {
var maxLength = Math.max(x.length, y.length);
var result = "";
var borrow = 0;
var leadingZeros = 0;
for (var i = 0; i < maxLength; i++) {
var lhs = Number(getDigit(x, i));
var rhs = Number(getDigit(y, i));
var digit = lhs + rhs + borrow;
borrow = 0;
while (digit >= 10) {
digit -= 10;
borrow++;
}
if (digit === 0) {
leadingZeros++;
} else {
result = String(digit) + prefixZeros(result, leadingZeros);
leadingZeros = 0;
}
}
if (borrow > 0) {
result = String(borrow) + result;
}
return result;
}

function getId(friend) {
    var steam64identifier = "76561197960265728";
    var miniProfileId = friend.attributes.getNamedItem('data-miniprofile').value;
    return add(steam64identifier, miniProfileId);
}

var friends = [].slice.call(document.querySelectorAll('.friend_block_v2'));
var lookup = {};

friends.forEach(function(friend) {
    var id = getId(friend);
    if (!lookup[id]) {
        lookup[id] = [];
    }
    lookup[id].push(friend);
});

function setVacation(player) {
    var friendElements = lookup[player.SteamId];

    friendElements.forEach(function(friend) {
        var inGameText = friend.querySelector('.in-game');
        var span = document.createElement('span');
        span.style.fontWeight = 'bold';
        span.style.display = 'block';

        if (inGameText) {
            inGameText.innerHTML = inGameText.innerHTML.replace(/<br ?\/?>/, ' - ');
        }

        if (player.NumberOfVACBans || player.NumberOfGameBans) {
            var text = '';

            if (player.NumberOfGameBans) {
                text += player.NumberOfGameBans + ' OW bans';
            }

            if (player.NumberOfVACBans) {
                text += (text === '' ? '' : ', ') +
                    player.NumberOfVACBans + ' VAC bans';
            }
            text += ' ' + player.DaysSinceLastBan + ' days ago.';

            span.style.color = 'rgb(255, 73, 73)';
            span.innerHTML = text;
            friend.setAttribute("style", "background-color: rgba(100, 31, 36, .8);");
        } else {
            span.style.color = 'rgb(43, 203, 64)';
            span.innerHTML = 'No Bans for this player.';
        }  

        friend.querySelector('.player_avatar.friend_block_link_overlay > img').setAttribute(
        "style", "height: 70px; width: 70px; border-radius: 15px;");
        friend.querySelector('.player_avatar.friend_block_link_overlay').style.height = "70px";
        friend.style.height = "70px";

        var selection = friend.querySelector('.blocked_text') !== null;
        if (selection) {
            friend.querySelector('.blocked_text').outerHTML = "";
        }            
        friend.querySelector('.friend_small_text').appendChild(span);
    });
}

function onData(xmlHttp) {
    if (xmlHttp.readyState === XMLHttpRequest.DONE && xmlHttp.status === 200) {
        var data = JSON.parse(xmlHttp.responseText);
        data.players.forEach(setVacation);
    }
}

function makeApiCall(ids) {
    var xmlHttp = new XMLHttpRequest();
    //API only allows 100 steam ids at once.
    var endpointRoot = 'https://api.steampowered.com/ISteamUser/GetPlayerBans/v1/?key=12A1D1DE83F9932934EDD6DF2BA00463&steamids=';
    var endpoint = endpointRoot + ids.join(',');

    xmlHttp.onreadystatechange = function() { onData(xmlHttp); };
    xmlHttp.open('GET', endpoint, true);
    xmlHttp.send();
}

var ids = Object.keys(lookup);

while (ids.length > 0) {
    var batch = ids.splice(0, 100);
    makeApiCall(batch);
}

})();`

ge-ku commented

There's no more need to calculate steam id64 as it's already present as steamid data attribute. You can check my script here (some minor modifications needed for it to work as bookmarklet instead of extension): https://github.com/ge-ku/Ban-Checker-for-Steam/blob/master/checkbans.js

Thanks for the report, I'll post an update in the next couple days or so

I've updated the script to work with the new page layouts. Unfortunately, the group members page still uses the old layout, so it's a mix of both. The styling is a little different now too, to be a little less intrusive. Thanks for the report.