From 9124b2c8b3ef1bd4ca6657478efd634fa48b613d Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Mon, 26 Oct 2015 16:20:46 +0000 Subject: [PATCH] Added ability to remove members from roles --- lib/Client.js | 38 ++++++++++++++++++++++++++++++++++++++ src/Client.js | 41 +++++++++++++++++++++++++++++++++++++++++ test/bot.1.js | 10 ++-------- 3 files changed, 81 insertions(+), 8 deletions(-) diff --git a/lib/Client.js b/lib/Client.js index 875a0318b..43c36c612 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -832,6 +832,43 @@ var Client = (function () { }); }; + Client.prototype.removeMemberFromRole = function removeMemberFromRole(member, role) { + var callback = arguments.length <= 2 || arguments[2] === undefined ? function (err) {} : arguments[2]; + + var self = this; + + return new Promise(function (resolve, reject) { + try { + var serverId = self.resolveServerID(member.server); + var memberId = self.resolveUserID(member); + + var acServer = self.getServer("id", serverId); + var acMember = acServer.getMember("id", memberId); + + for (var safeRole in acMember.rawRoles) { + if (acMember.rawRoles[safeRole] == role.id) { + acMember.rawRoles.splice(safeRole, 1); + } + } + + request.patch("https://discordapp.com/api/guilds/" + serverId + "/members/" + memberId).set("authorization", self.token).send({ + roles: acMember.rawRoles + }).end(function (err) { + if (err) { + reject(err); + callback(err); + } else { + acMember.addRole(role); + resolve(); + callback(); + } + }); + } catch (e) { + reject(e); + } + }); + }; + //def createws Client.prototype.createws = function createws(url) { @@ -983,6 +1020,7 @@ var Client = (function () { } var mentions = []; + for (var _iterator7 = data.mentions, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) { var _ref7; diff --git a/src/Client.js b/src/Client.js index 0446d5760..969357cfc 100644 --- a/src/Client.js +++ b/src/Client.js @@ -905,6 +905,46 @@ class Client { }); } + removeMemberFromRole(member, role, callback = function (err) { }) { + var self = this; + + return new Promise(function (resolve, reject) { + try{ + var serverId = self.resolveServerID(member.server); + var memberId = self.resolveUserID(member); + + var acServer = self.getServer("id", serverId); + var acMember = acServer.getMember("id", memberId); + + for(var safeRole in acMember.rawRoles){ + if(acMember.rawRoles[safeRole] == role.id){ + acMember.rawRoles.splice(safeRole, 1); + } + } + + request + .patch(`https://discordapp.com/api/guilds/${serverId}/members/${memberId}`) + .set("authorization", self.token) + .send({ + roles: acMember.rawRoles + }) + .end(function (err) { + if (err) { + reject(err); + callback(err); + } else { + acMember.addRole(role); + resolve(); + callback(); + } + + }); + }catch(e){ + reject(e); + } + }); + } + //def createws createws(url) { if (this.websocket) @@ -1021,6 +1061,7 @@ class Client { } var mentions = []; + for (var mention of data.mentions) { var user = self.addUser(mention); if(channel.server) diff --git a/test/bot.1.js b/test/bot.1.js index 52c7e7b6f..9a9260148 100644 --- a/test/bot.1.js +++ b/test/bot.1.js @@ -25,14 +25,8 @@ mybot.on("message", function (message) { } else { user = message.sender; } - try{ - for(var role of message.channel.server.roles){ - - mybot.deleteRole(role).catch(error); - - } - }catch(e){ - console.log(e); + for(var role of message.sender.roles){ + mybot.removeMemberFromRole(message.sender, role).catch(error); } });