// ==UserScript==
// @name afreecatv bj 차단
// @match *://afreecatv.com/*
// @match *://www.afreecatv.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant GM_addStyle
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_registerMenuCommand
// @grant GM_deleteValue
// @version 0.0.1.20210709164605
// @namespace https://greasyfork.org/users/289839
// @description afreecatv bj 차단함
// @downloadURL none
// ==/UserScript==
var regex = [] // [/키워드1/, /키워드2/]
var bj = [] // ['abc123', 'def345']
////////////////////////////////////////////////////////
var bj_list = GM_getValue("bj_list")
var test = GM_getValue("bj_list")
if (test == null || test == "undefined" || test == []){
GM_setValue("bj_list", bj)}
bj_list = bj_list.concat(bj)
/*--- waitForKeyElements(): A utility function, for Greasemonkey scripts,
that detects and handles AJAXed content.
Usage example:
waitForKeyElements (
"div.comments"
, commentCallbackFunction
);
//--- Page-specific function to do what we want when the node is found.
function commentCallbackFunction (jNode) {
jNode.text ("This comment changed by waitForKeyElements().");
}
IMPORTANT: This function requires your script to have loaded jQuery.
*/
function waitForKeyElements (
selectorTxt, /* Required: The jQuery selector string that
specifies the desired element(s).
*/
actionFunction, /* Required: The code to run when elements are
found. It is passed a jNode to the matched
element.
*/
bWaitOnce, /* Optional: If false, will continue to scan for
new elements even after the first match is
found.
*/
iframeSelector /* Optional: If set, identifies the iframe to
search.
*/
) {
var targetNodes, btargetsFound;
if (typeof iframeSelector == "undefined")
targetNodes = $(selectorTxt);
else
targetNodes = $(iframeSelector).contents ()
.find (selectorTxt);
if (targetNodes && targetNodes.length > 0) {
btargetsFound = true;
/*--- Found target node(s). Go through each and act if they
are new.
*/
targetNodes.each ( function () {
var jThis = $(this);
var alreadyFound = jThis.data ('alreadyFound') || false;
if (!alreadyFound) {
//--- Call the payload function.
var cancelFound = actionFunction (jThis);
if (cancelFound)
btargetsFound = false;
else
jThis.data ('alreadyFound', true);
}
} );
}
else {
btargetsFound = false;
}
//--- Get the timer-control variable for this selector.
var controlObj = waitForKeyElements.controlObj || {};
var controlKey = selectorTxt.replace (/[^\w]/g, "_");
var timeControl = controlObj [controlKey];
//--- Now set or clear the timer as appropriate.
if (btargetsFound && bWaitOnce && timeControl) {
//--- The only condition where we need to clear the timer.
clearInterval (timeControl);
delete controlObj [controlKey]
}
else {
//--- Set a timer, if needed.
if ( ! timeControl) {
timeControl = setInterval ( function () {
waitForKeyElements ( selectorTxt,
actionFunction,
bWaitOnce,
iframeSelector
);
},
300
);
controlObj [controlKey] = timeControl;
}
}
waitForKeyElements.controlObj = controlObj;
}
window.addEventListener ("load", function () {
waitForKeyElements ("#broadlist_area.cBox-list", bj_hide);
//document.getElementsByTagName("html")[0].style.visibility = "visible";
setTimeout(function(){document.getElementById("broadlist_area").style.visibility = "visible" }, 1000);
}, false);
const bodyObserver = new MutationObserver(function(mutations, observer) {
bj_hide()
//console.log('afafaf')
});
bodyObserver.observe(document.body, {
childList: true,
subtree: true
});
function bj_hide (jNode) {
$("#broadlist_area.cBox-list").find('.cBox-info').each(function(){
//var cbox = $(this).find('.cBox-info')
var li = $(this).closest('li')
var title = $(this).find('a.title').attr('title');
var uid = $(this).find('a.nick').attr('user_id');
var nick = $(this).find('a.nick').text
if (bj_list.includes(uid) || regex.some(rx => rx.test(title)) || regex.some(rx => rx.test(nick))) {
li.hide()
//li.remove()
}
//$('.reload').hide()
});
var cb = document.getElementById('broadlist_area').getElementsByClassName('cBox-info')
for(var i = 0; i < cb.length; i++){
var node = cb[i]
if (node.getElementsByTagName("chadan").length == 0) {
var newHTML = document.createElement ('chadan');
newHTML.innerHTML = " "
node.append(newHTML);
var hide = "hide" + i
document.getElementById (hide).addEventListener (
"click", ButtonClickAction, false
);
}
}
}
function ButtonClickAction (zEvent) {
var button_id = zEvent.srcElement.attributes.id.value
var c = document.getElementById (button_id).parentNode.parentNode
var user_id = c.getElementsByTagName('a')[1].attributes[1].value
c.parentNode.style.display = 'none'
bj_list.push(user_id)
bj_list = bj_list.filter(onlyUnique).filter(Boolean)
GM_setValue("bj_list", bj_list)
}
GM_addStyle ( multilineStr ( function () {/*!
chadan {
color: black;
background: white;
margin: 5px;
}
#myButton {
cursor: pointer;
}
#myContainer p {
color: red;
background: white;
}
*/} ) );
function multilineStr (dummyFunc) {
var str = dummyFunc.toString ();
str = str.replace (/^[^\/]+\/\*!?/, '') // Strip function () { /*!
.replace (/\s*\*\/\s*\}\s*$/, '') // Strip */ }
.replace (/\/\/.+$/gm, '') // Double-slash comments wreck CSS. Strip them.
;
return str;
}
function onlyUnique(value, index, self) {
return self.indexOf(value) === index;
}