Advertisement
Guest User

Pinkie Pie Bot

a guest
Oct 12th, 2017
542
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* MADE BY FLUTTERSHY.PL */
  2. //feel free to improve this code. Remember to share your results!
  3. /* PNGJS is a lazy, temporary solution. The intended way is transforming original BMP structure of bigchunk.bmp .*/
  4. //required modules, get pngjs and discord.js using npm
  5. const Discord = require('discord.js');
  6. const HTTP = require('http');
  7. const PNG = require('pngjs').PNG;
  8.  
  9. //RGB values of colours used by pixelcanvas
  10. const red = [255,228,136,34,255,229,229,160,229,148,2,0,0,0,207,130];
  11. const green = [255,228,136,34,167,0,149,106,217,224,190,211,131,0,110,0];
  12. const blue = [255,228,136,34,209,0,0,66,0,68,1,221,199,234,228,128];
  13.  
  14. //user configuration, maximum dimentions that won't get scaled down by Discord are 400 width 300 height, maximum for the bot is 897 width 897 height
  15. const token = ''; //token from discord developer API
  16. const w = 400;
  17. const h = 120;
  18.  
  19.  
  20. //actual bot code
  21. const client = new Discord.Client();
  22. client.on('ready', () => {
  23.     console.log("Successfully connected to Discord!");
  24. });
  25.  
  26. function sendSnapshot(x,y,channel){
  27.     console.log("Somepony requested @"+x+","+y)
  28.     var topLeftX = parseInt(x-(w/2));
  29.     var offsetLeft = ((topLeftX+448)%64)+((topLeftX<448)*64)
  30.     var bigChunkX = parseInt((topLeftX+448)/64)+(topLeftX>=448);
  31.     var topLeftY = parseInt(y-(h/2));
  32.     var offsetTop = ((topLeftY+448)%64)+((topLeftY<448)*64)
  33.     var bigChunkY = parseInt((topLeftY+448)/64)+(topLeftY>=448);
  34.     HTTP.get('http://pixelcanvas.io/api/bigchunk/'+bigChunkX+'.'+bigChunkY+'.bmp',function(response){
  35.         var data = [];
  36.         response.on('data',function(chunk){
  37.             data.push(chunk);
  38.         });
  39.         response.on('end',function(){
  40.             var buffer = Buffer.concat(data);
  41.             var pngimg = new PNG({
  42.                 width: w,
  43.                 height: h,
  44.                 filterType: -1
  45.             });
  46.             for (var y = 0; y < pngimg.height; y++)
  47.                 for (var x = 0; x < pngimg.width; x++) {
  48.                     var i = (pngimg.width * y + x) << 2;
  49.                     var byteOffset = ((parseInt((offsetTop+y)/64)*15+parseInt((offsetLeft+x)/64))*4096+64*((offsetTop+y)%64)+((offsetLeft+x)%64))/2;
  50.                     var colourId = byteOffset%1!=0?buffer[parseInt(byteOffset)]&15:buffer[parseInt(byteOffset)]>>4;
  51.                     pngimg.data[i] = red[colourId];
  52.                     pngimg.data[i+1] = green[colourId];
  53.                     pngimg.data[i+2] = blue[colourId];
  54.                     pngimg.data[i+3] = 0xff;
  55.                 }
  56.             var att = new Discord.Attachment(pngimg.pack(),"snapshot.png");
  57.             channel.send("",att);
  58.         });
  59.     });
  60. }
  61.  
  62. client.on('message', message => {
  63.     var index = message.content.indexOf("pixelcanvas.io/@");
  64.     while(index>-1){
  65.         var failed = false;
  66.         index += 0x10;
  67.         var paramX="";
  68.         var paramY="";
  69.         if(message.content[index]=="-")
  70.             paramX+=message.content[index++];
  71.         if(isNaN(message.content[index]))
  72.             failed = true;
  73.         else {
  74.             while(!isNaN(message.content[index]))
  75.                 paramX += message.content[index++];
  76.             paramX = (paramX);
  77.             if(message.content[index++]!=",")
  78.                 failed = true;
  79.             else {
  80.                 if(message.content[index]=="-")
  81.                     paramY += message.content[index++];
  82.                 if(isNaN(message.content[index]))
  83.                     failed = true;
  84.                 else {
  85.                     while(!isNaN(message.content[index]))
  86.                         paramY += message.content[index++];
  87.                 }
  88.             }
  89.         }
  90.         if(!failed)
  91.             sendSnapshot(parseInt(paramX),parseInt(paramY),message.channel);
  92.         message.content = message.content.substring(index);
  93.         index = message.content.indexOf("pixelcanvas.io/@");
  94.     }
  95. });
  96.  
  97. client.login(token);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement