// ==UserScript== // @name 斗鱼自动回复,可重复回复(刷屏) // @namespace http://tampermonkey.net/ // @version 1.3.4 // @description 斗鱼自动回复,自定义时间,次数,回复内容! // @author Pi7bo1 // @match https://www.douyu.com/* // @match https://www.douyu.com/*/* // @grant none // @supportURL woxianshouboxian@163.com // @downloadURL none // ==/UserScript== (function () { 'use strict'; // Your code here... // 定义初始变量 var dySendMsg = function (text, maxCount, stime) { this.dySendTextArr = ["黄初三年", "余朝京师", "还济洛川", "古人有言", "斯水之神", "名曰宓妃", "感宋玉对楚王神女之事", "遂作斯赋", "其辞曰:余从京域", "言归东藩", "背伊阙", "越轘辕", "经通谷", "陵景山", "日既西倾", "车殆马烦", "尔乃税驾乎蘅皋", "秣驷乎芝田", "容与乎阳林", "流眄乎洛川", "于是精移神骇", "忽焉思散", "俯则未察", "仰以殊观", "睹一丽人", "于岩之畔", "乃援御者而告之曰:“尔有觌于彼者乎?彼何人斯?若此之艳也!”御者对曰:“臣闻河洛之神", "名曰宓妃", "然则君王所见", "无乃是乎?其状若何?臣愿闻之", "余告之曰:“其形也", "翩若惊鸿", "婉若游龙", "荣曜秋菊", "华茂春松", "髣髴兮若轻云之蔽月", "飘飖兮若流风之回雪", "远而望之", "皎若太阳升朝霞;迫而察之", "灼若芙蕖出渌波", "秾纤得衷", "修短合度", "肩若削成", "腰如约素", "延颈秀项", "皓质呈露", "芳泽无加", "铅华弗御", "云髻峨峨", "修眉联娟", "丹唇外朗", "皓齿内鲜", "明眸善睐", "靥辅承权", "瑰姿艳逸", "仪静体闲", "柔情绰态", "媚于语言", "奇服旷世", "骨像应图", "披罗衣之璀粲兮", "珥瑶碧之华琚", "戴金翠之首饰", "缀明珠以耀躯", "践远游之文履", "曳雾绡之轻裾", "微幽兰之芳蔼兮", "步踟蹰于山隅", "于是忽焉纵体", "以遨以嬉", "左倚采旄", "右荫桂旗", "壤皓腕于神浒兮", "采湍濑之玄芝", "余情悦其淑美兮", "心振荡而不怡", "无良媒以接欢兮", "托微波而通辞", "愿诚素之先达兮", "解玉佩以要之", "嗟佳人之信修", "羌习礼而明诗", "抗琼珶以和予兮", "指潜渊而为期", "执眷眷之款实兮", "惧斯灵之我欺", "感交甫之弃言兮", "怅犹豫而狐疑", "收和颜而静志兮", "申礼防以自持", "于是洛灵感焉", "徙倚彷徨", "神光离合", "乍阴乍阳", "竦轻躯以鹤立", "若将飞而未翔", "践椒涂之郁烈", "步蘅薄而流芳", "超长吟以永慕兮", "声哀厉而弥长", "尔乃众灵杂沓", "命俦啸侣", "或戏清流", "或翔神渚", "或采明珠", "或拾翠羽", "从南湘之二妃", "携汉滨之游女", "叹匏瓜之无匹兮", "咏牵牛之独处", "扬轻袿之猗靡兮", "翳修袖以延伫", "体迅飞凫", "飘忽若神", "凌波微步", "罗袜生尘", "动无常则", "若危若安", "进止难期", "若往若还", "转眄流精", "光润玉颜", "含辞未吐", "气若幽兰", "华容婀娜", "令我忘餐", "于是屏翳收风", "川后静波", "冯夷鸣鼓", "女娲清歌", "腾文鱼以警乘", "鸣玉鸾以偕逝", "六龙俨其齐首", "载云车之容裔", "鲸鲵踊而夹毂", "水禽翔而为卫", "于是越北沚", "过南冈", "纡素领", "回清阳", "动朱唇以徐言", "陈交接之大纲", "恨人神之道殊兮", "怨盛年之莫当", "抗罗袂以掩涕兮", "泪流襟之浪浪", "悼良会之永绝兮", "哀一逝而异乡", "无微情以效爱兮", "献江南之明珰", "虽潜处于太阴", "长寄心于君王", "忽不悟其所舍", "怅神宵而蔽光", "于是背下陵高", "足往神留", "遗情想像", "顾望怀愁", "冀灵体之复形", "御轻舟而上溯", "浮长川而忘返", "思绵绵而增慕", "夜耿耿而不寐", "沾繁霜而至曙", "命仆夫而就驾", "吾将归乎东路", "揽騑辔以抗策", "怅盘桓而不能去"] // 默认为空时候喊话内容 this.lastMsg = ""; // 上次喊话内容 this.count = 0; // 当前喊话次数 this.stext = localStorage.getItem('dyFunctionSend_textArr'); this.stime = localStorage.getItem('dyFunctionSend_time') || 30; // 间隔时间 单位/秒 this.auto = ""; //自动变量,用来定义/清除定时器 this.maxCount = localStorage.getItem('dyFunctionSend_count') || 10; //最大喊话次数 this.status = "stop"; //当前状态 }; //初始化发送模板 dySendMsg.prototype.init = function () { var othis = this; var jsSendMsg = document.getElementById('js-chat-speak'); //添加自定义定义样式 var _styleElement = document.createElement('style'); var _css = ".dyFunctionSend{background: #fff;width:100%;box-sizing: border-box;position:absolute;padding:5px 6px;z-index: 999;border: 1px solid #d2d2d2;bottom: 90px;left: 0;}"; _css += ".dyFunctionSend .form-control{box-sizing: border-box;background-color: #FFFFFF;resize:vertical;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;display: block;padding: 6px 12px;transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s;width: 100%;}"; _css += ".dyFunctionSend .form_item{margin:5px 0;font-size:14px}"; _css += ".dyFunctionSend .form-control:focus{border-color: #1ab394;}"; _css += ".dyFunctionSend_hide {display: none;}"; _css += ".dySend_btn {margin:5px;display: inline-block;height: 33px;line-height: 33px;padding: 0 18px;background-color: #009688;color: #fff;white-space: nowrap;text-align: center;font-size: 14px;border: none;border-radius: 2px;cursor: pointer;}"; _css += ".dySend_btn:hover {opacity: 0.8}"; _css += ".dySend_btn:active {opacity: 1}"; _css += ".dyFunctionSend .w50 {width:50%;display: inline-block;display: inline-block;box-sizing: border-box;}"; _css += ".dySend_start_btn,.dySend_stop_btn{background-color: #1E9FFF;display:none}"; _css += ".dySend_start_btn.show_d,.dySend_stop_btn.show_d{display:inline-block}"; _css += ".ChatSendMsgBtn {display: inline-block;vertical-align: middle;width: 22px;height: 22px;margin-right: 8px;cursor: pointer;}"; _css += ".ChatSendMsgBtn .laba{background:url('https://ww1.sinaimg.cn/large/007F2ph0ly1g1156xjx7pj301300imwx.jpg') no-repeat;background-position: 2px 2px;}"; _css += ".ChatSendMsgBtn.active .laba{background-position-x: -18px;}"; _css += ".dySend_count {position:absolute;bottom: 8px;left: 15px;}"; _styleElement.innerHTML = _css; document.getElementsByTagName('head')[0].appendChild(_styleElement); var fill_text = this.switchJsonToHtml(JSON.parse(localStorage.getItem('dyFunctionSend_textArr'))); //添加点击的弹框模板 var dyFunctionSend = document.createElement('div'); var _html = ''; _html += '
'; _html += '
'; _html += '
'; _html += '
'; _html += '
'; _html += '
'; _html += '
设置需要保存才能生效
'; _html += '
保存开始停止
'; _html += '
'; _html += '

已发送:0

剩余次数:0

'; dyFunctionSend.classList.add('dyFunctionSend', 'dyFunctionSend_hide'); dyFunctionSend.innerHTML = _html; dyFunctionSend.id = "dyFunctionSend"; var chatMsgBox = document.querySelectorAll('.layout-Player-aside')[0] || document.querySelectorAll('#js-live-room-normal-right .chat')[0]; chatMsgBox.appendChild(dyFunctionSend); // 斗鱼按钮栏插入按钮 var timer = setInterval(function () { try { var sub_ele_text = document.querySelectorAll('.ShieldTool-content .ShieldTool-checkText')[0] || document.getElementById('js-chat-speak').querySelectorAll('.speak-up #shie-switch span')[0]; sub_ele_text.innerText = "屏蔽特效"; var sendMsgBtn = document.createElement('div'); sendMsgBtn.onclick = othis.changeDySendPanel; sendMsgBtn.classList.add('ChatSendMsgBtn'); if (document.getElementById('js-chat-speak')) { sendMsgBtn.style.marginLeft = "5px"; sendMsgBtn.innerHTML = `
` } else { sendMsgBtn.innerHTML = `
` } var btnBox = document.querySelectorAll('.ChatToolBar')[0] || document.getElementById('js-chat-speak').querySelectorAll('.speak-up')[0]; btnBox.appendChild(sendMsgBtn); clearInterval(timer); } catch (err) { } }, 50) } //localStorage 存储的文本转换填充 dySendMsg.prototype.switchJsonToHtml = function (arr) { if (arr == null) { return ''; } if (arr.length > 0) { return arr.join('\n') } else { return ""; } } //输入框非数字过滤 dySendMsg.prototype.InputTextFilter = function (d) { this.value = this.value.replace(/[^0-9]/g, ''); } //开关面板 dySendMsg.prototype.changeDySendPanel = function () { document.getElementById('dyFunctionSend').classList.toggle('dyFunctionSend_hide'); document.querySelectorAll('.ChatSendMsgBtn')[0].classList.toggle('active'); } // 保存当前设置 dySendMsg.prototype.save = function () { if (this.status == "start") { document.getElementById('dyFunctionSend_error').innerText = "需要先停止喊话才能进行修改"; return; } var _stext = this.clearArrayTrim(document.getElementById('dyFunctionSend_text').value.split('\n')); this.stext = _stext; this.maxCount = document.getElementById('dyFunctionSend_count').value || 10; this.stime = document.getElementById('dyFunctionSend_time').value || 30; document.getElementById('dySend_Num').innerText = "已发送:" + this.count; document.getElementById('dySend_remainder').innerText = "剩余次数:" + this.maxCount; document.getElementById('dyFunctionSend_error').innerText = "保存成功"; // 保存当前设置 localStorage.setItem('dyFunctionSend_textArr', JSON.stringify(_stext)); localStorage.setItem('dyFunctionSend_count', this.maxCount); localStorage.setItem('dyFunctionSend_time', this.stime); setTimeout(function () { document.getElementById('dyFunctionSend_error').innerText = "设置需要保存才能生效"; }, 2000) } // 开始 dySendMsg.prototype.start = function () { this.autoSend(); this.status = "start"; document.querySelectorAll('.dySend_start_btn')[0].classList.toggle('show_d'); document.querySelectorAll('.dySend_stop_btn')[0].classList.toggle('show_d'); } // 停止 清除定时器 dySendMsg.prototype.stop = function () { this.count = 0; this.status = "stop"; clearTimeout(this.auto); document.querySelectorAll('.dySend_start_btn')[0].classList.toggle('show_d'); document.querySelectorAll('.dySend_stop_btn')[0].classList.toggle('show_d'); } // 等待发言cd dySendMsg.prototype.wait = function (timer) { var othis = this; return new Promise(function (resolve) { setTimeout(function () { resolve("true"); }, (Number(othis.stime) + Math.random()) * 1000); }); } // 等待发言cd dySendMsg.prototype.clearArrayTrim = function (array) { for (var i = 0; i < array.length; i++) { if (array[i] == "" || typeof (array[i]) == "undefined") { array.splice(i, 1); i = i - 1; } } return array } // 自动发送 dySendMsg.prototype.autoSend = function () { // this.changeDySendPanel(); var jsSend = document.querySelectorAll('.ChatSend')[0] || document.getElementById('js-send-msg'); var currentMsg = ""; // 文本数组循环 var arr = JSON.parse(localStorage.getItem('dyFunctionSend_textArr') || "[]"); arr = arr.length < 1 ? this.dySendTextArr : arr; currentMsg = arr[(this.count % arr.length)]; // 如果相同 if (this.lastMsg === currentMsg) { currentMsg = "‍" + currentMsg; } //输入框赋值 jsSend.querySelectorAll('textarea')[0].value = currentMsg; var e = document.createEvent("MouseEvents"); e.initEvent("click", true, true); var sendBtn = jsSend.querySelectorAll('.ChatSend-button')[0] || jsSend.querySelectorAll('.b-btn')[0]; var _enentBtnText = sendBtn.innerText; if (_enentBtnText != "发送") { document.getElementById('dyFunctionSend_error').innerText = "等待发言CD" + _enentBtnText + "秒"; (async function () { var state = this.wait(_enentBtnText); }.bind(this)()) } else { document.getElementById('dyFunctionSend_error').innerText = "弹幕发送中..."; sendBtn.dispatchEvent(e); // 变量信息修改 this.count += 1; this.lastMsg = currentMsg; document.getElementById('dySend_Num').innerText = "已发送:" + this.count; document.getElementById('dySend_remainder').innerText = "剩余次数:" + (this.maxCount - this.count); console.log('当前共发送' + this.count + "条弹幕"); if (this.count >= this.maxCount) { document.getElementById('dyFunctionSend_error').innerText = "弹幕发送完成"; this.stop(); return; } } this.auto = setTimeout(this.autoSend.bind(this), (Number(this.stime) + Math.random()) * 1000); } window.$dy = new dySendMsg(); $dy.init(); })();