Last active
February 24, 2020 10:59
-
-
Save hadongsoo/37a7739b9f3945111959cb438b3123b6 to your computer and use it in GitHub Desktop.
tgd hotclip keyword block
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name tgd_hotclick_block | |
// @version 1 | |
// @grant none | |
// @include *://tgd.kr/clips* | |
// @run-at document-end | |
// @grant GM_addStyle | |
// ==/UserScript== | |
GM_addStyle(` | |
.btn_ban { | |
color:red; | |
width:15px; | |
height:15px; | |
margin:2px 0; | |
vertical-align: top; | |
padding: 2px; | |
font-size: 10px; | |
line-height: 12px; | |
display: inline-block; | |
border:0; | |
background:none; | |
} | |
.btn_ban:hover { | |
background:rgba(0,0,0,0.2); | |
} | |
`); | |
let listWrapper = '.frame', | |
listItem = '.clips', | |
clipTitle = '.clip-launch', | |
clipStreamer = '.streamer'; | |
// 클립명 필터링 | |
let blockList = [ | |
'blockKeyword', | |
'[AD]', | |
'(광고)', | |
] | |
// 최초 스트리머 필터링 사전 추가 | |
let firstStreamerList = [ | |
"한동숙", | |
"얍얍", | |
"자동", | |
"룩삼", | |
"따효니", | |
"김영일", | |
"공혁준", | |
"똘똘똘이_", | |
"로복_", | |
"탠타임", | |
"바퀴아재", | |
"박옥자누나", | |
"러너", | |
"gua_seo", | |
"야매인생", | |
"껨구", | |
"뽀삐짱", | |
"노래앙법", | |
"해공이랑", | |
"밍모", | |
"이브티", | |
"친절한윤석씌", | |
"크랭크_", | |
"배르니", | |
"렐라", | |
"차숭어", | |
"힘의길", | |
"혁찌니", | |
"즐디", | |
"국인11", | |
"김끠자", | |
"쌍베", | |
"복승하_", | |
"청년문규", | |
"케인", | |
"소우릎", | |
"소녀공장", | |
"백구ㅎㅅㅎ", | |
"새안", | |
"요룰레히", | |
"샌드백", | |
"짬타수아", | |
"꽃빈", | |
"철면수심", | |
"두더지__", | |
"키마리오", | |
"플러리", | |
"앰비션_", | |
"담백한종훈이", | |
"금다정", | |
"487577612", | |
"487729032" | |
] | |
let tempStreamerList = [ | |
] | |
let numberStreamerList = { | |
235491613:'MSFIIIRE', | |
471919376:'텐텐2' | |
} | |
if (!localStorage.getItem("streamLocalList")) { | |
localStorage.setItem("streamLocalList", JSON.stringify(firstStreamerList)); | |
} | |
if (!localStorage.getItem("tStreamerList")) { | |
localStorage.setItem("tStreamerList", JSON.stringify(tempStreamerList)); | |
// console.log('없어서 만듬 temp'); | |
} | |
if (!localStorage.getItem("nStreamerList")) { | |
localStorage.setItem("nStreamerList", JSON.stringify(numberStreamerList)); | |
// console.log('없어서 만듬 numberStreamerList'); | |
} | |
// console.log(tStreamerList); | |
let streamLocalList = JSON.parse(localStorage.getItem("streamLocalList")); | |
let tStreamerList = JSON.parse(localStorage.getItem("tStreamerList")); | |
let nStreamerList = JSON.parse(localStorage.getItem("nStreamerList")); | |
if (streamLocalList){ | |
console.log(streamLocalList); | |
} | |
if (tStreamerList){ | |
console.log(tStreamerList); | |
} | |
// make messege wrapper | |
if (!document.querySelector('.alertify-logs')){ | |
let alertify = `<div class="alertify-logs bottom left"></div>`; | |
document.body.insertAdjacentHTML('beforeend', alertify); | |
} | |
const getCookie = ( name ) => { | |
var nameOfCookie = name + "="; | |
var x = 0; | |
while ( x <= document.cookie.length ) | |
{ | |
var y = (x+nameOfCookie.length); | |
if ( document.cookie.substring( x, y ) == nameOfCookie ) { | |
if ( (endOfCookie=document.cookie.indexOf( ";", y )) == -1 ) | |
endOfCookie = document.cookie.length; | |
return unescape( document.cookie.substring( y, endOfCookie ) ); | |
} | |
x = document.cookie.indexOf( " ", x ) + 1; | |
if ( x == 0 ) | |
break; | |
} | |
return ""; | |
}; | |
const setCookieAt = ( name, expiredays) => { | |
let dawnTime = 4*60*60*1000; | |
let todayDate = new Date(); | |
todayDate = new Date(parseInt(todayDate.getTime() / 86400000) * 86400000 + 54000000 + dawnTime); | |
if ( todayDate > new Date() ) { | |
expiredays = expiredays - 1; | |
} | |
todayDate.setDate( todayDate.getDate() + expiredays ); | |
// console.log('cookie set, it will delete : ', todayDate); | |
document.cookie = name + "=" + name + "; path=/; expires=" + todayDate.toGMTString() + ";"; | |
console.log(todayDate.toGMTString(), todayDate); | |
}; | |
// setCookieAt('test01',1); | |
const deleteCookie = (name) => { | |
let date = new Date(); | |
let newDate = new Date(date.setDate(date.getDate() - 1)); | |
// console.log('지우는거 안에서', newDate, newDate.toGMTString()); | |
document.cookie = name + "=" + name + "; path=/; expires=" + newDate.toGMTString() + ";"; | |
console.log(getCookie(name)); | |
}; | |
// deleteCookie('tStreamer'); | |
// remove temp streamer list everyday | |
const tempStreamerListCleaner = () => { | |
// let blnCookie = getCookie('tStreamer'); | |
if( !getCookie('tStreamer') ) { | |
// console.log('쿠키없음 그래서 temp streamer list 초기화'); | |
localStorage.setItem("tStreamerList", JSON.stringify([])); | |
tStreamerList = JSON.parse(localStorage.getItem("tStreamerList")); | |
// console.log('deleted', tStreamerList); | |
} else { | |
console.log('아직 쿠키 아직 있음', getCookie('tStreamer')); | |
} | |
}; | |
tempStreamerListCleaner(); | |
// remove unnecessary div | |
(function (nodes){ | |
let nodez = document.querySelectorAll(nodes); | |
nodez.forEach(item => { | |
if(item.nextElementSibling.className === '' && item.nextElementSibling.style.length === 0){ | |
item.nextElementSibling.style.display = 'none'; | |
} | |
item.style.display = 'inline' | |
}); | |
})('.r'); | |
// remover by blacklist | |
const remover = function (wrapper, node) { | |
let target = document.querySelector(wrapper), | |
clips = target.querySelectorAll(node); | |
clips.forEach(clip => { | |
if (clip.querySelector(clipStreamer).textContent === '') { | |
let urlHref = clip.querySelector(clipStreamer).href; | |
let streamerIDnumber = urlHref.match(/([0-9]{9})/); | |
let tempName = Array.from(streamerIDnumber)[0]; | |
// for in object | |
for (var key in nStreamerList) { | |
if (nStreamerList.hasOwnProperty(key)) { | |
if (tempName == key){ | |
// console.log(numberStreamerList[key]); | |
tempName = nStreamerList[key]; | |
} | |
} | |
} | |
// console.log(tempName); | |
clip.querySelector(clipStreamer).textContent = tempName; | |
} | |
}); | |
clips.forEach(clip => { | |
// for keyword | |
blockList.forEach(block => { | |
if(clip.textContent.includes(block)) { | |
// console.log(clip.querySelector(clipTitle).textContent); | |
clip.style.display = 'none'; | |
//clip.remove(); | |
} | |
}) | |
}); | |
clips.forEach(clip => { | |
// for streamer name | |
streamLocalList.forEach(st => { | |
if (clip.querySelector(clipStreamer).textContent.includes(st)) { | |
//console.log(clip.querySelector(clipTitle).textContent); | |
clip.style.display = 'none'; | |
//clip.remove(); | |
} | |
}); | |
}); | |
clips.forEach(clip => { | |
if (tStreamerList) { | |
tStreamerList.forEach(st => { | |
if (clip.querySelector(clipStreamer).textContent.includes(st)) { | |
//console.log(clip.querySelector(clipTitle).textContent); | |
clip.style.display = 'none'; | |
//clip.remove(); | |
} | |
}); | |
} | |
}); | |
}; | |
remover(listWrapper, listItem); | |
// streamer name click 2 second, add block | |
(function (wrapper, node) { | |
let wrap = document.querySelector(wrapper), | |
clips = wrap.querySelectorAll(node); | |
let undofunc = (makeItTarget) => { | |
if (makeItTarget) { | |
let newMakeItTarget = "" + makeItTarget; | |
console.log(newMakeItTarget); | |
let streamLocalList = JSON.parse(localStorage.getItem("streamLocalList")); | |
streamLocalList.splice(streamLocalList.indexOf(newMakeItTarget),1); | |
localStorage.setItem("streamLocalList", JSON.stringify(streamLocalList)); | |
//console.log('undo'); | |
} else { | |
let streamLocalList = JSON.parse(localStorage.getItem("streamLocalList")); | |
streamLocalList.pop(); | |
localStorage.setItem("streamLocalList", JSON.stringify(streamLocalList)); | |
//console.log('undo'); | |
} | |
kickMessege(1); | |
location.reload(); | |
} | |
let putMessege = (makeItTarget) => { | |
//let streamLocalList = JSON.parse(localStorage.getItem("streamLocalList")), | |
// lastStreamLocalList = streamLocalList[streamLocalList.length - 1]; | |
let messegeWrapper = document.querySelector('.alertify-logs'); | |
if(messegeWrapper.childNodes[0]) { | |
messegeWrapper.childNodes[0].remove(); | |
} | |
let messegeMarkUp = `<div class="success">${makeItTarget} <a href="#">Undo</a></div>`; | |
messegeWrapper.insertAdjacentHTML('beforeend', messegeMarkUp); | |
let notiBar = messegeWrapper.querySelector('.success'), | |
aButton = notiBar.querySelector('a'); | |
window.setTimeout(()=>{ | |
notiBar.classList.add('show'); | |
}, 500); | |
//console.log(messegeWrapper.childNodes[0], messegeWrapper.children[0]); | |
aButton.addEventListener('click',() => {undofunc(makeItTarget)}); | |
} | |
let kickMessege = (timing) => { | |
let notiBar = document.querySelector('.alertify-logs .success'); | |
notiBar.className = "success"; | |
window.setTimeout(()=>{ | |
notiBar.remove(); | |
}, 2 * 1000); | |
} | |
clips.forEach(clip => { | |
let streamer = clip.querySelector('.streamer'), | |
streamerParent = streamer.parentNode, | |
streamerSibling = streamer.nextSibling; | |
let btn = document.createElement("button"); | |
btn.innerHTML = "❌"; | |
btn.classList.add('btn_ban'); | |
btn.addEventListener('click', () => { | |
let makeItTarget = streamer.textContent; | |
streamLocalList.push(makeItTarget); | |
localStorage.setItem("streamLocalList", JSON.stringify(streamLocalList)); | |
// console.log(JSON.parse(localStorage.getItem("streamLocalList"))); | |
// clip.style.display = 'none'; | |
remover(listWrapper, listItem); | |
putMessege(makeItTarget); | |
}); | |
let btn2 = document.createElement("button"); | |
btn2.innerHTML = "✖️"; | |
btn2.classList.add('btn_ban'); | |
btn2.addEventListener('click', () => { | |
let makeItTarget = streamer.textContent; | |
tStreamerList.push(makeItTarget); | |
// localStorage.setItem("streamLocalList", JSON.stringify(streamLocalList)); | |
localStorage.setItem("tStreamerList", JSON.stringify(tStreamerList)); | |
console.log(JSON.parse(localStorage.getItem("tStreamerList"))); | |
setCookieAt('tStreamer', 1); | |
console.log(getCookie('tStreamer')); | |
// clip.style.display = 'none'; | |
remover(listWrapper, listItem); | |
putMessege(makeItTarget); | |
}); | |
streamerParent.insertBefore(btn, streamerSibling); | |
streamerParent.insertBefore(btn2, streamerSibling); | |
//streamerParent.appentChild(btn); | |
}); | |
})(listWrapper, listItem); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
change process, click event => create btn