From e08c10507d1ded1cf6e563e6a9fbde76d1d70022 Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Thu, 19 Nov 2015 16:52:01 +0000 Subject: [PATCH] Added setAvatar --- lib/Client/Client.js | 17 +++++++++++++++++ lib/Client/InternalClient.js | 8 +++++++- lib/Client/Resolver/Resolver.js | 9 +++++++++ src/Client/Client.js | 16 ++++++++++++++++ src/Client/InternalClient.js | 7 ++++++- src/Client/Resolver/Resolver.js | 31 ++++++++++++++++++++----------- test/bot.1.js | 3 +++ 7 files changed, 78 insertions(+), 13 deletions(-) diff --git a/lib/Client/Client.js b/lib/Client/Client.js index df6562097..dca38e6f2 100644 --- a/lib/Client/Client.js +++ b/lib/Client/Client.js @@ -713,6 +713,23 @@ var Client = (function (_EventEmitter) { }); }; + //def setAvatar + + Client.prototype.setAvatar = function setAvatar(avatar) { + var callback = arguments.length <= 1 || arguments[1] === undefined ? function (err) {} : arguments[1]; + + var self = this; + return new Promise(function (resolve, reject) { + self.internal.setAvatar(avatar).then(function () { + callback(); + resolve(); + })["catch"](function (err) { + callback(err); + reject(err); + }); + }); + }; + //def joinVoiceChannel Client.prototype.joinVoiceChannel = function joinVoiceChannel(channel) { diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index e077c50b2..71b0ab86a 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -988,7 +988,7 @@ var InternalClient = (function () { var self = this; return new Promise(function (resolve, reject) { request.patch(Endpoints.ME).set("authorization", self.token).send({ - avatar: data.avatar || self.user.avatar, + avatar: self.resolver.resolveToBase64(data.avatar) || self.user.avatar, email: data.email || self.email, new_password: data.new_password || null, password: data.password || self.password, @@ -1003,6 +1003,12 @@ var InternalClient = (function () { }); }; + //def setAvatar + + InternalClient.prototype.setAvatar = function setAvatar(avatar) { + return this.updateDetails({ avatar: avatar }); + }; + //def setUsername InternalClient.prototype.setUsername = function setUsername(username) { diff --git a/lib/Client/Resolver/Resolver.js b/lib/Client/Resolver/Resolver.js index 5a09b910f..f2d951682 100644 --- a/lib/Client/Resolver/Resolver.js +++ b/lib/Client/Resolver/Resolver.js @@ -1,4 +1,5 @@ "use strict"; +/* global Buffer */ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } @@ -21,6 +22,14 @@ var Resolver = (function () { this.internal = internal; } + Resolver.prototype.resolveToBase64 = function resolveToBase64(resource) { + if (resource instanceof Buffer) { + resource = resource.toString("base64"); + resource = "data:image/jpg;base64," + resource; + } + return resource; + }; + Resolver.prototype.resolveInviteID = function resolveInviteID(resource) { if (resource instanceof Invite) { return resource.id; diff --git a/src/Client/Client.js b/src/Client/Client.js index 588fef8c2..3c2564707 100644 --- a/src/Client/Client.js +++ b/src/Client/Client.js @@ -710,6 +710,22 @@ class Client extends EventEmitter { }); } + //def setAvatar + setAvatar(avatar, callback = function (err) { }) { + var self = this; + return new Promise((resolve, reject) => { + self.internal.setAvatar(avatar) + .then(() => { + callback(); + resolve(); + }) + .catch(err => { + callback(err); + reject(err); + }); + }); + } + //def joinVoiceChannel joinVoiceChannel(channel, callback = function (err) { }) { var self = this; diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index 28ef08de7..4d3937b67 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -1056,7 +1056,7 @@ class InternalClient { .patch(Endpoints.ME) .set("authorization", self.token) .send({ - avatar: data.avatar || self.user.avatar, + avatar: self.resolver.resolveToBase64(data.avatar) || self.user.avatar, email : data.email || self.email, new_password : data.new_password || null, password : data.password || self.password, @@ -1072,6 +1072,11 @@ class InternalClient { }); } + //def setAvatar + setAvatar(avatar) { + return this.updateDetails({avatar}); + } + //def setUsername setUsername(username) { return this.updateDetails({username}); diff --git a/src/Client/Resolver/Resolver.js b/src/Client/Resolver/Resolver.js index 097d64043..d9d779b48 100644 --- a/src/Client/Resolver/Resolver.js +++ b/src/Client/Resolver/Resolver.js @@ -1,4 +1,5 @@ "use strict"; +/* global Buffer */ var fs = require("fs"); @@ -16,11 +17,19 @@ class Resolver { constructor(internal) { this.internal = internal; } - - resolveInviteID(resource){ - if(resource instanceof Invite){ + + resolveToBase64(resource) { + if (resource instanceof Buffer) { + resource = resource.toString("base64"); + resource = "data:image/jpg;base64," + resource; + } + return resource; + } + + resolveInviteID(resource) { + if (resource instanceof Invite) { return resource.id; - }else if (typeof resource == "string" || resource instanceof String) { + } else if (typeof resource == "string" || resource instanceof String) { if (resource.indexOf("http") === 0) { var split = resource.split("/"); @@ -33,15 +42,15 @@ class Resolver { return null; } - resolveServer(resource){ - if(resource instanceof Server){ + resolveServer(resource) { + if (resource instanceof Server) { return resource; - }else if(resource instanceof ServerChannel){ + } else if (resource instanceof ServerChannel) { return resource.server; - }else if(resource instanceof String || typeof resource === "string"){ + } else if (resource instanceof String || typeof resource === "string") { return this.internal.servers.get("id", resource); - }else if(resource instanceof Message){ - if(resource.channel instanceof TextChannel){ + } else if (resource instanceof Message) { + if (resource.channel instanceof TextChannel) { return resource.server; } } @@ -118,7 +127,7 @@ class Resolver { resolveVoiceChannel(resource) { // resolveChannel will also work but this is more apt - if(resource instanceof VoiceChannel){ + if (resource instanceof VoiceChannel) { return resource; } return null; diff --git a/test/bot.1.js b/test/bot.1.js index 73d99ab82..0eeb7f1e5 100644 --- a/test/bot.1.js +++ b/test/bot.1.js @@ -13,6 +13,9 @@ client.on("message", m => { client.stopTyping(m.channel); } else if (m.content === "changename") { client.setUsername("Hydrabot!"); + } else if (m.content === "setav") { + var fs = require("fs"); + client.setAvatar(fs.readFileSync("./test/image.png")); } });