Tcafe Block User

try to take over the world!

目前為 2020-12-17 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Tcafe Block User
// @namespace    http://tampermonkey.net/
// @version      2.4
// @description  try to take over the world!
// @author       You
// @include      /tcafe2a.com/
// @require      http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant        GM_setValue
// @grant        GM_getValue
// @grant		 GM_addStyle
// @run-at       document-end
// ==/UserScript==
(function() { var css = document.createElement('link'); css.href = 'https://use.fontawesome.com/releases/v5.15.1/css/all.css'; css.rel = 'stylesheet'; css.type = 'text/css'; document.getElementsByTagName('head')[0].appendChild(css); })();

GM_addStyle (`
body {
    position: absolute!important;
    top: 0!important;
    bottom: 0!important;
    left: 0!important;
    right: 0!important;
    width: 1100px!important;
    margin: auto!important;
}
.BanList {
    position : absolute;
    left: 901px;
    top: 5px;
    z-index: 9999999;
    border: 2px solid #4CAF50;
    text-align: center;
	font-family: 'Nanum Gothic', "Malgun Gothic", dotum, sans-serif !important;	
    background-color: white;
    padding: .4em .4em;
    margin: auto;
    font-size: 14px;
}
.BanButton {
    position : absolute;
    left: 901px;
    top: 5px;
    z-index: 9999998;    
	font-family: 'Nanum Gothic', "Malgun Gothic", dotum, sans-serif !important;
    //background-color: white;
    padding: .4em .4em;
    margin: auto;
    font-size: 14px;
}
.BanList-wrapper {
    text-align: left;
    font-size: 12px;
    font-family: 'Nanum Gothic', "Malgun Gothic", dotum, sans-serif !important;
    margin: auto;
}
.BanCheck {
    text-align: center !important;
    margin: auto;
}
`);

document.querySelector('table#cssImg').insertAdjacentHTML('afterend', '<div class="BanButton"><i class="BanButtonIcon far fa-angry fa-2x fa-spin"></i></>')
document.querySelector('table#cssImg').insertAdjacentHTML('afterend', '<div class="BanList"><i class="BanListupdate far fa-save"></i>&nbsp;&nbsp;BanList&nbsp;&nbsp;<i class="BanListClose fas fa-times"></i></>')


// 차단유저 ID
var IDs = JSON.parse(GM_getValue("IDs", "[]"))
var ShowHide = GM_getValue("ShowHide")

if(ShowHide == 'Hide'){
    $(".BanList").hide()
    $(".BanButton").show()
}
else{
    $(".BanButton").hide()
    $(".BanList").show()    
}

IDs.forEach(function (item) {
    var idx = item.ID
    let IDNodeC = document.querySelectorAll("div.user > a[onclick*=" + idx +"]")
    let IDNodeW = document.querySelectorAll("td > a[onclick*=" + idx +"]")

    //코멘트 제거
    if(IDNodeC && /wr_id/.test(window.location.href)){
        for(var i=0; i < IDNodeC.length; i++) {
            var matchIDc = IDNodeC[i].outerHTML.match(/showSideView\(this, '(.*)',/)
            if (IDNodeC[i].parentNode.className ==='user' && matchIDc[1] == item.ID) {
                console.log('코멘트 번호 : ' + IDNodeC[i].parentNode.nextElementSibling.children[1].getAttribute('name') + ' -- 닉네임 : ' + item.NickName)
                IDNodeC[i].closest('div.box').remove()
            }
        }
    }
    //글목록에서 제거
    if(IDNodeW){
        for(var j=0; j < IDNodeW.length; j++) {
            var matchID = IDNodeW[j].outerHTML.match(/showSideView\(this, '(.*)',/)
            if (IDNodeW[j].closest('tr') && matchID[1] == item.ID) {
                console.log('게시글 번호  : ' + IDNodeW[j].closest('tr').getAttribute('id') + ' -- 닉네임 : ' + item.NickName)
                IDNodeW[j].closest('tr').remove()
            }
        }
    }
})

function BanList(GetID, GetNickName) {
    let searchID = IDs.find( ({ ID }) => ID === GetID )
    let searchNickName = IDs.find( ({ NickName }) => NickName === GetNickName )
    if(searchNickName){
        alert("[ " + GetNickName + " ] 이미 차단 등록되었습니다!")
    } else if(searchID){
        alert("[ " + GetID + " ] 이미 차단 등록되었습니다!")
    } else {
        IDs.push({ID : GetID, NickName : GetNickName});
        GM_setValue("IDs", JSON.stringify(IDs))
        Reload()
    }
}

let BanIDs = document.querySelectorAll('span.member')

for (let i = 0; i < BanIDs.length; i++) {
    BanIDs[i].parentNode.insertAdjacentHTML('afterend', '&nbsp;&nbsp;<a class="AddBan" href="javascript:void(0)"><i class="fas fa-user-slash" style="color:#FF2D00 !important;"></i></>')
}

let AddBanIcon = document.querySelectorAll('.AddBan')

for (let i = 0; i < AddBanIcon.length; i++) {
    AddBanIcon[i].addEventListener("click", function(e){
        let getinfo = AddBanIcon[i].previousElementSibling.getAttribute('onclick')        
        let GetNickName = AddBanIcon[i].previousElementSibling.textContent
        let GetID = getinfo.match(/showSideView\(this, '(.*)',/)[1]
        BanList(GetID, GetNickName)
    })
}

function update() {
    let BanCheck = document.querySelectorAll('.BanCheck')
    //console.log(BanCheck)
    for (let i = 0; i < BanCheck.length; i++) {
        if (BanCheck[i].checked == false){
            var RemoveNickName = BanCheck[i].getAttribute('NickName')
            //console.log(AddID)
            var removeIndex = IDs.map(function(item) { return item.NickName; }).indexOf(RemoveNickName);

            // remove object
            IDs.splice(removeIndex, 1);

        }
        if(i == BanCheck.length -1){
            GM_setValue("IDs", JSON.stringify(IDs))
            Reload()
        }
    }
}



const Bancontainer = document.querySelector('.BanList')
const BanUpdate = document.querySelector('.BanListUpdate')

BanUpdate.addEventListener("click", function(e){
    update()
})

MakeList()

function Reload() {
    var element = document.querySelectorAll('.BanList-wrapper')
    Array.prototype.forEach.call( element, function( node ) {
        node.parentNode.removeChild( node );
    });
    MakeList()
}

function MakeList() {
    for (let i = 0; i < IDs.length; i++) {
        let wrapper = document.createElement('div')
        let label = document.createElement('label')
        let checkbox = document.createElement('input')

        wrapper.classList.add('BanList-wrapper')
        //label.textContent = ' ' + IDs[i].NickName + " [ " + document.querySelectorAll("td > a[onclick*=" + IDs[i].ID +"]").length + " | " + document.querySelectorAll("div.user > a[onclick*=" + IDs[i].ID +"]").length + " ]"
        label.textContent = ' ' + IDs[i].NickName
        checkbox.type = 'checkbox'
        checkbox.checked = true
        checkbox.setAttribute("class", 'BanCheck')
        checkbox.setAttribute("NickName", IDs[i].NickName)
        wrapper.appendChild(checkbox)
        wrapper.appendChild(label)
        Bancontainer.appendChild(wrapper)
    }
}

var floatPosition = parseInt($(".BanButton").css('top'));

$(window).scroll(function() {
    // 현재 스크롤 위치를 가져온다.
    var scrollTop = $(window).scrollTop();
    var newPosition = scrollTop + floatPosition + "px";

    $(".BanButton").css('top', newPosition);
    $(".BanList").css('top', newPosition);

}).scroll();

$(".BanListClose").click(function(){
    $(".BanList").slideUp(function() {
        $(".BanButton").slideDown()
        ShowHide = 'Hide'
        GM_setValue("ShowHide", ShowHide)
    })
})

$(".BanButtonIcon").click(function(){
    $(".BanButton").slideUp(function() {
        $(".BanList").slideDown()
        ShowHide = 'Show'
        GM_setValue("ShowHide", ShowHide)
    })
})

QingJ © 2025

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