skins.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. var http = require('http');
  2. var https = require('https');
  3. var fs = require('fs');
  4. var lwip = require('lwip');
  5. /*
  6. * Skin retrieval methods are based on @jomo's CLI Crafatar implementation.
  7. * https://github.com/jomo/Crafatar
  8. */
  9. module.exports = {
  10. get_profile: function(uuid, callback) {
  11. https.get("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid, function(res) {
  12. if (res.statusCode == "204") {
  13. callback(null);
  14. return null;
  15. }
  16. res.on('data', function(d) {
  17. var profile = JSON.parse(d);
  18. if (profile.error) callback(null);
  19. callback(profile);
  20. });
  21. }).on('error', function(e) {
  22. console.error(e);
  23. });
  24. },
  25. skin_url: function(profile) {
  26. var url = null;
  27. if (profile && profile.properties) {
  28. profile.properties.forEach(function(prop) {
  29. if (prop.name == 'textures') {
  30. var json = Buffer(prop.value, 'base64').toString();
  31. var props = JSON.parse(json);
  32. url = props.textures.SKIN.url;
  33. }
  34. });
  35. }
  36. return url;
  37. },
  38. skin_file: function(url, filename, callback) {
  39. var file = fs.createWriteStream(filename);
  40. http.get(url, function(res) {
  41. res.on('data', function(data) {
  42. file.write(data);
  43. }).on('end', function() {
  44. file.end();
  45. callback();
  46. });
  47. });
  48. },
  49. extract_face: function(infile, size, callback) {
  50. lwip.open(infile, function(err, image){
  51. image.batch()
  52. .crop(8,8,15,15)
  53. .resize(size, size, "nearest-neighbor")
  54. .toBuffer('png', function(err, buffer){
  55. callback(buffer);
  56. });
  57. });
  58. }
  59. };