Greasy Fork

b-live-random-send-test

定时从设置的字幕中随机取出一条在B站直播间发送,需先登录B站账号

当前为 2023-05-02 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/447936/1184635/b-live-random-send-test.js

// ==UserScript==
// @author          Gamyou
// @version         1.5.4
// @note            23-05-03 1.5.4 放开部分功能自由开关设置
// ==/UserScript==


!function(){const e=URL.createObjectURL(new Blob(["(",function(){const e={};self.onmessage=(t=>{switch(t.data.command){case"interval:start":const a=setInterval(()=>postMessage({message:"interval:tick",id:t.data.id}),t.data.interval);e[t.data.id]=a;break;case"interval:clear":clearInterval(e[t.data.id]),postMessage({message:"interval:cleared",id:t.data.id}),delete e[t.data.id];break;case"timeout:start":const l=setTimeout(()=>postMessage({message:"timeout:tick",id:t.data.id}),t.data.timeout);e[t.data.id]=l;break;case"timeout:clear":clearTimeout(e[t.data.id]),postMessage({message:"timeout:cleared",id:t.data.id}),delete e[t.data.id]}})}.toString(),")()"],{type:"application/javascript"})),t=new Worker(e);URL.revokeObjectURL(e);const a={id:0,callbacks:{},setInterval:(e,l,d)=>{const n=++a.id;return a.callbacks[n]={fn:e,context:d},t.postMessage({command:"interval:start",interval:l,id:n}),n},setTimeout:(e,l,d)=>{const n=++a.id;return a.callbacks[n]={fn:e,context:d},t.postMessage({command:"timeout:start",timeout:l,id:n}),n},onMessage:e=>{switch(e.data.message){case"interval:tick":case"timeout:tick":const t=a.callbacks[e.data.id];t&&t.fn&&t.fn.apply(t.context);break;case"interval:cleared":case"timeout:cleared":delete a.callbacks[e.data.id]}},clearInterval:e=>t.postMessage({command:"interval:clear",id:e}),clearTimeout:e=>t.postMessage({command:"timeout:clear",id:e})};t.onmessage=a.onMessage.bind(a);let l,d,n,i,c,s,o,r,u,p,h,m,b,g,v,k,x,C,E,f,w,y,L,A={version:3,random:!0,data1:{available:!0,values:["弹幕①","弹幕②"]},data2:{available:!0,values:["弹幕③","弹幕④"]},data3:{available:!0,values:["弹幕⑤","弹幕⑥"]},data4:{available:!0,values:["弹幕⑦","弹幕⑧"]},data5:{available:!0,values:["弹幕⑨","弹幕Ⅹ"]}},B={},I={},T=[],S=[],M=null,D=null,z=0,G=200,F=0,j=e=>{alert("请更新油猴脚本"),window.location.href=V},H=(e,t)=>null,R=(e,t)=>{console.warn('===> No implementation "setGmValue" method.')},N=e=>{console.warn('===> No implementation "delGmValue" method.')};const V="https://greasyfork.org/scripts/446725-b%E7%AB%99%E7%9B%B4%E6%92%AD%E9%97%B4%E5%AE%9A%E6%97%B6%E5%8F%91%E9%9A%8F%E6%9C%BA%E5%BC%B9%E5%B9%95/code/B%E7%AB%99%E7%9B%B4%E6%92%AD%E9%97%B4%E5%AE%9A%E6%97%B6%E5%8F%91%E9%9A%8F%E6%9C%BA%E5%BC%B9%E5%B9%95.user.js",K=window.location.pathname.replace(/^\/(\S+\/)*/g,""),U=()=>(new Date).getTime(),P=(e,t)=>{let a=document.getElementById("aside-area-vm").getElementsByClassName("chat-input border-box")[0];if(!a)return void alert("找不到输入弹幕文本框,请尝试刷新页面");let l=document.getElementsByClassName("bl-button live-skin-highlight-button-bg live-skin-button-text bl-button--primary bl-button--small")[0];l?(a.value=e,a.dispatchEvent(new Event("input",{bubbles:!0,cancelable:!0})),l.click(),lastSent=U(),++z,console.log("===> "+(new Date).toLocaleString()+" 弹幕发送成功 "+z+" 次,第【"+t+"】条数据 === "+e)):alert("找不到发送按钮,请尝试刷新页面")},O=e=>{if(!e||""==e)return!0;return new RegExp("^[ ]+$").test(e)},W=()=>{for(let e=0;e<T.length;e++)a.clearInterval(T[e]),T[e]=null;T=[]},$=()=>{if(l.checked){if(!D){let e=O(B.signText)?B.signText:"打卡",t=new Date(new Date((new Date).setDate((new Date).getDate()+1)).toDateString()).getTime()-U();console.log("===> 设置凌晨打卡定时器【"+t+"】"),E.value=O(I.signInText)?e:I.signInText,D=a.setTimeout(()=>{P(O(E.value)?e:E.value,0),console.log("===> 进入下一轮递归打卡"),a.clearTimeout(D),D=null,$()},t)}}else D&&(console.log("===> 关闭自动打卡功能"),a.clearTimeout(D),D=null)},q=()=>{s.checked=A.random,o.checked=A.data1.available,r.checked=A.data2.available,u.checked=A.data3.available,p.checked=A.data4.available,h.checked=A.data5.available,l.checked=I.autoSignIn,d.checked=I.hideLoginGuide,n.checked=I.hideHaruna,i.checked=I.hideShop,c.checked=I.noSleep,te(),ae(),le(),ne(),$()},J=()=>b.style.display="block",Q=()=>{q(),b.style.display="none"},X=()=>{if(A.data1.values.length<=0&&A.data2.values.length<=0&&A.data3.values.length<=0&&A.data4.values.length<=0&&A.data5.values.length<=0)return S||[];let e=[];e=A.data1.available?e.concat(A.data1.values):e,e=A.data2.available?e.concat(A.data2.values):e,e=A.data3.available?e.concat(A.data3.values):e,e=A.data4.available?e.concat(A.data4.values):e,e=A.data5.available?e.concat(A.data5.values):e,S=e,s.checked?S=(e=>{for(let t=0;t<e.length;t++){const a=Math.floor(Math.random()*e.length),l=e[t];e[t]=e[a],e[a]=l}return e})(e):F=0},Y=()=>{A.data1.values=O(g.value)?[]:g.value.split("|"),A.data2.values=O(v.value)?[]:v.value.split("|"),A.data3.values=O(k.value)?[]:k.value.split("|"),A.data4.values=O(x.value)?[]:x.value.split("|"),A.data5.values=O(C.value)?[]:C.value.split("|"),A.random=s.checked,A.data1.available=o.checked,A.data2.available=r.checked,A.data3.available=u.checked,A.data4.available=p.checked,A.data5.available=h.checked,X(),R(K,A),B.configKey&&(I.autoSignIn=l.checked,I.signInText=E.value,I.hideLoginGuide=d.checked,I.hideHaruna=n.checked,I.hideShop=i.checked,I.noSleep=c.checked,R(B.configKey,I)),w.style.display="block";let e=a.setTimeout(()=>{w.style.display="none",b.style.display="none",a.clearTimeout(e)},1500)},Z=()=>S.length<1?(j({text:"请任意在一个分组里输入一条弹幕",title:"没有弹幕数据,请先设置",image:"https://www.bilibili.com/favicon.ico",highlight:!0,timeout:1e4}),!1):(s.checked&&(F=Math.floor(Math.random()*S.length)),P(S[F],F),++F>=S.length&&(F=0),!0),_=()=>{let e=0;if(M)a.clearInterval(M),M=null,f.style.background="rgba(217,157,27,1)",f.textContent="开始",m.removeAttribute("disabled");else{if(e=1e3*(O(m.value)?600:m.value),!Z())return;M=a.setInterval(Z,e),f.style.background="#ff0000",f.textContent="停止",m.setAttribute("disabled","disabled")}},ee=(e,t)=>{t?e.style.removeProperty("display"):e.style.setProperty("display","none","important")},te=()=>{let e=document.getElementById("switch-login-guide-vm");e&&ee(e,!d.checked)},ae=()=>{let e=document.getElementById("my-dear-haruna-vm");e&&ee(e,!n.checked)},le=()=>{let e=document.getElementById("shop-popover-vm");e&&ee(e,!i.checked)},de=()=>{if(!document.getElementById("danmu-setting-panel")){console.log("===> 进行面板初始化");let e=document.getElementsByClassName("bottom-actions p-relative")[0];if(!e)return console.warn("===> bottom-actions节点丢失"),!1;(e=>{let t=document.createElement("div");t.textContent="弹幕设置",t.classList.add("danmu-random-setting-title");let a=document.createElement("div");a.classList.add("danmu-random-setting-tips"),a.innerHTML='任一分组内输入弹幕即可,多条用<span style="color:#dc6b07;margin:0 2px 0 4px;font-weight:700;font-style:normal;">竖线</span>分隔';let y=document.createElement("div");y.classList.add("danmu-random-update-tips"),y.innerHTML='<span style="color:#f00">更新提示:</span>放开部分功能自由开关设置';let L=document.createElement("div");L.textContent="分组 1 :",L.classList.add("danmu-group-title"),(o=document.createElement("input")).type="checkbox",o.id="group1Checkbox",o.checked=!0;let A=document.createElement("label");A.setAttribute("for","group1Checkbox"),A.classList.add("switch-check-label");let B=document.createElement("div");B.classList.add("switch-check"),B.appendChild(o),B.appendChild(A),(g=document.createElement("textarea")).classList.add("danmu-group-textarea"),g.setAttribute("placeholder","请输入弹幕,多条弹幕请用“|”分隔");let I=document.createElement("div");I.textContent="分组 2 :",I.classList.add("danmu-group-title"),(r=document.createElement("input")).type="checkbox",r.id="group2Checkbox",r.checked=!0;let T=document.createElement("label");T.setAttribute("for","group2Checkbox"),T.classList.add("switch-check-label");let S=document.createElement("div");S.classList.add("switch-check"),S.appendChild(r),S.appendChild(T),(v=document.createElement("textarea")).classList.add("danmu-group-textarea"),v.setAttribute("placeholder","请输入弹幕,多条弹幕请用“|”分隔");let M=document.createElement("div");M.textContent="分组 3 :",M.classList.add("danmu-group-title"),(u=document.createElement("input")).type="checkbox",u.id="group3Checkbox",u.checked=!0;let D=document.createElement("label");D.setAttribute("for","group3Checkbox"),D.classList.add("switch-check-label");let z=document.createElement("div");z.classList.add("switch-check"),z.appendChild(u),z.appendChild(D),(k=document.createElement("textarea")).classList.add("danmu-group-textarea"),k.setAttribute("placeholder","请输入弹幕,多条弹幕请用“|”分隔");let G=document.createElement("div");G.textContent="分组 4 :",G.classList.add("danmu-group-title"),(p=document.createElement("input")).type="checkbox",p.id="group4Checkbox",p.checked=!0;let F=document.createElement("label");F.setAttribute("for","group4Checkbox"),F.classList.add("switch-check-label");let j=document.createElement("div");j.classList.add("switch-check"),j.appendChild(p),j.appendChild(F),(x=document.createElement("textarea")).classList.add("danmu-group-textarea"),x.setAttribute("placeholder","请输入弹幕,多条弹幕请用“|”分隔");let H=document.createElement("div");H.textContent="分组 5 :",H.classList.add("danmu-group-title"),(h=document.createElement("input")).type="checkbox",h.id="group5Checkbox",h.checked=!0;let R=document.createElement("label");R.setAttribute("for","group5Checkbox"),R.classList.add("switch-check-label");let N=document.createElement("div");N.classList.add("switch-check"),N.appendChild(h),N.appendChild(R),(C=document.createElement("textarea")).classList.add("danmu-group-textarea"),C.setAttribute("placeholder","请输入弹幕,多条弹幕请用“|”分隔");let V=document.createElement("div");V.style.margin="20px 0 10px";let K=document.createElement("div");K.textContent="以下设置保存之后将适用所有直播间",K.title="其它直播间请刷新应用设置",K.classList.add("global-setting-tip"),K.classList.add("switch-check-group"),V.appendChild(K),(l=document.createElement("input")).type="checkbox",l.id="signInCheckbox",l.checked=!0,l.addEventListener("click",$);let U=document.createElement("label");U.setAttribute("for","signInCheckbox"),U.classList.add("switch-check-label");let P=document.createElement("span");P.textContent="打卡弹幕:",P.title="每日零点发送一条打卡弹幕",P.classList.add("danmu-random-switch-button-title"),(E=document.createElement("input")).style.border="0",E.style.width="145px",E.setAttribute("placeholder","输入零点打卡发送的文字");let O=document.createElement("div");O.classList.add("switch-check"),O.classList.add("switch-check-group"),O.appendChild(l),O.appendChild(U),O.appendChild(P),O.appendChild(E),V.appendChild(O),(d=document.createElement("input")).type="checkbox",d.id="hideLoginGuideCheckbox",d.checked=!1,d.addEventListener("click",te),(U=document.createElement("label")).setAttribute("for","hideLoginGuideCheckbox"),U.classList.add("switch-check-label"),(P=document.createElement("span")).textContent="隐藏播放器底部登录提示",P.title="隐藏未登录时播放器底部显示的登录提示",P.classList.add("danmu-random-switch-button-title"),(O=document.createElement("div")).classList.add("switch-check"),O.classList.add("switch-check-group"),O.appendChild(d),O.appendChild(U),O.appendChild(P),V.appendChild(O),(n=document.createElement("input")).type="checkbox",n.id="hideHarunaCheckbox",n.checked=!1,n.addEventListener("click",ae),(U=document.createElement("label")).setAttribute("for","hideHarunaCheckbox"),U.classList.add("switch-check-label"),(P=document.createElement("span")).textContent="隐藏看板娘立绘",P.title="隐藏直播间Haruna立绘",P.classList.add("danmu-random-switch-button-title"),(O=document.createElement("div")).classList.add("switch-check"),O.classList.add("switch-check-group"),O.appendChild(n),O.appendChild(U),O.appendChild(P),V.appendChild(O),(i=document.createElement("input")).type="checkbox",i.id="hideShopCheckbox",i.checked=!1,i.addEventListener("click",le),(U=document.createElement("label")).setAttribute("for","hideShopCheckbox"),U.classList.add("switch-check-label"),(P=document.createElement("span")).textContent="隐藏播放器左上角购物提示",P.title="隐藏播放器左上角的商店购物提示",P.classList.add("danmu-random-switch-button-title"),(O=document.createElement("div")).classList.add("switch-check"),O.classList.add("switch-check-group"),O.appendChild(i),O.appendChild(U),O.appendChild(P),V.appendChild(O),(c=document.createElement("input")).type="checkbox",c.id="noSleepCheckbox",c.checked=!1,c.addEventListener("click",ne),(U=document.createElement("label")).setAttribute("for","noSleepCheckbox"),U.classList.add("switch-check-label"),(P=document.createElement("span")).textContent="防止直播间休眠",P.title="防止直播间页面一段时间没操作之后进入休眠",P.classList.add("danmu-random-switch-button-title"),(O=document.createElement("div")).classList.add("switch-check"),O.classList.add("switch-check-group"),O.appendChild(c),O.appendChild(U),O.appendChild(P),V.appendChild(O),(w=document.createElement("span")).textContent="设置成功",w.classList.add("danmu-random-setting-success-text");let W=document.createElement("div");W.classList.add("danmu-random-setting-success-tips"),W.appendChild(w);let q=document.createElement("i");q.setAttribute("title","保存"),q.classList.add("el-button"),q.classList.add("el-icon-check"),q.classList.add("is-circle"),q.addEventListener("click",Y);let X=document.createElement("i");X.setAttribute("title","关闭"),X.classList.add("el-button"),X.classList.add("el-icon-close"),X.classList.add("is-circle"),X.addEventListener("click",Q);let Z=document.createElement("div");Z.classList.add("danmu-random-set-button-container"),Z.appendChild(q),Z.appendChild(X),(s=document.createElement("input")).type="checkbox",s.id="rdCheckbox",s.checked=!0,(U=document.createElement("label")).setAttribute("for","rdCheckbox"),U.classList.add("switch-check-label"),(P=document.createElement("span")).textContent="随机从上面的弹幕中选出一条发送",P.title="将合并所有分组数据,从中随机选出一条发送",P.classList.add("danmu-random-switch-button-title"),(O=document.createElement("div")).classList.add("switch-check"),O.appendChild(s),O.appendChild(U),O.appendChild(P);let ee=document.createElement("div");ee.classList.add("danmu-random-setting-bottom"),ee.appendChild(W),ee.appendChild(Z);let de=document.createElement("div");de.style.height="calc(98% - 30px - 25px)",de.appendChild(L),de.appendChild(B),de.appendChild(g),de.appendChild(I),de.appendChild(S),de.appendChild(v),de.appendChild(M),de.appendChild(z),de.appendChild(k),de.appendChild(G),de.appendChild(j),de.appendChild(x),de.appendChild(H),de.appendChild(N),de.appendChild(C),de.appendChild(O),de.appendChild(V),de.appendChild(ee),(b=document.createElement("div")).id="danmu-setting-panel",b.classList.add("danmu-random-setting-panel"),b.appendChild(t),b.appendChild(y),b.appendChild(a),b.appendChild(de),document.getElementById("aside-area-vm").appendChild(b),(f=document.createElement("button")).textContent="开始",f.style.minWidth="65px",f.style.height="24px",f.style.fontSize="12px",f.style.borderRadius="4px",f.style.color="#ffffff",f.style.background="rgba(217,157,27,1)",f.style.border="0",f.style.cursor="pointer",f.addEventListener("click",_);let ie=document.createElement("span");ie.textContent="每",ie.style.color="#ffffff",ie.style.fontSize="12px",ie.style.marginLeft="4px",ie.style.backgroundColor="#ec6c1b",(m=document.createElement("input")).value=600,m.style.width="25px",m.style.height="15px",m.style.margin="0 3px",m.style.border="0",m.style.borderRadius="3px",m.setAttribute("oninput","this.value = this.value.replace(/[^0-9]/g, '')");let ce=document.createElement("span");ce.textContent="秒发送",ce.style.color="#ffffff",ce.style.fontSize="12px",ce.style.backgroundColor="#ec6c1b",ce.style.marginRight="4px";let se=document.createElement("i");se.classList.add("el-icon-setting");let oe=document.createElement("button");oe.title="设置",oe.classList.add("el-button"),oe.classList.add("el-button--mini"),oe.classList.add("is-circle"),oe.addEventListener("click",J),oe.appendChild(se);let re=document.createElement("div");re.style.position="absolute",re.appendChild(f),re.appendChild(ie),re.appendChild(m),re.appendChild(ce),re.appendChild(oe),e.appendChild(re)})(e),(()=>{let e=H(K,null);e&&(A.version===e.version?A=e:2===e.version?(A.data1=e.data1,A.data2=e.data2,A.data3=e.data3,A.data4=e.data4,A.data5=e.data5,R(K,A)):(A.data1.values=e.data1?e.data1:A.data1.values,A.data2.values=e.data2?e.data2:A.data2.values,A.data3.values=e.data3?e.data3:A.data3.values,A.data4.values=e.data4?e.data4:A.data4.values,A.data5.values=e.data5?e.data5:A.data5.values,R(K,A))),B.configKey&&(I=H(B.configKey,{}),E.value=O(I.signInText)?"":I.signInText),q(),g.value=A.data1.values.join("|"),v.value=A.data2.values.join("|"),k.value=A.data3.values.join("|"),x.value=A.data4.values.join("|"),C.value=A.data5.values.join("|"),X()})(),console.log("===> 面板初始化完成")}return!0},ne=()=>{c.checked?y||(console.log("===> 开启防休眠功能"),y=a.setInterval(()=>{L=a.setTimeout(()=>{a.clearTimeout(L),document.body.dispatchEvent(new MouseEvent("mousemove",{bubbles:!0}))},3e3*Math.random())},17e3)):(console.log("===> 关闭防休眠功能"),y&&(a.clearInterval(y),y=null),L&&(a.clearTimeout(L),L=null))};(()=>{let e=document.createElement("link");e.rel="stylesheet",e.href="https://unpkg.com/[email protected]/lib/theme-chalk/index.css",document.head.appendChild(e);let t=document.createElement("style");t.setAttribute("type","text/css"),t.innerHTML='.danmu-group-title{font-size:14px;padding-left:2px;color:rgb(18, 56, 141);display:inline;margin-right:60%;vertical-align:middle;}.danmu-group-textarea{width:98%;min-height:100px;height:16%;margin:1px 0px 4px;border:0px;resize:none;}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--mini.is-circle{padding:3px;}.el-button:focus,.el-button:hover{color:#409EFF;border-color:#c6e2ff;background-color:#ecf5ff}.el-icon-close.is-circle{padding:5px;color:#ff0000;border:1px solid #ff0000;margin-left:20px;}.el-icon-check.is-circle{padding:5px;color:#0000ff;border:1px solid #0000ff;margin-left:20px;}input[type="checkbox"]{display:none;}.switch-check{display:inline-block;margin:0 5px;vertical-align:middle;}.switch-check-label{display:inline-block;vertical-align:middle;border:1px solid #bdc3c7;border-radius:60px;width:40px;height:18px;position:relative;transition:all .3s;cursor:pointer;}.switch-check-label:before{width:14px;height:14px;content:"";display:inline-block;background-color:#bdc3c7;border-radius:100%;position:absolute;top:2px;left:4px;transition:all .3s;}.switch-check :checked ~ label{background-color:#26b22b;border-color:#26b22b;}.switch-check :checked ~ label:before{left:22px;background-color:#fff;}.switch-check-group{margin-top:5px}.danmu-random-setting-panel{background-color:#d4f2e0;border-radius:2px;width:100%;height:100%;overflow-y:auto;position:absolute;left:0px;top:0px;z-index:999;display:none;}.danmu-random-setting-title{text-align:center;font-size:16px;font-weight:700;color:#1c5adc;line-height:30px;}.danmu-random-setting-tips{color:#0b81cc;text-align:center;font-style:italic;}.danmu-random-update-tips{color:#0b81cc;text-align:center;font-size:13px;font-weight:700;margin:10px 0px;}.danmu-random-setting-bottom{width:100%;line-height:35px;}.danmu-random-switch-button-title{font-size:14px;vertical-align:middle;margin-left:5px;color:#095ca2;cursor:help;}.danmu-random-setting-success-tips{text-align:center;display:inline-block;vertical-align:middle;width:60%;}.danmu-random-setting-success-text{font-size:16px;color:#128712;display:none;}.danmu-random-set-button-container{display:inline-block;vertical-align:middle;}.global-setting-tip{text-align:center;color:#0b81cc;font-size:12px;font-weight:700;cursor:help;}.disabled{color:#aaaaaa;cursor:not-allowed;}',document.head.appendChild(t)})(),window.debug=(()=>{}),window.runStart=(()=>{(()=>{if(!B.version)return!0;if("2.4.0"===B.version)return!1;{let e=B.version.split("."),t="2.4.0".split(".");if(e.length!=t.length)return!0;for(let a=0;a<e.length;a++)if(t[a]>e[a])return!0;return!1}})()?window.location.href=V:T[T.length]=a.setInterval(()=>{de()?(W(),console.log("===> 运行成功")):0>=--G&&(W(),console.log("===> 创建面板失败,停止初始化"))},1500)}),window.arrayInfo=(()=>console.info(S)),window.setGmNotice=(e=>j=e),window.setGmGetValue=(e=>H=e),window.setGmSetValue=(e=>R=e),window.setGmDelValue=(e=>e),window.setParentData=(e=>B=e),window.autoSendDanmuModuleLoaded=!0}();