Tcafe Block User

try to take over the world!

Versione datata 14/12/2020. Vedi la nuova versione l'ultima versione.

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name         Tcafe Block User
// @namespace    http://tampermonkey.net/
// @version      1.0
// @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: 10px;
  top: 10px;
  z-index: 9999999;
  border: 2px solid #4CAF50;
  text-align: center;
}
.BanList-wrapper{
text-align: left;
}

`);

//document.querySelector('.top_bg').insertAdjacentHTML('beforeend', '&nbsp;<a class="BanIcon fas fa-ban" href="javascript:void(0)">BanLIST</>')
document.querySelector('body').insertAdjacentHTML('beforebegin', '<div class="BanList">BanList&nbsp;&nbsp;&nbsp;&nbsp;</><i class="BanListupdate far fa-save"></i>')

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

// 대상 node 선택
const target = document.querySelector('body')


// 감시자 인스턴스 만들기
var observer = new MutationObserver(function(mutations) {

    IDs.forEach(function (ID, index, array) {
        let IDNode1 = document.querySelectorAll("div.user > a[onclick*=" + ID +"]")
        let IDNode2 = document.querySelectorAll("td > a[onclick*=" + ID +"]")

        if(IDNode2){
            for(var j=0; j < IDNode2.length; j++) {
                if (IDNode2[j].parentNode) {
                    console.log('게시글 번호  : ' + IDNode2[j].closest('tr').getAttribute('id') + ' -- ID : ' + ID)
                    $(IDNode2[j]).closest('tr').remove()
                }
            }
        }
        if(IDNode1 && /wr_id/.test(window.location.href)){
            for(var i=0; i < IDNode1.length; i++) {
                if (IDNode1[i].parentNode) {
                    console.log('코멘트 번호 : ' + IDNode1[i].closest('div.user').nextElementSibling.children[1].getAttribute('name') + ' -- ID : ' + ID)
                    $(IDNode1[i]).closest('div.box').remove()
                }
            }

        }
    })


})

// 감시자의 설정:
var config = { attributes: true, childList: true };

// 감시자 옵션 포함, 대상 노드에 전달
observer.observe(target, config);

// 차단 ID 저장
GM_setValue("IDs", JSON.stringify(IDs))

function BanList() {
    let getids = document.querySelector('td#sideViewRow_mb_id > span > a').getAttribute('href')
    let id =getids.replace(/.*\&stx=/,'')
    if(IDs.indexOf(id) !== -1){
        alert("이미 차단 등록되었습니다!")
    } else{
        IDs.push(id)
        GM_setValue("IDs", JSON.stringify(IDs))
        Reload()
    }
}


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

for (let i = 0; i < BanIDs.length; i++) {
    BanIDs[i].addEventListener("click", async function(e){
        await sleep(150)
        let entries = document.querySelector('td#sideViewRow_mb_id')
        //console.log(entries)
        entries.closest('tr').insertAdjacentHTML('afterend', '<tr height="19"><td id="Banid">&nbsp;<font color="gray">·</font>&nbsp;<span style="color: #A0A0A0;  font-family: 돋움; font-size: 11px;"><a href="javascript:void(0);">Ban ID</a></span></td></tr>')
        document.querySelector('#Banid').addEventListener("click", function(e){
            e.preventDefault()
            BanList()
        });

    })
}

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

function update() {
    let BanCheck = document.querySelectorAll('.BanCheck')
    //console.log(BanCheck)
    for (let i = 0; i < BanCheck.length; i++) {
        if (BanCheck[i].checked == false){
            var AddID = BanCheck[i].getAttribute('id')
            //console.log(AddID)
            IDs.splice(IDs.indexOf(AddID), 1)
            //console.log(IDs)
        }
        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] + " ( " + document.querySelectorAll("td > a[onclick*=" + IDs[i] +"]").length + " / " + document.querySelectorAll("div.user > a[onclick*=" + IDs[i] +"]").length + " )"
        checkbox.type = 'checkbox'
        checkbox.checked = true
        checkbox.setAttribute("class", 'BanCheck')
        checkbox.setAttribute("id", IDs[i])
        wrapper.appendChild(checkbox)
        wrapper.appendChild(label)
        Bancontainer.appendChild(wrapper)
    }
}