自动发斗鱼弹幕
// ==UserScript== // @name 斗鱼自动弹幕 // @namespace http://tampermonkey.net/ // @version 0.2.1 // @description 自动发斗鱼弹幕 // @author Lang // @match https://www.douyu.com/* // @match http://www.douyu.com/* // @exclude https://www.douyu.com/directory/myFollow // @require https://code.jquery.com/jquery-2.1.4.min.js // @grant none // ==/UserScript== jQuery.noConflict(); jQuery(document).ready(function($){ /*jshint multistr: true */ $("body").append("\ <div id='robot' style='position: absolute; top: 580px; left: 240px; z-index: 900; display: block; background: #65c294; padding:5px;'> \ <div id='robot-show' style='display: inline-block;padding:5px; border: 1px solid gray;background: #65c294;'>弹</div>\ <div id='robot-content' style='display:none'>\ 弹幕间隔:<input id='robot-interval' placeholder='秒数' value='45' style='display:inline-block;width: 30px'/>秒<br />\ 弹幕内容(多条用|或换行分隔):<br/>\ <textarea id='robot-danmu' rows='5' cols='30'>666666666666666666666666</textarea><br />\ <div id='robot-save' style='display: none; margin-top: 5px;padding:5px; border: 1px solid gray; float:left'>Save</div>\ <div id='robot-play' style='display: inline-block; margin-top: 5px;padding:5px; border: 1px solid gray; float:right'>启动</div>\ <div id='robot-drag' style='position: absolute; top: 0px; right:5px; display: inline-block; margin-top: 5px;padding:5px; border: 1px solid gray; float:right'>拖我</div>\ </div>\ </div>"); // 实现可拖动 var ismousedown = false; var dialogleft,dialogtop; var downX,downY; dialog = $("#robot"); dialogleft = parseInt(dialog.css("left")); dialogtop = parseInt(dialog.css("top")); $("#robot-drag").mousedown(function(e){ ismousedown = true; downX = e.clientX; downY = e.clientY; }); document.onmousemove = function(e){ if(ismousedown){ dialog.css("top", e.clientY - downY + dialogtop + "px"); dialog.css("left", e.clientX - downX + dialogleft + "px"); } }; /*松开鼠标时要重新计算当前窗口的位置*/ document.onmouseup = function(){ dialogleft = parseInt(dialog.css("left")); dialogtop = parseInt(dialog.css("top")); ismousedown = false; }; defaultMsg = ["666666666666666666666666666"]; function Robot() {} Robot.prototype = { constructor: Robot, msg: defaultMsg, lastText: '', flag: 0, interval: 5000, send: function(text) { //$("#js-send-msg > textarea.cs-textarea").val(text); //$("#js-send-msg > .b-btn").click(); $('#js-player-asideMain div.ChatSend > textarea.ChatSend-txt').val(text); $('#js-player-asideMain div.ChatSend > .ChatSend-button').click(); console.debug(text); }, getText: function() { if(this.msg.length === 1) { text = this.msg[0]; sliceIndex = Math.floor(Math.random() * text.length); return text.substr(0, sliceIndex) + " " + text.substr(sliceIndex, text.length); } return this.msg[Math.floor(Math.random() * this.msg.length)]; }, start: function() { this.stop(); this.run(); }, run: function() { var that = this; text = this.getText(); while(text == this.lastText) { text = this.getText(); } // 不能发送,冷却中 /*if($("#js-send-msg > .b-btn").hasClass('b-btn-gray')) { nextTime = parseInt($("#js-send-msg > .b-btn").text()); if(!isNaN(nextTime)) { this.flag = setTimeout(function(){that.run();}, nextTime * 1000 + 200); return; } }*/ if($('#js-player-asideMain div.ChatSend > .ChatSend-button').hasClass('is-gray')) { nextTime = parseInt($('#js-player-asideMain div.ChatSend > .ChatSend-button').text()); if(!isNaN(nextTime)) { randomMs = 100 + Math.floor(Math.random() * 100) * 10 this.flag = setTimeout(function(){sendDanmu(text, interval);}, nextTime * 1000 + randomMs); return; } } this.send(text); this.lastText = text; this.flag = setTimeout(function(){that.run();}, this.interval); }, stop: function() { clearTimeout(this.flag); //this.saveConfig(); }, setMessage: function(arr) { if(!(arr instanceof Array)) { console.error("setMessage: arr should be an array!"); return; } this.msg = arr; console.log("setMessage " + arr); if(this.msg.length === 0) { this.msg = defaultMsg; } }, setInterval: function(seconds) { sec = parseInt(seconds); console.log('set interval to ' + seconds); if((!isNaN(sec)) && sec > 0) { this.interval = sec * 1000; } else { console.warn("set interval " + seconds + " failed."); } }, saveConfig: function(){ var config={}; config.left = $("#robot").css("left"); config.top = $("#robot").css("top"); config.interval = this.interval; config.msg = this.msg; window.localStorage.root_config = config; } }; robot = new Robot(); window.robot = robot; $("#robot-play").click(function(){ if($("#robot-play").text() != "停止") { $("#robot-play").text("停止"); robot.setInterval($('#robot-interval').val()); robot.setMessage($('#robot-danmu').val().split(/[\n|]/).filter(function(s){return s && s.trim();})); window.localStorage.root_msg = $('#robot-danmu').val(); robot.start(); } else { robot.stop(); $("#robot-play").text("启动"); } }); $("#robot-save").click(function(){ robot.saveConfig(); $("#robot-save").text("saved."); }); $("#robot-show").click(function(){ $("#robot-content").toggle(); if($("#robot-content").is(':visible')) { $("#robot-show").text("隐藏"); } else { $("#robot-show").text("显示"); } }); //console.log('#' + typeof(window.localStorage)); config=window.localStorage.root_config; if(typeof(config) !="undefined") { console.log(typeof(config)); dialog.css("top", config.top); dialog.css("left", config.left); robot.interval = config.interval; robot.msg = config.msg; console.log('msg'+config); } if(typeof(window.localStorage.root_msg) != "undefined"){ $('#robot-danmu').val(window.localStorage.root_msg); } /* setInterval(function(){ $peck = $(".peck"); if($peck.prop("style").display==="block"&&$peck.hasClass("peck-open")) { $peck.mouseover(); $(".peck-cdn").click(); } }, 500);*/ //$('body aside').hide(); console.log("斗鱼自动弹幕已准备完毕."); });