Selfmade M0d

Erweitert pr0gramm.com um weitere Funktionen

当前为 2017-11-15 提交的版本,查看 最新版本

// ==UserScript==
// @name		Selfmade M0d
// @author		Frubi
// @description	Erweitert pr0gramm.com um weitere Funktionen
// @include		*://pr0gramm.com/*
// @grant       none
// @version		1.23
// @namespace https://gf.qytechs.cn/users/158955
// ==/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
}



let readSettings = function()
{
   let temp = JSON.parse(localStorage.getItem("Selfmade_M0d_Settings"));
   if(temp != null)
   {
       settings = temp;
   }
}

let checkSettingsReady;

let checkURL= function()
{
    if(url.length > 24)
    {
        if(url.includes("new") || url.includes("top") || url.includes("user"))
        {
            if($('.item-container').length != 0)
            {    
                addBlockTagSign();
                addBlockUserSign();
                
                if(settings.isActive)
                {
                    executeModules();
                }
            }
        }
        else if(url.includes('settings'))
        {
            let settingsReady = new Event("settingsReady");
            window.addEventListener("settingsReady", function()
            {
                clearInterval(checkSettingsReady);
                addSettingsTab();
            });
            
            clearInterval(checkSettingsReady);
            checkSettingsReady = setInterval(function()
                {
                    if($('.tab-bar')[0] != undefined)
                        window.dispatchEvent(settingsReady);
                }
                ,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.addEventListener('click', (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 wrapper = document.createElement('div');
    wrapper.className = "form-section"; 

    let tagText = document.createElement('span');
    tagText.innerText = "Geblockte Tags: ";
    tagText.className = "Selfmade_M0d";
    tagText.id = 'bt';
    tagText.title = "Tags mit Komma trennen!";
    let skippedTagsInput = document.createElement('input');
    skippedTagsInput.defaultValue = settings.blockedTags.join(',');
    tagText.appendChild(skippedTagsInput);
    wrapper.appendChild(tagText);

    let userText = document.createElement('span');
    userText.innerText = "Geblockte Nutzer: ";
    userText.className = "Selfmade_M0d";
    userText.id = 'bu';
    userText.title = "Nutzernamen mit Komma trennen!";
    let skippedUsersInput = document.createElement('input');
    skippedUsersInput.defaultValue = settings.blockedUsers.join(',');
    userText.appendChild(skippedUsersInput);
    wrapper.appendChild(userText);

    let rankText = document.createElement('span');  
    rankText.innerText = "Geblockte Ränge: ";
    rankText.className = "Selfmade_M0d";
    wrapper.appendChild(rankText);

    let fagText = document.createElement('span');
    fagText.innerText = "Schwuchtel: ";
    fagText.className = "Selfmade_M0d";
    fagText.id = 'fag';
    let skipFagRankButton = document.createElement('input');
    skipFagRankButton.type = "checkbox";
    if(settings.blockedUserRanks.includes("fag"))
        skipFagRankButton.defaultChecked = true;
    fagText.appendChild(skipFagRankButton);
    wrapper.appendChild(fagText);

    let newFagText = document.createElement('span');
    newFagText.innerText = "Neuschwuchtel: ";
    newFagText.className = "Selfmade_M0d";
    newFagText.id = 'newfag';
    let skipNewfagRankButton = document.createElement('input');
    skipNewfagRankButton.type = "checkbox";
    if(settings.blockedUserRanks.includes("newfag"))
        skipNewfagRankButton.defaultChecked = true;
    newFagText.appendChild(skipNewfagRankButton);
    wrapper.appendChild(newFagText);

    let oldFagText = document.createElement('span');
    oldFagText.innerText = "Altschwuchtel: ";
    oldFagText.className = "Selfmade_M0d";
    oldFagText.id = 'oldfag';
    let skipOldfagRankButton = document.createElement('input');
    skipOldfagRankButton.type = "checkbox";
    if(settings.blockedUserRanks.includes("oldfag"))
        skipOldfagRankButton.defaultChecked = true;
    oldFagText.appendChild(skipOldfagRankButton);
    wrapper.appendChild(oldFagText);

    let pr0miumText = document.createElement('span');
    pr0miumText.innerText = "Pr0mium: ";
    pr0miumText.className = "Selfmade_M0d";
    pr0miumText.id = 'pr0mium';
    let skippr0miumRankButton = document.createElement('input');
    skippr0miumRankButton.type = "checkbox";
    if(settings.blockedUserRanks.includes("pr0mium"))
        skippr0miumRankButton.defaultChecked = true;
    pr0miumText.appendChild(skippr0miumRankButton);
    wrapper.appendChild(pr0miumText);

    let deletedText = document.createElement('span');
    deletedText.innerText = "Gesperrt: ";
    deletedText.className = "Selfmade_M0d";
    deletedText.id = 'deleted';
    let skipDeletedRankButton = document.createElement('input');
    skipDeletedRankButton.type = "checkbox";
    if(settings.blockedUserRanks.includes("deleted"))
        skipDeletedRankButton.defaultChecked = true;
    deletedText.appendChild(skipDeletedRankButton);
    wrapper.appendChild(deletedText);

    let scumText = document.createElement('span');
    scumText.innerText = "Fliesentischbesitzer: ";
    scumText.className = "Selfmade_M0d";
    scumText.id = 'scum';
    let skipScumRankButton = document.createElement('input');
    skipScumRankButton.type = "checkbox";
    if(settings.blockedUserRanks.includes("scum"))
        skipScumRankButton.defaultChecked = true;
    scumText.appendChild(skipScumRankButton);
    wrapper.appendChild(scumText);
        

    let legendText = document.createElement('span');
    legendText.innerText = "Lebende Legende: ";
    legendText.className = "Selfmade_M0d";
    legendText.id = 'legend';
    let skipLegendRankButton = document.createElement('input');
    skipLegendRankButton.type = "checkbox";
    if(settings.blockedUserRanks.includes("legend"))
    skipLegendRankButton.defaultChecked = true;
    legendText.appendChild(skipLegendRankButton);
    wrapper.appendChild(legendText);

    let modText = document.createElement('span');
    modText.innerText = "Moderator: ";
    modText.className = "Selfmade_M0d";
    modText.id = 'mod';
    let skipModRankButton = document.createElement('input');
    skipModRankButton.type = "checkbox";
    if(settings.blockedUserRanks.includes("mod"))
    skipModRankButton.defaultChecked = true;
    modText.appendChild(skipModRankButton);
    wrapper.appendChild(modText);

    let adminText = document.createElement('span');
    adminText.innerText = "Administrator: ";
    adminText.className = "Selfmade_M0d";
    adminText.id = 'admin';
    let skipAdminRankButton = document.createElement('input');
    skipAdminRankButton.type = "checkbox";
    if(settings.blockedUserRanks.includes("admin"))
    skipAdminRankButton.defaultChecked = true;
    adminText.appendChild(skipAdminRankButton);
    wrapper.appendChild(adminText);

    let totalBenisText = document.createElement('span');
    totalBenisText.innerText = "Mindest Benis: ";
    totalBenisText.className = "Selfmade_M0d";
    totalBenisText.id = 'mb';
    let skipUploadByTotalBenisButton = document.createElement('input');
    skipUploadByTotalBenisButton.type = "checkbox";
    skipUploadByTotalBenisButton.defaultChecked = settings.skipUploadByTotalBenis;
    totalBenisText.appendChild(skipUploadByTotalBenisButton);
    wrapper.appendChild(totalBenisText);
    let skipUploadByTotalBenisInput = document.createElement('input');
    skipUploadByTotalBenisInput.type = "number";
    skipUploadByTotalBenisInput.defaultValue = settings.minBenis;
    totalBenisText.appendChild(skipUploadByTotalBenisInput);
    wrapper.appendChild(totalBenisText);

    let averageBenisText = document.createElement('span');
    averageBenisText.innerText = "Mindest Durchschnittsbenis: ";
    averageBenisText.className = "Selfmade_M0d";
    averageBenisText.id = 'ab';
    let skipUploadByAverageBenisButton = document.createElement('input');
    skipUploadByAverageBenisButton.type = "checkbox";
    skipUploadByAverageBenisButton.defaultChecked = settings.skipUploadByAverageBenis;
    averageBenisText.appendChild(skipUploadByAverageBenisButton);
    wrapper.appendChild(averageBenisText);
    let skipUploadByAverageBenisInput = document.createElement('input');
    skipUploadByAverageBenisInput.type = "number";
    skipUploadByAverageBenisInput.defaultValue = settings.minAverageBenis;
    averageBenisText.appendChild(skipUploadByAverageBenisInput);
    wrapper.appendChild(averageBenisText);

    let onlyGoodTagsText = document.createElement('span');
    onlyGoodTagsText.innerText = "Keine Heruntergevoteten Tags berücksichtigen ";
    onlyGoodTagsText.className = "Selfmade_M0d";
    onlyGoodTagsText.id = 'gt';
    let onlyGoodTagsButton = document.createElement('input');
    onlyGoodTagsButton.type = "checkbox";
    onlyGoodTagsButton.defaultChecked = settings.onlyGoodTags;
    onlyGoodTagsText.appendChild(onlyGoodTagsButton);
    wrapper.appendChild(onlyGoodTagsText);

    let amountOfTagsText = document.createElement('span');
    amountOfTagsText.innerText = "Anzahl der Tags: ";
    amountOfTagsText.className = "Selfmade_M0d";
    amountOfTagsText.id = 'at';
    amountOfTagsText.title = "-1 = alle";
    let amountOfTagsCheckedInput = document.createElement('input');
    amountOfTagsCheckedInput.type = "number";
    amountOfTagsCheckedInput.defaultValue = settings.amountOfTagsChecked;
    amountOfTagsText.appendChild(amountOfTagsCheckedInput);
    wrapper.appendChild(amountOfTagsText);

    let directionText = document.createElement('span');
    directionText.innerText = "Skiprichtung rechts ";
    directionText.className = "Selfmade_M0d";
    directionText.id = 'di';
    let nextUploadDirection = document.createElement('input');
    nextUploadDirection.type = "checkbox";
    if(settings.nextUploadDirection == -1)
        nextUploadDirection.defaultChecked = true;
    directionText.appendChild(nextUploadDirection);
    wrapper.appendChild(directionText);   

    let saveSettingsButton = document.createElement('button');
    saveSettingsButton.type = "button";
    saveSettingsButton.innerText = "Speichern";
    saveSettingsButton.id = "SMSubmit";
    wrapper.appendChild(saveSettingsButton);

    let resetSettingsButton = document.createElement('button');
    resetSettingsButton.type = "button";
    resetSettingsButton.innerText = "Einstellungen zurücksetzen";
    resetSettingsButton.id = "SMReset";
    wrapper.appendChild(resetSettingsButton);

 
    $('.pane.form-page')[0].appendChild(wrapper); 

    $('.Selfmade_M0d:not(a)').css("display", "block");
    $('#SMSubmit').click(function(){
        saveSettings();
    });

    $('#SMReset').click(function(){
        localStorage.removeItem('Selfmade_M0d_Settings');
        location.href = "http://pr0gramm.com/new";
    });
}

let saveSettings = function()
{
    settings.blockedTags = $('#bt')[0].children[0].value.split(',');
    
    for(let i = settings.blockedTags.length-1; i>=0 ;i--)
    {
        if(settings.blockedTags[i] == "")
        {
            settings.blockedTags.splice(i,1);
            continue;
        }
        while(settings.blockedTags[i][0] == " ")
        {
            settings.blockedTags[i] =  settings.blockedTags[i].slice(1,settings.blockedTags[i].length);
        }
        while(settings.blockedTags[i][settings.blockedTags[i].length-1] == " ")
        {
            settings.blockedTags[i] = settings.blockedTags[i].slice(0,settings.blockedTags[i].length-1);
        }
    }
        
    if(settings.blockedTags.length >0)
        settings.skipUploadByTag = true;
    else    
        settings.skipUploadByTag = false;

    settings.onlyGoodTags = $('#gt')[0].children[0].checked;

    settings.amountOfTagsChecked = Number($('#at')[0].children[0].value);

    settings.blockedUsers = $('#bu')[0].children[0].value.split(','); 
    for(let i = settings.blockedUsers.length-1; i>= 0; i--)
    { 
        if(settings.blockedUsers[i] == "")
            settings.blockedUsers.splice(i,1);
    }
      
    if(settings.blockedUsers.length >0)
        settings.skipUploadByUser = true;
    else    
        settings.skipUploadByUser = false;

    settings.skipUploadByTotalBenis = $('#mb')[0].children[0].checked;
    settings.minBenis = Number($('#mb')[0].children[1].value);

    settings.skipUploadByAverageBenis = $('#ab')[0].children[0].checked;
    settings.minAverageBenis = Number($('#ab')[0].children[1].value);

    settings.blockedUserRanks = [];
    if($('#fag')[0].children[0].checked)
        settings.blockedUserRanks.push("fag");
    if($('#newfag')[0].children[0].checked)
        settings.blockedUserRanks.push("newfag");
    if($('#oldfag')[0].children[0].checked)
        settings.blockedUserRanks.push("oldfag");
    if($('#pr0mium')[0].children[0].checked)
        settings.blockedUserRanks.push("pr0mium");
    if($('#deleted')[0].children[0].checked)
        settings.blockedUserRanks.push("deleted");
    if($('#scum')[0].children[0].checked)
        settings.blockedUserRanks.push("scum");
    if($('#legend')[0].children[0].checked)
        settings.blockedUserRanks.push("legend");
    if($('#mod')[0].children[0].checked)
        settings.blockedUserRanks.push("mod");
    if($('#admin')[0].children[0].checked)
        settings.blockedUserRanks.push("admin");
     
    if(settings.blockedUserRanks.length >0)
        settings.skipUploadByUserRank = true;
    else    
        settings.skipUploadByUserRank = false;

    if($('#di')[0].children[0].checked)
        settings.nextUploadDirection = -1;
    else
        settings.nextUploadDirection = 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)
{
    if(direction == 1)
    {
        if($('.item-vote')[0].className.indexOf("voted-up") == -1)
            $('.vote-up').click();
    }
    else if(direction == -1)
    {
        if($('.item-vote')[0].className.indexOf("voted-down") == -1)
            $('.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()
{
    let start = new Date();
    while($('.user')[0] == undefined)
    {
        if(new Date() - start > 5000)
        {
            console.error("Loading took too long");
            return;
        }
    }
    return $('.item-details .user')[0].innerText;
}

let getUserRank = function()
{
    let start = new Date();
    while($('.user')[0] == undefined)
    {
        if(new Date() - start > 5000)
        {
            console.error("Loading took too long");
            return;
        }
    }
    switch($('.item-details .user')[0].classList[1])
    {
        case("um0"):
            return "fag";
        break;
        case("um1"):
            return "newfag";
        break;
        case("um2"):
            return "oldfag";
        break;
        case("um3"):
            return "admin";
        break;
        case("um4"):
            return "deleted";
        break;
        case("um5"):
            return "mod";
        break;
        case("um6"):
            return "scum";
        break;
        case("um7"):
            return "legend";
        break;
        case("um8"):
        break;
        case("um9"):
            return "pr0mium";
        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();
    }
}

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();
    for(let i = 0; i < settings.blockedUsers.length; i++)
    {
        if(settings.blockedUsers.includes(user))
        {
            if(settings.autoRateSkippedUploads)
                rateUpload();

            console.log("Skipped because of User: " + settings.blockedUsers[i]);
            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();
    for(let i = 0; i < settings.blockedUserRanks.length; i++)
    {
        if(rank == settings.blockedUserRanks[i])
        {
            if(settings.autoRateSkippedUploads)
            {
                rateUpload();
            }
            nextUpload();
            console.log("Skipped because of Userrank: " + settings.blockedUserRanks[i]);
            return true;
        }
    }
}

let addBlockTagSign = function()
{
    let start = new Date();
    while($('.item-tags')[0] == undefined)
    {
        if(new Date() - start > 5000)
        {
            console.error("Loading took too long");
            return;
        }
    }

    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 start = new Date();
    while($('.item-tags')[0] == undefined)
    {
        if(new Date() - start > 5000)
        {
            console.error("Loading took too long");
            return;
        }
    }

    let blockUserSign = document.createElement('span');
    blockUserSign.className = "block-user"
    blockUserSign.innerText = " ø";
   $(blockUserSign).insertAfter($('.user'));
    $('.block-user').css("cursor", "pointer");

    if(settings.blockedUsers.includes(getUser()))
    {
        $('.block-user').css("color", "red");
    }  
    
    $('.block-user').click(function()
    {
        let tmp = getUser();

        if($('.block-user').css("color") == "rgb(255, 0, 0)")
        {
            settings.blockedUsers.splice(settings.blockedUsers.indexOf(tmp),1);
            if(settings.blockedUsers.length > 0)
                settings.skipUploadByUser  = true;
            else
                settings.skipUploadByUser  = false;
            $('.block-user').css("color","" );
        }
        else
        {
            settings.blockedUsers.push(tmp);
            settings.skipUploadByUser  = true;
            $(this).css("color", "red");
        }
        
        quickSave();
    });
    

}

let url = "https://pr0gramm.com";

$(document).ready(function()
{
    readSettings();
    createFilter();

    let urlChange = new Event('urlChange');
    window.addEventListener("urlChange", function(){checkURL()});
    
    setInterval(function()
    {
        if(url != window.location.href)
        {
            url = window.location.href;
            window.dispatchEvent(urlChange);        
        }
    },100); 
});

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址