BiliPixelDrawer

BiliPixelDrawer Client(Script)

  1. // ==UserScript==
  2. // @name BiliPixelDrawer
  3. // @namespace
  4. // @version 1.4
  5. // @description BiliPixelDrawer Client(Script)
  6. // @author Bluefissure
  7. // @match live.bilibili.com/pages/1702/pixel-drawing
  8. // @grant GM_addStyle
  9. // @grant GM_xmlhttpRequest
  10. // ==/UserScript==
  11. var version = "v1.4";
  12. 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;';
  13. 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; ';
  14. 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; ';
  15. var STATUS_HOST="http://api.live.bilibili.com/activity/v1/SummerDraw/status";
  16. var DRAW_HOST="http://api.live.bilibili.com/activity/v1/SummerDraw/draw";
  17. var UPDATE_URL="https://greasyfork.org/zh-CN/scripts/32245-bilipixeldrawer";
  18. var timer;
  19. var res_time;
  20. var host;
  21. var token;
  22. var total;
  23. var solve;
  24. var info;
  25. var control;
  26. var projname;
  27. function finishpixel(x,y,color){
  28. GM_xmlhttpRequest({
  29. method: "GET",
  30. url: host.value+"/?token="+token.value+"&&finx="+x+"&&finy="+y,
  31. headers: {
  32. '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",
  33. 'referer': '',
  34. 'Cookie': document.cookie
  35. },
  36. onload: function(response) {
  37. var res=JSON.parse(response.responseText);
  38. if(res.msg=="success"){
  39. console.log("Callback success");
  40. }else{
  41. console.log(res);
  42. }
  43. }
  44. });
  45. }
  46. function drawpixel(x,y,color){
  47. $.ajax(DRAW_HOST,
  48. { type:"post", dataType:"json", xhrFields:{ withCredentials: true },
  49. data:{
  50. x_min:x,
  51. y_min:y,
  52. x_max:x,
  53. y_max:y,
  54. color:color
  55. },success:function(res){
  56. console.log(res);
  57. if(res.msg=="success"){
  58. console.log("Draw at ("+x+","+y+") color:"+color+" success");
  59. info.innerHTML="Draw at ("+x+","+y+") color:"+color+" success";
  60. finishpixel(x,y,color);
  61. }else{
  62. info.innerHTML="Error:"+res.msg;
  63. }
  64. }});
  65.  
  66. }
  67. function getpixel(x,y,color){
  68. GM_xmlhttpRequest({
  69. method: "GET",
  70. url: host.value+"/?token="+token.value,
  71. headers: {
  72. '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",
  73. 'referer': '',
  74. 'Cookie': document.cookie
  75. },
  76. onload: function(response) {
  77. var res;
  78. try{
  79. res=JSON.parse(response.responseText);
  80. }catch(e){
  81. if(e.name=="SyntaxError"){
  82. info.innerHTML="Error:Server response failed.";
  83. }else{
  84. info.innerHTML="Error:"+e.message;
  85. }
  86. return;
  87. }
  88. if(res.msg=="success"){
  89. x=res.x;
  90. y=res.y;
  91. color=res.color;
  92. var solve_cnt=res.total-res.unsolve;
  93. total.innerHTML="Total pixel(s):"+res.total;
  94. solve.innerHTML="Drawed pixel(s):"+solve_cnt;
  95. projname.innerHTML="Project "+res.projname;
  96. drawpixel(x,y,color);
  97. }else if(res.msg=="finish"){
  98. console.log("Project finish.");
  99. info.innerHTML="Project finish.";
  100. var solve_cnt=res.total-res.unsolve;
  101. total.innerHTML="Total pixel(s):"+res.total;
  102. solve.innerHTML="Drawed pixel(s):"+solve_cnt;
  103. projname.innerHTML="Project "+res.projname;
  104. console.log("Stop Auto Drawing");
  105. clearInterval(timer);
  106. control.innerHTML = "开始脚本";
  107. }else{
  108. info.innerHTML="Error:"+res.msg;
  109. console.log(res);
  110. }
  111. }
  112. });
  113.  
  114. }
  115. function draw() {
  116. var x=0,y=0,color=0;
  117. $.ajax(STATUS_HOST,
  118. { type:"get", xhrFields:{ withCredentials: true },
  119. success:function(res){
  120. //console.log(res);
  121. res_time = res.data.time;
  122. if(res.msg!="success"){
  123. console.log(res);
  124. info.innerHTML="Error:"+res.msg;
  125. }else{
  126. console.log("left time:"+res_time);
  127. info.innerHTML="Time left:"+res_time;
  128. }
  129. if(res_time==0){
  130. getpixel(x,y,color);
  131. }
  132. }});
  133. }
  134. (function() {
  135. 'use strict';
  136. // Your code here...
  137. if(window.location.href=="http://live.bilibili.com/pages/1702/pixel-drawing"||
  138. window.location.href=="https://live.bilibili.com/pages/1702/pixel-drawing"){
  139. if(window.location.href=="https://live.bilibili.com/pages/1702/pixel-drawing"){
  140. STATUS_HOST="https://api.live.bilibili.com/activity/v1/SummerDraw/status";
  141. DRAW_HOST="https://api.live.bilibili.com/activity/v1/SummerDraw/draw";
  142. }
  143. var newDiv = document.createElement("div");
  144. newDiv.id = "controlWindow";
  145. newDiv.align = "left";
  146. document.body.appendChild(newDiv);
  147. GM_addStyle("#controlWindow{" + style_win_top + " }");
  148. var table = document.createElement("table");
  149. newDiv.appendChild(table);
  150. var th = document.createElement("th");
  151. th.id = "headTd";
  152. var thDiv = document.createElement("span");
  153. thDiv.id = "thDiv";
  154. thDiv.innerHTML = "BiliPixelDrawer "+version;
  155. GM_addStyle("#thDiv{color:red;font-size: 12pt;}");
  156. th.appendChild(thDiv);
  157. table.appendChild(th);
  158. var tr = document.createElement("tr");
  159. table.appendChild(tr);
  160. var td = document.createElement("td");
  161. td.id = "footTd";
  162. tr.appendChild(td);
  163.  
  164. host = document.createElement("input");
  165. host.innerHTML = "Host";
  166. host.id = "host";
  167. host.placeholder = "Host";
  168. token = document.createElement("input");
  169. token.innerHTML = "Host";
  170. token.id = "token";
  171. token.placeholder = "Token";
  172. td.appendChild(host);
  173. td.appendChild(document.createElement("p"));
  174. td.appendChild(token);
  175. td.appendChild(document.createElement("p"));
  176. total=document.createElement("p");
  177. solve=document.createElement("p");
  178. projname=document.createElement("p");
  179. td.appendChild(projname);
  180. td.appendChild(total);
  181. td.appendChild(solve);
  182. info = document.createElement("span");
  183. info.id = "info";
  184. info.innerHTML = "info";
  185. GM_addStyle("#info{color:red;font-size: 8pt;}");
  186. td.appendChild(info);
  187. td.appendChild(document.createElement("p"));
  188.  
  189.  
  190. control = document.createElement("span");
  191. control.id = "control";
  192. control.innerHTML = "开始脚本";
  193. control.addEventListener("click", function () {
  194. //document.body.removeChild(document.getElementById("controlWindow"));
  195. if (control.innerHTML == "开始脚本"){
  196. console.log("Enable Auto Drawing");
  197. draw();
  198. timer = setInterval(draw, 10000);
  199. control.innerHTML = "停止脚本";
  200. }else{
  201. console.log("Stop Auto Drawing");
  202. clearInterval(timer);
  203. control.innerHTML = "开始脚本";
  204. }
  205.  
  206.  
  207. }, false);
  208. td.appendChild(control);
  209. GM_addStyle("#control{" + style_btn + "}");
  210. var upd = document.createElement("span");
  211. upd.id = "upd";
  212. upd.innerHTML = "<a href=\""+UPDATE_URL+"\" target=\"_blank\">Update</a>";
  213. GM_addStyle("#upd{color:red;font-size: 8pt;}");
  214. td.appendChild(upd);
  215. td.appendChild(document.createElement("p"));
  216.  
  217.  
  218.  
  219. }
  220. })();