// ==UserScript==
// @name Selfmade M0d
// @author Frubi
// @description:de (Beta) Erweitert pr0gramm.com um weitere Funktionen zum Blocken von Content
// @include *://pr0gramm.com/*
// @grant none
// @version 1.4.3Beta
// @namespace https://gf.qytechs.cn/users/158955
// @description Erweitert pr0gramm.com um weitere Funktionen
// ==/UserScript==
let settings =
{
isActive : true,
skipUploadByTag : false,
blockedTags : [],
onlyGoodTags : true,
amountOfTagsChecked: -1,
skipUploadByUser : false,
blockedUsers : [],
skipUploadByTotalBenis : false,
minBenis : 0,
skipUploadByAverageBenis : false,
minAverageBenis : 0,
skipUploadByUserRank : false,
blockedUserRanks : [],
nextUploadDirection : -1,
autoRateSkippedUploads : false,
blockComments : true,
deleteComments : false
}
let readSettings = function()
{
let temp = JSON.parse(localStorage.getItem("Selfmade_M0d_Settings"));
if(temp != null)
{
settings = temp;
}
}
let checkSettingsReady;
let checkPictureReady;
let checkURL = function()
{
if(url.length > 24)
{
if(url.includes("new") || url.includes("top") || url.includes("user"))
{
clearInterval(checkPictureReady);
checkPictureReady = setInterval(function()
{
if($('.item-container').length != 0)
{
clearInterval(checkPictureReady);
addBlockTagSign();
addBlockUserSign();
if(settings.isActive)
{
executeModules();
}
}
},100);
}
else if(url.includes('settings'))
{
clearInterval(checkSettingsReady);
checkSettingsReady = setInterval(function()
{
if($('.tab-bar').length != 0)
{
clearInterval(checkSettingsReady);
addSettingsTab();
}
},100);
}
}
}
let addSettingsTab = function()
{
let tmp = $('.Selfmade_M0d');
if(tmp.length != 0)
{
return;
}
let button = document.createElement('a');
button.innerText = 'Selfmade M0d';
button.className = "Selfmade_M0d";
button.href = '/settings/selfmade_M0d';
$(button).click(function(e)
{
console.log("test");
e.preventDefault();
window.history.replaceState({},"Selfmade M0d Settings","/settings/selfmade_M0d");
createSettings();
});
$('.tab-bar')[0].appendChild(button);
}
let createSettings = function()
{
console.log("create settings");
$('.pane.form-page').empty();
$('.active').toggleClass('active');
$('.Selfmade_M0d').addClass('active');
let settingsPageContent = `
<div class='form-section'>
<div class='Selfmade_M0d' id='bt' style='display:block'>
Geblockte Tags:<br>
<textarea placeholder='tag1,tag2,tag3,...' title='Tags mit Komma trennen!'></textarea>
<input type="checkbox" class="box-from-label" name="onlyGoodTags" >
<label for="onlyGoodTags"> Ignoriere Tags mit negativen Benis </label>
Anzahl der zu berücksichtigen Tags: <input type="number" min="-1" max="999" value="-1" title="-1 = alle">
</div>
<br>
<div class='Selfmade_M0d' id='bu' style='display:block' title='Nutzernamen mit Komma trennen!'>
<span style='display:block'>Geblockte Nutzer:</span>
<textarea placeholder='nutzer1,nutzer2,nutzer3,...'></textarea>
</div>
<br>
<div class='Selfmade_M0d' id='br' style='display:block'>
Geblockte Ränge:<br>
<div style="margin-left:25px;">
<input type="checkbox" class='box-from-label' name='Neuschwuchtel'>
<label for='Neuschwuchtel' style='color:#E108E9' >Neuschwuchtel</label>
<input type="checkbox" class='box-from-label' name='Schwuchtel'>
<label for='Schwuchtel' style='color:#FFFFFF'>Schwuchtel</label>
<input type="checkbox" class='box-from-label' name='Altschwuchtel'>
<label for='Altschwuchtel' style='color:#5BB91C'> Altschwuchtel</label>
<input type="checkbox" class='box-from-label' name="Edler Spender">
<label for="Edler Spender" style='color:#1cb992'> Edler Spender</label>
<input type="checkbox" class='box-from-label' name="Gesperrt">
<label for="Gesperrt" style='color:#444444'> Gesperrt </label>
<input type="checkbox" class='box-from-label' name="Fliesentischbesitzer">
<label for="Fliesentischbesitzer" style='color:#6C432B'> Fliesentischbesitzer</label>
<input type="checkbox" class='box-from-label' name="Lebende Legende">
<label for="Lebende Legende" style='color:#1cb992'> Lebende Legende</label>
<input type="checkbox" class='box-from-label' name="Moderator">
<label for="Moderator" style='color:#008FFF'> Moderator</label>
<input type="checkbox" class='box-from-label' name="Administrator">
<label for="Administrator" style='color:#FF9900'> Administrator</label>
</div>
</div>
<br>
<div class='Selfmade_M0d' id='mb' style='display:block'>
<input type="checkbox" class="box-from-label" name="minBenis">
<label for="minBenis"> Mindest Benis: <input type="number" min="-999" max="999" value="0"></label>
<input type="checkbox" class="box-from-label" name="minAverageBenis">
<label for="minAverageBenis"> Mindest Durchschnittsbenis: <input type="number" min="-999" max="999" value="0"></label>
</div>
<br>
<div class='Selfmade_M0d' id='sr' style='display:block'>
<input type="checkbox" class="box-from-label" name="sr">
<label for="sr"> Nach rechts Skippen</label>
</div>
<br>
<div class="Selfmade_M0d" id='bc' style='display:block'>
<input type='checkbox' class="box-from-label" name="bc">
<label for="bc"> Kommentare von geblockten Nutzern entfernen</label>
</div>
<br>
<div class="Selfmade_M0d" id='save'>
<input type="submit" value="Speichern" class="confirm settings-save"></input>
</div>
<br>
<div class='Selfmade_M0d' id='reset'>
<a class='action clear-settings-button'>Einstellungen zurücksetzen</a>
</div>
</div>
`
$('.pane.form-page').append(settingsPageContent);
$('#bt textarea')[0].innerText = settings.blockedTags.join(",");
$('#bt input')[0].checked = settings.onlyGoodTags;
$('#bt input')[1].value = settings.amountOfTagsChecked;
$('#bu textarea')[0].innerText = settings.blockedUsers.join(",");
settings.blockedUserRanks.forEach(function(e)
{
$('label:contains(' + e + ')').prev()[0].checked = true;
});
$('#mb input')[0].checked = settings.skipUploadByTotalBenis;
$('#mb input')[1].value = settings.minBenis;
$('#mb input')[2].checked = settings.skipUploadByAverageBenis;
$('#mb input')[3].value = settings.minAverageBenis;
$('#sr input')[0].checked = settings.nextUploadDirection==-1?true:false;
$('#bc input')[0].checked = settings.blockComments;
$('#save input').click(function(){ saveSettings()});
$('#reset a').click(function()
{
localStorage.removeItem('Selfmade_M0d_Settings');
location.href = "http://pr0gramm.com/new";
});
$('.box-from-label').next().each(function()
{
$(this).click(function()
{
$(this).prev()[0].checked = !$(this).prev()[0].checked;
});
});
}
let saveSettings = function()
{
settings.blockedTags = $('#bt textarea')[0].value.split(',');
settings.blockedTags.forEach(function(a,i)
{
if(a == "")
{
settings.blockedTags.splice(i,1);
return;
}
settings.blockedTags[i] = a.trim();
});
settings.skipUploadByTag = settings.blockedTags.length >0?true:false;
settings.onlyGoodTags = $('#bt input')[0].checked;
settings.amountOfTagsChecked = Number($('#bt input')[1].value);
settings.blockedUsers = $('#bu textarea')[0].value.split(',');
settings.blockedUsers.forEach(function(a,i)
{
if(a == "")
{
settings.blockedUsers.splice(i,1);
return;
}
settings.blockedUsers[i] = a.trim();
});
settings.skipUploadByUser = settings.blockedUsers.length >0 ? true:false;
settings.blockedUserRanks = [];
let tmp = $('#br input:checked').next();
for(let i = 0; i < tmp.length; i++)
{
settings.blockedUserRanks.push(tmp[i].innerText.trim());
}
settings.skipUploadByUserRank = settings.blockedUserRanks.length >0 ? true:false;
settings.skipUploadByTotalBenis = $('#mb input')[0].checked;
settings.minBenis = Number($('#mb input')[1].value);
settings.skipUploadByAverageBenis = $('#mb input')[2].checked;
settings.minAverageBenis = Number($('#mb input')[3].value);
settings.nextUploadDirection = $('#sr input')[0].checked ? -1:1;
settings.blockComments = $('#bc input')[0].checked;
settings.autoRateSkippedUploads = false;
quickSave();
}
let quickSave = function()
{
localStorage.setItem("Selfmade_M0d_Settings", JSON.stringify(settings));
}
let createFilter = function()
{
let filter = $('.filter-setting:eq(2)');
filter.clone().insertAfter(filter);
filter = $('.filter-setting:eq(3)');
let circle = filter[0].children[0].children[0];
filter[0].children[0].innerText = "Self-made M0d";
filter[0].children[0].prepend(circle);
filter[0].children[1].innerText = "Aktiviere das Selfmade M0d Addon. Speichern nicht erforderlich";
filter.attr("data-flag",8);
$('#filter-link').click(function(){
if(settings.isActive)
filter.addClass("active");
else
filter.removeClass("active");
})
filter.click(function()
{
if($('.filter-setting:eq(3)').hasClass("active"))
{
settings.isActive = false;
$('.filter-setting:eq(3)').removeClass("active");
}
else
{
settings.isActive = true;
$('.filter-setting:eq(3)').addClass("active");
}
quickSave();
})
}
let nextUpload = function()
{
if(settings.nextUploadDirection == 1)
{
$('.stream-prev').click();
}
else if(settings.nextUploadDirection == -1)
{
$('.stream-next').click();
}
}
let rateUpload = function(direction = -1)
{
console.log("Upload wurde bewertet");
if(direction == 1)
{
if($('.item-vote:has(.pict)')[0].className.indexOf("voted-up") == -1)
$('.item-vote:has(.pict) .vote-up').click();
}
else if(direction == -1)
{
if($('.item-vote:has(.pict)')[0].className.indexOf("voted-down") == -1)
$('.item-vote:has(.pict) .vote-down').click();
}
}
let getTags = function()
{
let tags = [];
let rawTags;
if(settings.onlyGoodTags == true)
{
rawTags = $('.tag-good');
}
else
{
rawTags = $('.tag-good,.tag-bad');
}
let amount = settings.amountOfTagsChecked;
if(amount == -1)
{
amount = rawTags.length;
}
else
{
amount = Math.min(amount, rawTags.length)
}
for(let i = 0; i <amount; i++)
{
tags.push(rawTags[i].children[0].innerText);
}
return tags;
}
let getTotalBenis = function()
{
let score = $('.item-vote .score');
if(score.length != 0)
{
return $('.item-vote .score')[0].innerText;
}
return undefined;
}
let getAverageBenis = function()
{
let score = $('.item-vote .score');
if(score.length != 0)
{
score = $('.item-vote .score')[0].title;
let divident = Number(score.substr(0,score.indexOf("u")-1));
let divisor = Number(score.substr(score.indexOf("u")+4,score.indexOf("u")));
if(divisor == 0)
{
return divident;
}
return divident / divisor;
}
else undefined;
}
let getUser = function()
{
return $('.item-details .user')[0].innerText;
}
let getUserRank = function()
{
switch($('.item-details .user')[0].classList[1])
{
case("um0"):
return "Schwuchtel";
break;
case("um1"):
return "Neuschwuchtel";
break;
case("um2"):
return "Altschwuchtel";
break;
case("um3"):
return "Administrator";
break;
case("um4"):
return "Gesperrt";
break;
case("um5"):
return "Moderator";
break;
case("um6"):
return "Fliesentischbesitzer";
break;
case("um7"):
return "Lebende Legende";
break;
case("um8"):
break;
case("um9"):
return "Edler Spender";
break;
default:
break;
}
}
let executeModules = function()
{
let wasSkipped = false;
if(settings.skipUploadByTag)
{
wasSkipped = skipUploadByTag();
}
if(settings.skipUploadByUser && !wasSkipped)
{
wasSkipped = skipUploadByUser();
}
if(settings.skipUploadByTotalBenis && !wasSkipped)
{
wasSkipped = skipUploadByTotalBenis();
}
if(settings.skipUploadByAverageBenis && !wasSkipped)
{
wasSkipped = skipUploadByAverageBenis();
}
if(settings.skipUploadByUserRank && !wasSkipped)
{
wasSkipped = skipUploadByUserRank();
}
if(settings.blockComments && !wasSkipped)
{
blockCommentsByUser();
}
else if(settings.deleteComments && !wasSkipped)
{
deleteCommentsByUser();
}
}
let skipUploadByTag = function()
{
let tags = getTags();
for(let i = 0; i < tags.length; i++)
{
if(settings.blockedTags.includes(tags[i].toLowerCase()))
{
if(settings.autoRateSkippedUploads)
{
rateUpload();
}
console.log("Skipped because of Tag: " + tags[i]);
nextUpload();
return true;
}
}
}
let skipUploadByUser = function()
{
let user = getUser();
if(settings.blockedUsers.includes(user))
{
if(settings.autoRateSkippedUploads)
rateUpload();
console.log("Skipped because of User: " + user);
nextUpload();
return true;
}
}
let skipUploadByTotalBenis = function()
{
let score = getTotalBenis();
if(score != undefined)
{
if(score < settings.minBenis)
{
if(settings.autoRateSkippedUploads)
{
rateUpload();
}
nextUpload();
console.log("Skipped because of Benis: " + score);
return true;
}
}
}
let skipUploadByAverageBenis = function()
{
let score = getAverageBenis();
if(score != undefined)
{
if(getAverageBenis() < settings.minAverageBenis)
{
if(settings.autoRateSkippedUploads)
{
rateUpload();
}
nextUpload();
console.log("Skipped because of average Benis: " + score);
return true;
}
}
}
let skipUploadByUserRank = function()
{
let rank = getUserRank();
if(settings.blockedUserRanks.includes(rank))
{
if(settings.autoRateSkippedUploads)
{
rateUpload();
}
nextUpload();
console.log("Skipped because of Userrank: " + rank);
return true;
}
}
let addBlockTagSign = function()
{
let blockTagSign = document.createElement('span');
blockTagSign.className = "block-tag"
blockTagSign.innerText = "ø";
$('.tag').append(blockTagSign);
$('.block-tag').css("cursor", "pointer");
$('.block-tag').each(function()
{
let tmp = $(this).siblings()[0].innerText;
if(settings.blockedTags.includes(tmp.toLowerCase()))
{
$(this).css("color", "red");
}
else
{
$(this).css("color", "#888");
}
});
$('.block-tag').click(function()
{
let tmp = $(this).siblings()[0].innerText;
if($(this).css("color") == "rgb(255, 0, 0)")
{
settings.blockedTags.splice(settings.blockedTags.indexOf(tmp),1);
if(settings.blockedTags.length > 0)
settings.skipUploadByTag = true;
else
settings.skipUploadByTag = false;
$(this).css("color","#888" );
}
else
{
settings.blockedTags.push(tmp.toLowerCase());
settings.skipUploadByTag = true;
$(this).css("color", "red");
}
quickSave();
});
}
let addBlockUserSign = function()
{
let blockUserSign = document.createElement('span');
blockUserSign.className = "block-user"
blockUserSign.innerText = " ø";
$(blockUserSign).insertAfter($('.user'));
$('.block-user').css("cursor", "pointer");
$('.block-user').each(function()
{
if(settings.blockedUsers.includes($(this).prev()[0].innerText))
{
$(this).css("color", "red");
}
});
$('.block-user').click(function()
{
let user = $(this).prev()[0].innerText;
if($(this).css("color") == "rgb(255, 0, 0)")
{
settings.blockedUsers.splice(settings.blockedUsers.indexOf(user),1);
if(settings.blockedUsers.length > 0)
settings.skipUploadByUser = true;
else
settings.skipUploadByUser = false;
$(this).css("color","" );
}
else
{
settings.blockedUsers.push(user);
settings.skipUploadByUser = true;
$(this).css("color", "red");
}
quickSave();
});
}
let blockCommentsByUser = function()
{
$('.comment:not(textarea)').each(function()
{
if(settings.blockedUsers.includes($(this).find($('.comment-foot .user'))[0].innerText))
{
let tmp = $(this).find($('.comment-content'));
$(tmp).css("color", "grey");
$(tmp).css("cursor", "pointer");
if(tmp.attr("data-comment") == undefined)
{
tmp.attr("data-comment", tmp[0].innerText )
tmp[0].innerText = "[Blocked]";
tmp.click(function()
{
if(this.innerText == "[Blocked]")
this.innerText = $(this).attr("data-comment");
else
this.innerText = "[Blocked]";
});
}
}
});
}
let deleteCommentsByUser = function()
{
$($('.comment:not(textarea)').get().reverse()).each(function()
{
if(settings.blockedUsers.includes($(this).find($('.comment-foot .user'))[0].innerText))
{
this.parentElement.remove();
console.log("Deleted comment from user: " + $('.comment-foot .user')[0].innerText)
}
});
}
let url = "https://pr0gramm.com";
$(document).ready(function()
{
readSettings();
createFilter();
window.addEventListener("resize", function(){checkURL()});
setInterval(function()
{
if(url != window.location.href)
{
url = window.location.href;
checkURL();
}
},100);
});