您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
핫식스
// ==UserScript== // @name 유튜브 추첨기 // @namespace 핫식스 존나 맛있다 // @version 0.4 // @description 핫식스 // @author 핫식스 // @match https://www.youtube.com/live_chat* // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com // @grant none // @license MIT // ==/UserScript== (function () { console.log("로딩중..."); //로딩 var userList = []; //옵저버 var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { var added = mutation.addedNodes[0]; if (added?.tagName == 'YT-LIVE-CHAT-TEXT-MESSAGE-RENDERER') { var userData = {}; userData.img = added.querySelector("yt-img-shadow img").src; userData.name = added.querySelector("yt-live-chat-author-chip").innerText; if ( userList.filter((e) => e.img == userData.img && e.name == userData.name) .length == 0 ) { userList.push(userData); modal.querySelector('#rouletteParticipant ul').innerHTML += `<li style="display:flex;flex-direction:row;align-items:center" id="unSelected"><img src="${userData.img}">${userData.name}</li>`; } } }); }); var config = { childList: true, }; //모달창 var modal = document.createElement('div'); document.querySelector('body').style = '100vh'; modal.style.cssText = 'width:100%;height:100%;background-color:white;top:0px;left:0px;position:absolute;display:none;font-size:15px;overflow-y:auto'; modal.innerHTML = ` <style> #rouletteControl button{ color:black; border:1px solid red; } </style> <div id="rouletteControl" style="text-align:center"> <button id="gatherBtn">시작</button> <button id="raffleBtn">추첨</button> <button id="closeModal">닫기</button> </div> <div id="rouletteResult" style="display:flex;flex-direction:column;align-items:center"> <h2>당첨자</h2> <span style="height:35px"></span> </div> <div id="rouletteParticipant" style="display:flex;flex-direction:column;align-items:center"> <h2>참가자</h2> <ul style="list-style-type: none;padding-left:0;"> </ul> </div>`; var gatherBtn = modal.querySelector('#gatherBtn'); var raffleBtn = modal.querySelector('#raffleBtn'); var closeBtn = modal.querySelector('#closeModal'); gatherBtn.addEventListener("click", function () { if (this.innerText == "시작") { userList = []; modal.querySelector('#rouletteParticipant ul').innerHTML = ''; modal.querySelector('#rouletteResult span').innerHTML = ''; var target = document.querySelectorAll("#items")[1]; observer.observe(target, config); this.innerText = "중지"; raffleBtn.disabled = true; } else { observer.disconnect(); this.innerText = "시작"; raffleBtn.disabled = false; } }); raffleBtn.addEventListener("click", function () { if (userList.length !== 0) { var rand = Math.floor(Math.random() * userList.length); var pre = -1; modal.querySelector('#rouletteResult span').style.color = 'black'; raffleBtn.disabled = true; if(userList.length == 1){ modal.querySelector('#rouletteResult span').style.color = 'red'; modal.querySelector('#rouletteResult span').innerHTML = `<div style="display:flex;flex-direction:row;align-items:center"><img src="${userList[rand].img}">${userList[rand].name}</div>`; modal.querySelectorAll('li#unSelected')[rand].style.opacity = '30%'; modal.querySelectorAll('li#unSelected')[rand].setAttribute('id', 'selected'); userList.splice(rand, 1); raffleBtn.disabled = false; } else{ for (i = 0; i < 20; i++) { (function (x) { setTimeout(function () { var random = Math.floor(Math.random() * userList.length); while (random == pre) { random = Math.floor(Math.random() * userList.length); } pre=random; modal.querySelector('#rouletteResult span').innerHTML = `<div style="display:flex;flex-direction:row;align-items:center"><img src="${userList[random].img}">${userList[random].name}</div>`; }, 100 * x); })(i); } setTimeout(function () { modal.querySelector('#rouletteResult span').style.color = 'red'; modal.querySelector('#rouletteResult span').innerHTML = `<div style="display:flex;flex-direction:row;align-items:center"><img src="${userList[rand].img}">${userList[rand].name}</div>`; modal.querySelectorAll('li#unSelected')[rand].style.opacity = '30%'; modal.querySelectorAll('li#unSelected')[rand].setAttribute('id', 'selected'); userList.splice(rand, 1); raffleBtn.disabled = false; }, 2000) } } }); closeBtn.addEventListener("click", function () { modal.style.display = 'none'; }) document.querySelector('body').appendChild(modal); //모달창 열기 var toggle = document.createElement('button'); toggle.innerText = '추첨 열기'; toggle.addEventListener('click', function () { modal.style.display = 'block' }); document.querySelector("#primary-content").appendChild(toggle); /* document.querySelector("yt-live-chat-header-renderer").style.height = "200px"; document.querySelector("#primary-content").appendChild(roulette); */ console.log("로딩 완료"); })();