// ==UserScript==
// @author Gamyou
// @version 1.4.5
// @note 23-02-10 1.4.5 去除播放器左上角的“小橙车”提示
// @note 22-08-28 1.4.4 解決定時器在浏览器繁忙时时间出现偏差的问题
// @note 22-08-26 1.4.3 修复正则替换方法not found的问题
// @note 22-08-14 1.4.2 修复B站直播间因活动而嵌套网页而导致房间号解析出错的BUG
// @note 22-08-14 1.4.1 修复B站直播间因活动而嵌套网页而导致脚本加载出错的BUG
// @note 22-08-13 1.4.0 实现阿B各直播间数据分离保存和油猴脚本更新提示功能
// @note 22-08-05 1.3.0 增加播放器底部登录(不可用)提示和Haruna的隐藏功能
// @note 22-07-29 1.2.6 修复初始化后的常量被赋值和没能初始化成功组件时系统提示加载超时的问题
// @note 22-07-24 1.2.5 增加分组启用按钮,并优化设置面板样式
// @note 22-07-23 1.2.4 修复弹幕分组数据都为空时,旧数据重复合并的BUG
// @note 22-07-16 1.2.3 修复设置弹幕时旧(初始)数据没有清空的BUG
// @note 22-06-24 1.2.2 优化部分代码
// @note 22-06-20 1.2.1 修复定时停止不能再开始的BUG
// @note 22-06-19 1.2.0 添加弹幕设置功能
// ==/UserScript==
!function(){window.autoSendDanmuModuleLoaded=!1;const e=URL.createObjectURL(new Blob(["(",function(){const e={},t={};self.onmessage=(a=>{switch(a.data.command){case"interval:start":const l=setInterval(()=>postMessage({message:"interval:tick",id:a.data.id}),a.data.interval);e[a.data.id]=l;break;case"interval:clear":clearInterval(e[a.data.id]),postMessage({message:"interval:cleared",id:a.data.id}),delete e[a.data.id];break;case"timeout:start":const d=setTimeout(()=>postMessage({message:"timeout:tick",id:a.data.id}),a.data.timeout);t[a.data.id]=d;break;case"timeout:clear":clearTimeout(t[a.data.id]),postMessage({message:"timeout:cleared",id:a.data.id}),delete t[a.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,o,c,s,r,p,u,m,h,b,g,v,x={version:3,random:!0,data1:{available:!0,values:["弹幕①","弹幕②"]},data2:{available:!0,values:["弹幕③","弹幕④"]},data3:{available:!0,values:["弹幕⑤","弹幕⑥"]},data4:{available:!0,values:["弹幕⑦","弹幕⑧"]},data5:{available:!0,values:["弹幕⑨","弹幕Ⅹ"]}},k=[],f=[],y=null,w=0,C=10,E=0,L=0,M=e=>{alert("请更新油猴脚本"),window.location.href=z},I=(e,t)=>null,A=(e,t)=>{console.warn('No implementation "setGmValue" method.')},_=e=>{console.warn('No implementation "delGmValue" method.')};const z="https://gf.qytechs.cn/zh-CN/scripts/446725",D=window.__NEPTUNE_IS_MY_WAIFU__?window.__NEPTUNE_IS_MY_WAIFU__.roomInfoRes.data.room_info.room_id:window.location.pathname.replace(/^\/(\S+\/)*/g,""),T=e=>window.autoSendDanmuModuleLoaded=e,S=()=>(new Date).getTime(),N=(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(),E=S(),++w,console.log("=================> "+(new Date).toLocaleString()+" 弹幕发送成功 "+w+" 次,第【"+t+"】条数据 === "+e)):alert("找不到发送按钮,请尝试刷新页面")},B=e=>{if(!e||""==e)return!0;return new RegExp("^[ ]+$").test(e)},R=()=>{for(let e=0;e<k.length;e++)clearInterval(k[e]),k[e]=null;k=[]},j=()=>{let e=new Date(new Date((new Date).setDate((new Date).getDate()+1)).toDateString()).getTime()-S();console.log("=================> 设置凌晨签到定时器【"+e+"】"),a.setTimeout(()=>{"停止"===s.textContent&&N("签到",0),console.log("=================> 进入下一轮递归签到"),j()},e)},F=()=>{l.checked=x.random,d.checked=x.data1.available,n.checked=x.data2.available,i.checked=x.data3.available,o.checked=x.data4.available,c.checked=x.data5.available},U=()=>p.style.display="block",G=()=>{F(),p.style.display="none"},P=()=>{if(x.data1.values.length<=0&&x.data2.values.length<=0&&x.data3.values.length<=0&&x.data4.values.length<=0&&x.data5.values.length<=0)return f||[];let e=[];e=x.data1.available?e.concat(x.data1.values):e,e=x.data2.available?e.concat(x.data2.values):e,e=x.data3.available?e.concat(x.data3.values):e,e=x.data4.available?e.concat(x.data4.values):e,e=x.data5.available?e.concat(x.data5.values):e,f=e,x.random?f=(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):L=0},V=()=>{x.data1.values=B(u.value)?[]:u.value.split("|"),x.data2.values=B(m.value)?[]:m.value.split("|"),x.data3.values=B(h.value)?[]:h.value.split("|"),x.data4.values=B(b.value)?[]:b.value.split("|"),x.data5.values=B(g.value)?[]:g.value.split("|"),x.random=l.checked,x.data1.available=d.checked,x.data2.available=n.checked,x.data3.available=i.checked,x.data4.available=o.checked,x.data5.available=c.checked,P(),A(D,x),v.style.display="block",setTimeout(()=>{v.style.display="none",p.style.display="none"},1500)},W=()=>f.length<1?(M({text:"请任意在一个分组里输入一条弹幕",title:"没有弹幕数据,请先设置",image:"https://www.bilibili.com/favicon.ico",highlight:!0,timeout:1e4}),!1):(x.random&&(L=Math.floor(Math.random()*f.length)),N(f[L],L),++L>=f.length&&(L=0),!0),H=()=>{let e=0;if(y)a.clearInterval(y),y=null,s.style.background="rgba(217,157,27,1)",s.textContent="开始",r.removeAttribute("disabled");else{if(e=B(r.value)?6e5:1e3*r.value,!W())return;y=a.setInterval(W,e),s.style.background="#ff0000",s.textContent="停止",r.setAttribute("disabled","disabled")}};window.setGmNotice=(e=>M=e),window.setGmGetValue=(e=>I=e),window.setGmSetValue=(e=>A=e),window.setGmDelValue=(e=>e),window.runStart=(()=>(()=>{let e=I(D,null);e&&(x.version===e.version?x=e:2===e.version?(x.data1=e.data1,x.data2=e.data2,x.data3=e.data3,x.data4=e.data4,x.data5=e.data5,A(D,x)):(x.data1.values=e.data1?e.data1:x.data1.values,x.data2.values=e.data2?e.data2:x.data2.values,x.data3.values=e.data3?e.data3:x.data3.values,x.data4.values=e.data4?e.data4:x.data4.values,x.data5.values=e.data5?e.data5:x.data5.values,A(D,x))),F(),u.value=x.data1.values.join("|"),m.value=x.data2.values.join("|"),h.value=x.data3.values.join("|"),b.value=x.data4.values.join("|"),g.value=x.data5.values.join("|"),P()})()),window.arrayInfo=(()=>console.info(f)),(()=>{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;}.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:16px;vertical-align:middle;margin-right:4px;color:#095ca2;cursor:help;}.danmu-random-setting-success-tips{text-align:center;display:inline-block;vertical-align:middle;width:34%;}.danmu-random-setting-success-text{font-size:16px;color:#128712;display:none;}.danmu-random-set-button-container{display:inline-block;vertical-align:middle;}',document.head.appendChild(t)})(),window.addEventListener("load",()=>{if(!document.getElementById("version-2.3.1"))return T(!0),void setTimeout(()=>{alert("发随机弹幕脚本有新版本,请及时更新"),window.location.href=z},1e3);k[k.length]=setInterval(()=>{let e=document.getElementsByClassName("bottom-actions p-relative")[0];e?(R(),(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 x=document.createElement("div");x.classList.add("danmu-random-update-tips"),x.innerHTML='<span style="color:#f00">更新提示:</span>各直播间保存的数据不再相互影响';let k=document.createElement("div");k.textContent="分组 1 :",k.classList.add("danmu-group-title"),(d=document.createElement("input")).type="checkbox",d.id="group1Checkbox",d.checked=!0;let f=document.createElement("label");f.setAttribute("for","group1Checkbox"),f.classList.add("switch-check-label");let y=document.createElement("div");y.classList.add("switch-check"),y.appendChild(d),y.appendChild(f),(u=document.createElement("textarea")).classList.add("danmu-group-textarea"),u.setAttribute("placeholder","请输入弹幕,多条弹幕请用“|”分隔");let w=document.createElement("div");w.textContent="分组 2 :",w.classList.add("danmu-group-title"),(n=document.createElement("input")).type="checkbox",n.id="group2Checkbox",n.checked=!0;let C=document.createElement("label");C.setAttribute("for","group2Checkbox"),C.classList.add("switch-check-label");let E=document.createElement("div");E.classList.add("switch-check"),E.appendChild(n),E.appendChild(C),(m=document.createElement("textarea")).classList.add("danmu-group-textarea"),m.setAttribute("placeholder","请输入弹幕,多条弹幕请用“|”分隔");let L=document.createElement("div");L.textContent="分组 3 :",L.classList.add("danmu-group-title"),(i=document.createElement("input")).type="checkbox",i.id="group3Checkbox",i.checked=!0;let M=document.createElement("label");M.setAttribute("for","group3Checkbox"),M.classList.add("switch-check-label");let I=document.createElement("div");I.classList.add("switch-check"),I.appendChild(i),I.appendChild(M),(h=document.createElement("textarea")).classList.add("danmu-group-textarea"),h.setAttribute("placeholder","请输入弹幕,多条弹幕请用“|”分隔");let A=document.createElement("div");A.textContent="分组 4 :",A.classList.add("danmu-group-title"),(o=document.createElement("input")).type="checkbox",o.id="group4Checkbox",o.checked=!0;let _=document.createElement("label");_.setAttribute("for","group4Checkbox"),_.classList.add("switch-check-label");let z=document.createElement("div");z.classList.add("switch-check"),z.appendChild(o),z.appendChild(_),(b=document.createElement("textarea")).classList.add("danmu-group-textarea"),b.setAttribute("placeholder","请输入弹幕,多条弹幕请用“|”分隔");let D=document.createElement("div");D.textContent="分组 5 :",D.classList.add("danmu-group-title"),(c=document.createElement("input")).type="checkbox",c.id="group5Checkbox",c.checked=!0;let T=document.createElement("label");T.setAttribute("for","group5Checkbox"),T.classList.add("switch-check-label");let S=document.createElement("div");S.classList.add("switch-check"),S.appendChild(c),S.appendChild(T),(g=document.createElement("textarea")).classList.add("danmu-group-textarea"),g.setAttribute("placeholder","请输入弹幕,多条弹幕请用“|”分隔");let N=document.createElement("span");N.textContent="随机",N.title="将合并所有分组数据,从中随机选出一条发送",N.classList.add("danmu-random-switch-button-title"),(l=document.createElement("input")).type="checkbox",l.id="rdmCheckbox",l.checked=!0;let B=document.createElement("label");B.setAttribute("for","rdmCheckbox"),B.classList.add("switch-check-label");let R=document.createElement("div");R.classList.add("switch-check"),R.style.marginLeft="10px",R.appendChild(N),R.appendChild(l),R.appendChild(B),(v=document.createElement("span")).textContent="设置成功",v.classList.add("danmu-random-setting-success-text");let j=document.createElement("div");j.classList.add("danmu-random-setting-success-tips"),j.appendChild(v);let F=document.createElement("i");F.setAttribute("title","应用"),F.classList.add("el-button"),F.classList.add("el-icon-check"),F.classList.add("is-circle"),F.addEventListener("click",V);let P=document.createElement("i");P.setAttribute("title","关闭"),P.classList.add("el-button"),P.classList.add("el-icon-close"),P.classList.add("is-circle"),P.addEventListener("click",G);let W=document.createElement("div");W.classList.add("danmu-random-set-button-container"),W.appendChild(F),W.appendChild(P);let O=document.createElement("div");O.classList.add("danmu-random-setting-bottom"),O.appendChild(R),O.appendChild(j),O.appendChild(W);let Y=document.createElement("div");Y.style.height="calc(98% - 30px - 25px)",Y.appendChild(k),Y.appendChild(y),Y.appendChild(u),Y.appendChild(w),Y.appendChild(E),Y.appendChild(m),Y.appendChild(L),Y.appendChild(I),Y.appendChild(h),Y.appendChild(A),Y.appendChild(z),Y.appendChild(b),Y.appendChild(D),Y.appendChild(S),Y.appendChild(g),Y.appendChild(O),(p=document.createElement("div")).classList.add("danmu-random-setting-panel"),p.appendChild(t),p.appendChild(a),p.appendChild(x),p.appendChild(Y),document.getElementById("aside-area-vm").appendChild(p),(s=document.createElement("button")).textContent="开始",s.style.minWidth="65px",s.style.height="24px",s.style.fontSize="12px",s.style.borderRadius="4px",s.style.color="#ffffff",s.style.background="rgba(217,157,27,1)",s.style.border="0",s.style.cursor="pointer",s.addEventListener("click",H);let $=document.createElement("span");$.textContent="每",$.style.color="#ffffff",$.style.fontSize="12px",$.style.marginLeft="4px",$.style.backgroundColor="#ec6c1b",(r=document.createElement("input")).value=600,r.style.width="25px",r.style.height="15px",r.style.margin="0 3px",r.style.border="0",r.style.borderRadius="3px",r.setAttribute("oninput","this.value = this.value.replace(/[^0-9]/g, '')");let q=document.createElement("span");q.textContent="秒发送",q.style.color="#ffffff",q.style.fontSize="12px",q.style.backgroundColor="#ec6c1b",q.style.marginRight="4px";let J=document.createElement("i");J.classList.add("el-icon-setting");let K=document.createElement("button");K.title="设置",K.classList.add("el-button"),K.classList.add("el-button--mini"),K.classList.add("is-circle"),K.addEventListener("click",U),K.appendChild(J);let Q=document.createElement("div");Q.style.position="absolute",Q.appendChild(s),Q.appendChild($),Q.appendChild(r),Q.appendChild(q),Q.appendChild(K),e.appendChild(Q)})(e),T(!0)):0>=--C&&(T(!0),R(),console.warn("没能找到发送按钮的所属元素"))},1500),(()=>{let e=document.getElementById("switch-login-guide-vm");e&&e.style.setProperty("display","none","important");let t=document.getElementById("my-dear-haruna-vm");t&&t.style.setProperty("display","none","important");let a=document.getElementById("shop-popover-vm");a&&a.style.setProperty("display","none","important")})(),j()})}();