Advertisement
n3k4a

Untitled

Jul 9th, 2019
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.07 KB | None | 0 0
  1. const Jimp = require('jimp');
  2. const diff = require('color-diff');
  3. const twemoji = require('twemoji');
  4.  
  5. emojiRgb = [
  6. {R: 255, G: 255, B: 255, E: ":white_large_square:"}, // white
  7. {R: 0, G: 0, B: 0, E: ":black_large_square:"}, // black
  8. {R: 255, G: 0, B: 0, E: ":red_circle:"}, // red
  9. {R: 0, G: 255, B: 0, E: ":green_heart:"}, // green
  10. {R: 0, G: 0, B: 255, E: ":blue_heart:"}, // blue
  11. {R: 253, G: 203, B: 88, E: ":yellow_heart:"}, // yellow
  12. {R: 154, G: 78, B: 28, E: ":briefcase:"}, // brown
  13. {R: 102, G: 117, B: 127, E: ":new_moon:"}, // gray
  14. {R: 146, G: 102, B: 204, E: ":star_of_david:"}, // purple
  15. {R: 89, G: 142, B: 60, E: ":green_apple:"}, // pepe green
  16. {R: 92, G: 172, B: 235, E: ":large_blue_circle:"} // joy emoji tears blue
  17. //{R: 255, G: 255, B: 255, E: ""},
  18. //{R: 255, G: 255, B: 255, E: ""},
  19. //{R: 255, G: 255, B: 255, E: ""},
  20. ];
  21.  
  22. exports.execute = (client, message, args) => {
  23. if(args.length < 2){
  24. message.channel.send(":warning: Need one argument. A custom emoji or image url.");
  25. return;
  26. }
  27.  
  28. // try arg as emoji
  29. var emojiName = args[1].split(":")[1]; // only get ID part from emoji
  30. var emoji = client.emojis.find(e => e.name == emojiName);
  31.  
  32. var url = "";
  33.  
  34. if(!emoji){
  35. // check if image is url
  36. if(args[1].endsWith(".png") || args[1].endsWith(".jpg")){
  37. url = args[1];
  38. }else{
  39. // try use twemoji if it's a default emoji
  40. var text = twemoji.parse(args[1]);
  41. if(!text.startsWith("<img")){
  42. message.channel.send("Error. Only works with custom emojis from this guild / default emojis / png or jpg urls.");
  43. return;
  44. }
  45. var pos = text.indexOf("src");
  46. text = text.substring(pos + 5);
  47. text = text.substring(0, text.length - 3);
  48. url = text;
  49. }
  50. }
  51.  
  52. // print image if it was an emoji
  53. if(url == ""){
  54. url = emoji.url;
  55. message.channel.send(url);
  56. }else{
  57. message.channel.send("==========");
  58. }
  59.  
  60. var palette = [];
  61. for(var i = 0; i < emojiRgb.length; i++){
  62. var obj = {
  63. R: emojiRgb[i].R,
  64. G: emojiRgb[i].G,
  65. B: emojiRgb[i].B,
  66. }
  67. palette.push(obj);
  68. }
  69. var transColors = [];
  70.  
  71. var imgName = "images/emoji.png";
  72.  
  73. Jimp.read(url, (err, img) => {
  74. if(err){
  75. message.channel.send("Error. Could not read image.");
  76. return;
  77. }
  78. img
  79. .resize(30, 30)
  80. .write(imgName, () => {
  81. // todo maybe dont re-read image
  82. Jimp.read(imgName, (err, img) => {
  83. if(err) throw err;
  84. for(var i = 0; i < 30; i++){
  85. for(var j = 0; j < 30; j++){
  86. var hex = img.getPixelColor(j, i);
  87. var rgb = Jimp.intToRGBA(hex);
  88. var color = {
  89. R: rgb.r,
  90. G: rgb.g,
  91. B: rgb.b
  92. };
  93. transColors.push(diff.closest(color, palette));
  94. }
  95. }
  96.  
  97. // get emoji name for every RGB value
  98. var results = [];
  99. for(var i = 0; i < transColors.length; i++){
  100. var e2 = Object.values(transColors[i]);
  101.  
  102. for(var j = 0; j < emojiRgb.length; j++){
  103. var e1 = Object.values(emojiRgb[j]).slice(0, -1);
  104. var e3 = false;
  105. if(e1[0] == e2[0] && e1[1] == e2[1] && e1[2] == e2[2]) e3 = true;
  106.  
  107. if(e3){
  108. results.push(emojiRgb[j].E);
  109. break;
  110. }
  111. }
  112. }
  113.  
  114. // print emojis some lines at a time
  115. for(var mul = 0; mul < 10; mul++){
  116. var string1 = "";
  117. var string2 = "";
  118. var string3 = "";
  119. var base = 90 * mul;
  120.  
  121. for(var i = 0; i < 30; i++){
  122. string1 += results[i + base];
  123. string2 += results[i + 30 + base];
  124. string3 += results[i + 60 + base];
  125. }
  126.  
  127. message.channel.send(string1 + "\n" + string2 + "\n" + string3);
  128. }
  129.  
  130. });
  131. });
  132. });
  133. };
  134.  
  135. exports.info = {
  136. name: "emoji",
  137. alias: ["e"],
  138. permission: "default",
  139. type: "fun",
  140. guildOnly: true, // maybe not? todo check later
  141. help: "Print a big pixeled emoji made of small emojis :3"
  142. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement