// ==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.6.0Beta
// @namespace https://gf.qytechs.cn/users/158955
// @description Erweitert pr0gramm.com um weitere Funktionen
// ==/UserScript==
console.log("Selfmade M0d running");
const defaultSettings =
{
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,
blockCommentsByUser : false,
commentBlacklist: [],
blockCommentsByBlacklist: false,
blockCommentsByBenis: false,
commentMinBenis: 0
}
let settings = Object.assign({},defaultSettings);
let readSettings = function()
{
let tmp = JSON.parse(localStorage.getItem("Selfmade_M0d_Settings"));
if(tmp != null)
{
Object.keys(tmp).forEach(function(e)
{
if(settings[e] != undefined)
settings[e] = tmp[e];
});
}
}
let checkPageReady;
let checkURL = function()
{
clearInterval(checkPageReady);
if(url.length > 24)
{
checkPageReady = setInterval(function()
{
if($('.tags').length != 0 && $('.block-user').length == 0)
{
clearInterval(checkPageReady);
addBlockTagSign();
addBlockUserSign();
if(settings.isActive)
{
executeModules();
}
}
else if($('.tab-bar').length != 0 && $('.Selfmade_M0d').length == 0 && url.includes('settings'))
{
clearInterval(checkPageReady);
addSettingsTab();
}
},10);
}
}
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)
{
e.preventDefault();
window.history.replaceState({},"Selfmade M0d Settings","/settings/Selfmade_M0d");
createSettings();
});
$('.tab-bar')[0].appendChild(button);
}
let createSettings = function()
{
$('.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>
<div style='margin-top:5px'></div>
<input placeholder='tag1,tag2,tag3,...' title='Tags mit Komma trennen!'></input>
<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><hr size="1" style="color:gray">
<div class='Selfmade_M0d' id='bu' style='display:block' title='Nutzernamen mit Komma trennen!'>
Geblockte Nutzer:<br>
<div style='margin-top:5px'></div>
<input placeholder='nutzer1,nutzer2,nutzer3,...'></input>
<input type='checkbox' class="box-from-label" name="bc">
<label for="bc"> Kommentare von geblockten Nutzern entfernen</label>
</div>
<br><hr size="1" style="color:gray">
<div class="Selfmade_M0d" id='bc' style='display:block'>
Geblockte Wörter in den Kommentaren:<br>
<div style='margin-top:5px'></div>
<input placeholder='wort1,wort2,wort3,...' title='Wörter mit Komma trennen!'></input><br>
<input type="checkbox" class="box-from-label" name="ComMinBenis">
<label for="ComMinBenis" style="display:inline-block"> Mindest Benis bei Kommentaren:</label> <input type="number" min="-999" max="999" value="0">
</div>
<br><hr size="1" style="color:gray">
<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><hr size="1" style="color:gray">
<div class='Selfmade_M0d' id='mb' style='display:block'>
<input type="checkbox" class="box-from-label" name="minBenis" >
<label for="minBenis" style="display:inline-block">Mindest Benis: </label><input type="number" min="-999" max="999" value="0"><br>
<input type="checkbox" class="box-from-label" name="minAverageBenis" >
<label for="minAverageBenis" style="display:inline-block"> Mindest Durchschnittsbenis: </label><input type="number" min="-999" max="999" value="0">
</div>
<br><hr size="1" style="color:gray">
<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='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);
settings.blockedTags.forEach(function(e)
{
createNameTag($('#bt input')[0], e);
});
$('#bt input:first').keyup(function(e){
if(e.key == ',')
{
let text = this.value.slice(0,this.value.length-1).trim().toLowerCase();
if(text.length <3)
{
this.value = text;
return;
}
createNameTag(this, text);
}
});
$('#bt input')[1].checked = settings.onlyGoodTags;
$('#bt input')[2].value = settings.amountOfTagsChecked;
settings.blockedUsers.forEach(function(e)
{
createNameTag($('#bu input')[0], e);
});
$('#bu input:first').keyup(function(e){
if(e.key == ',')
{
let text = this.value.slice(0,this.value.length-1).trim();
if(text.length <3)
{
this.value = text;
return;
}
createNameTag(this, text);
}
});
$('#bu input')[1].checked = settings.blockCommentsByUser;
settings.commentBlacklist.forEach(function(e)
{
createNameTag($('#bc input')[0], e);
});
$('#bc input:first').keyup(function(e){
if(e.key == ',' || e.key == ' ')
{
let text = this.value.slice(0,this.value.length-1).trim().toLowerCase();
if(text.length <3)
{
this.value = text;
return;
}
createNameTag(this, text);
}
});
$('#bc input')[1].checked = settings.blockCommentsByBenis;
$('#bc input')[2].value = settings.commentMinBenis;
settings.blockedUserRanks.forEach(function(e)
{
let tmp = $('label:contains(' + e + ')');
if(tmp.length != 0)
$('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;
$('#save input').click(function()
{
saveSettings();
showNotification("Einstellungen gespeichert");
});
$('#reset a').click(function()
{
localStorage.removeItem('Selfmade_M0d_Settings');
settings = Object.assign({},defaultSettings);
$('a.Selfmade_M0d').click();
showNotification("Einstellungen zurückgesetzt");
});
$('.box-from-label').next().each(function()
{
$(this).click(function()
{
$(this).prev()[0].checked = !$(this).prev()[0].checked;
});
});
}
let createNameTag = function(element, data)
{
let wrapper = document.createElement('span');
$(wrapper).addClass('tag');
$(wrapper).text(data);
let x = document.createElement('a');
$(x).href='#';
$(x).html(" x");
$(x).css("color","red");
$(x).click(function(e)
{
e.preventDefault();
$(this).parent().remove();
});
wrapper.append(x);
element.value = "";
$(element).prev().append(wrapper);
}
let saveSettings = function()
{
settings.blockedTags = [];
$('#bt input').prev().find('span').each(function()
{
let text = this.innerText.slice(0,this.innerText.length-3);
settings.blockedTags.push(text.toLowerCase());
});
settings.skipUploadByTag = settings.blockedTags.length >0?true:false;
settings.onlyGoodTags = $('#bt input')[1].checked;
settings.amountOfTagsChecked = Number($('#bt input')[2].value);
settings.blockedUsers = [];
$('#bu input:first').prev().find('span').each(function()
{
let text = this.innerText.slice(0,this.innerText.length-3);
settings.blockedUsers.push(text.toLowerCase());
});
settings.skipUploadByUser = settings.blockedUsers.length >0 ? true:false;
settings.blockCommentsByUser = $('#bu input')[1].checked;
settings.commentBlacklist = [];
$('#bc input:first').prev().find('span').each(function()
{
let text = this.innerText.slice(0,this.innerText.length-3);
settings.commentBlacklist.push(text.toLowerCase());
});
settings.blockCommentsByBlacklist = settings.commentBlacklist.length >0 ? true:false;
settings.blockCommentsByBenis = $('#bc input')[1].checked;
settings.commentMinBenis = Number($('#bc input')[2].value);
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.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)
{
showNotification("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.toLowerCase();
}
let getUserRank = function(user)
{
switch(user.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.deleteComments && !wasSkipped)
{
deleteCommentsByUser();
}
else if(!wasSkipped)
{
if(settings.blockCommentsByUser)
blockCommentsByUser();
if(settings.blockCommentsByBenis)
blockCommentsByBenis();
if(settings.skipUploadByUserRank)
blockCommentsByRank();
if(settings.blockCommentsByBlacklist)
blockCommentsByBlacklist();
}
}
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();
}
showNotification("Skipped because of Tag: " + tags[i]);
nextUpload();
return true;
}
}
}
let skipUploadByUser = function()
{
let user = getUser();
if(settings.blockedUsers.includes(user))
{
if(settings.autoRateSkippedUploads)
rateUpload();
showNotification("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();
showNotification("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();
showNotification("Skipped because of average Benis: " + score);
return true;
}
}
}
let skipUploadByUserRank = function()
{
let rank = getUserRank($('.item-details .user')[0]);
if(settings.blockedUserRanks.includes(rank))
{
if(settings.autoRateSkippedUploads)
{
rateUpload();
}
nextUpload();
showNotification("Skipped because of Userrank: " + rank);
return true;
}
}
let addBlockTagSign = function()
{
let blockTagSign = document.createElement('span');
blockTagSign.className = "block-tag"
blockTagSign.innerText = "ø";
if($('.block-tag').length == 0)
{
$('.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 = " ø";
if($('.block-user').length == 0)
{
$(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))
{
blockComment(this);
}
});
}
let blockCommentsByBlacklist = function()
{
$('.comment .comment-content').each(function()
{
element = this;
if($(element).attr("data-comment") != undefined)
return;
$($(this).text().toLowerCase().replace(/[^\w\s]/g, '').split(" ")).each(function()
{
if(settings.commentBlacklist.includes(String(this)))
{
blockComment($(element).parent());
return false;
}
});
});
}
let blockCommentsByBenis = function()
{
$('.comment-foot .score').each(function()
{
if(parseFloat(this.innerText) < settings.commentMinBenis)
blockComment($(this).parent().parent());
});
}
let blockCommentsByRank = function()
{
$('.comment-foot .user').each(function()
{
if(settings.blockedUserRanks.includes(getUserRank(this)))
blockComment($(this).parent().parent());
});
}
let blockComment = function(element)
{
let tmp = $(element).find($('.comment-content'));
if(tmp.attr("data-comment") == undefined)
{
$(tmp).css("color", "grey");
$(tmp).css("cursor", "pointer");
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]";
});
$(element).find('.fold-in').click();
}
}
let showNotification = function(text)
{
let element = document.createElement('span');
$(element).css("cssText",'display:none; position:absolute; bottom:0; left:0; line-height:60px; width:100%; background:#ee4d2e; text-align:center; vertical-align:middle');
element.innerText = text;
$('#notificationbox').append(element);
$(element).slideToggle();
$('#notificationbox span:not(:last)').animate(
{
bottom: "+=60"
}
)
$(element).click(function()
{
$(this).animate(
{
left: "-300px"
},function(){this.remove()});
});
setTimeout(function(){
$(element).animate(
{
left: "-300px"
},function(){element.remove()});
},3000);
}
let url = "https://pr0gramm.com";
$(document).ready(function()
{
readSettings();
createFilter();
window.addEventListener("resize", function(){checkURL()});
let notificationbox = "<div id='notificationbox' style='position:fixed; width:300px; left:0; bottom:0; z-index:11'></div>";
$('body').append(notificationbox);
if(window.location.href.includes("Selfmade_M0d"))
{
window.location.href = "https://pr0gramm.com/settings/site";
}
setInterval(function()
{
if(url != window.location.href)
{
url = window.location.href;
checkURL();
}
},100);
});