// ==UserScript==
// @name BiliPixelDrawer
// @namespace
// @version 1.4
// @description BiliPixelDrawer Client(Script)
// @author Bluefissure
// @match live.bilibili.com/pages/1702/pixel-drawing
// @grant GM_addStyle
// @grant GM_xmlhttpRequest
// ==/UserScript==
var version = "v1.4";
var style_btn = 'float:right;background:rgba(228,228,228,0.4); cursor:pointer; margin:0px 1px 0px 0px; padding:0px 3px;color:black; border:2px ridge black;border:2px groove black;';
var style_win_top = 'z-index:998; padding:6px 10px 8px 15px;background-color:lightGrey;position:fixed;left:5px;top:100px;border:1px solid grey; ';
var style_win_buttom = 'z-index:998; padding:6px 10px 8px 15px;background-color:lightGrey;position:fixed;right:5px;bottom:5px;border:1px solid grey; ';
var STATUS_HOST="http://api.live.bilibili.com/activity/v1/SummerDraw/status";
var DRAW_HOST="http://api.live.bilibili.com/activity/v1/SummerDraw/draw";
var UPDATE_URL="https://greasyfork.org/zh-CN/scripts/32245-bilipixeldrawer";
var timer;
var res_time;
var host;
var token;
var total;
var solve;
var info;
var control;
var projname;
function finishpixel(x,y,color){
GM_xmlhttpRequest({
method: "GET",
url: host.value+"/?token="+token.value+"&&finx="+x+"&&finy="+y,
headers: {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36",
'referer': '',
'Cookie': document.cookie
},
onload: function(response) {
var res=JSON.parse(response.responseText);
if(res.msg=="success"){
console.log("Callback success");
}else{
console.log(res);
}
}
});
}
function drawpixel(x,y,color){
$.ajax(DRAW_HOST,
{ type:"post", dataType:"json", xhrFields:{ withCredentials: true },
data:{
x_min:x,
y_min:y,
x_max:x,
y_max:y,
color:color
},success:function(res){
console.log(res);
if(res.msg=="success"){
console.log("Draw at ("+x+","+y+") color:"+color+" success");
info.innerHTML="Draw at ("+x+","+y+") color:"+color+" success";
finishpixel(x,y,color);
}else{
info.innerHTML="Error:"+res.msg;
}
}});
}
function getpixel(x,y,color){
GM_xmlhttpRequest({
method: "GET",
url: host.value+"/?token="+token.value,
headers: {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36",
'referer': '',
'Cookie': document.cookie
},
onload: function(response) {
var res;
try{
res=JSON.parse(response.responseText);
}catch(e){
if(e.name=="SyntaxError"){
info.innerHTML="Error:Server response failed.";
}else{
info.innerHTML="Error:"+e.message;
}
return;
}
if(res.msg=="success"){
x=res.x;
y=res.y;
color=res.color;
var solve_cnt=res.total-res.unsolve;
total.innerHTML="Total pixel(s):"+res.total;
solve.innerHTML="Drawed pixel(s):"+solve_cnt;
projname.innerHTML="Project "+res.projname;
drawpixel(x,y,color);
}else if(res.msg=="finish"){
console.log("Project finish.");
info.innerHTML="Project finish.";
var solve_cnt=res.total-res.unsolve;
total.innerHTML="Total pixel(s):"+res.total;
solve.innerHTML="Drawed pixel(s):"+solve_cnt;
projname.innerHTML="Project "+res.projname;
console.log("Stop Auto Drawing");
clearInterval(timer);
control.innerHTML = "开始脚本";
}else{
info.innerHTML="Error:"+res.msg;
console.log(res);
}
}
});
}
function draw() {
var x=0,y=0,color=0;
$.ajax(STATUS_HOST,
{ type:"get", xhrFields:{ withCredentials: true },
success:function(res){
//console.log(res);
res_time = res.data.time;
if(res.msg!="success"){
console.log(res);
info.innerHTML="Error:"+res.msg;
}else{
console.log("left time:"+res_time);
info.innerHTML="Time left:"+res_time;
}
if(res_time==0){
getpixel(x,y,color);
}
}});
}
(function() {
'use strict';
// Your code here...
if(window.location.href=="http://live.bilibili.com/pages/1702/pixel-drawing"||
window.location.href=="https://live.bilibili.com/pages/1702/pixel-drawing"){
if(window.location.href=="https://live.bilibili.com/pages/1702/pixel-drawing"){
STATUS_HOST="https://api.live.bilibili.com/activity/v1/SummerDraw/status";
DRAW_HOST="https://api.live.bilibili.com/activity/v1/SummerDraw/draw";
}
var newDiv = document.createElement("div");
newDiv.id = "controlWindow";
newDiv.align = "left";
document.body.appendChild(newDiv);
GM_addStyle("#controlWindow{" + style_win_top + " }");
var table = document.createElement("table");
newDiv.appendChild(table);
var th = document.createElement("th");
th.id = "headTd";
var thDiv = document.createElement("span");
thDiv.id = "thDiv";
thDiv.innerHTML = "BiliPixelDrawer "+version;
GM_addStyle("#thDiv{color:red;font-size: 12pt;}");
th.appendChild(thDiv);
table.appendChild(th);
var tr = document.createElement("tr");
table.appendChild(tr);
var td = document.createElement("td");
td.id = "footTd";
tr.appendChild(td);
host = document.createElement("input");
host.innerHTML = "Host";
host.id = "host";
host.placeholder = "Host";
token = document.createElement("input");
token.innerHTML = "Host";
token.id = "token";
token.placeholder = "Token";
td.appendChild(host);
td.appendChild(document.createElement("p"));
td.appendChild(token);
td.appendChild(document.createElement("p"));
total=document.createElement("p");
solve=document.createElement("p");
projname=document.createElement("p");
td.appendChild(projname);
td.appendChild(total);
td.appendChild(solve);
info = document.createElement("span");
info.id = "info";
info.innerHTML = "info";
GM_addStyle("#info{color:red;font-size: 8pt;}");
td.appendChild(info);
td.appendChild(document.createElement("p"));
control = document.createElement("span");
control.id = "control";
control.innerHTML = "开始脚本";
control.addEventListener("click", function () {
//document.body.removeChild(document.getElementById("controlWindow"));
if (control.innerHTML == "开始脚本"){
console.log("Enable Auto Drawing");
draw();
timer = setInterval(draw, 10000);
control.innerHTML = "停止脚本";
}else{
console.log("Stop Auto Drawing");
clearInterval(timer);
control.innerHTML = "开始脚本";
}
}, false);
td.appendChild(control);
GM_addStyle("#control{" + style_btn + "}");
var upd = document.createElement("span");
upd.id = "upd";
upd.innerHTML = "<a href=\""+UPDATE_URL+"\" target=\"_blank\">Update</a>";
GM_addStyle("#upd{color:red;font-size: 8pt;}");
td.appendChild(upd);
td.appendChild(document.createElement("p"));
}
})();