Selfmade M0d

Erweitert pr0gramm.com um weitere Funktionen

目前為 2017-11-18 提交的版本,檢視 最新版本

// ==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);
});

QingJ © 2025

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