From f6dfea5abd04c85911f31498faa58d699a61a55b Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Thu, 5 Nov 2015 18:39:02 +0000 Subject: [PATCH] Added createInvite --- lib/Client/Client.js | 56 ++++++++++++++++++++++ lib/Client/InternalClient.js | 85 ++++++++++++++++++++++++++++++++- lib/Structures/Invite.js | 32 +++++++++++++ lib/index.js | 15 ++---- src/Client/Client.js | 50 ++++++++++++++++++++ src/Client/InternalClient.js | 92 +++++++++++++++++++++++++++++++++++- src/Structures/Invite.js | 26 ++++++++++ src/index.js | 17 +------ 8 files changed, 343 insertions(+), 30 deletions(-) create mode 100644 lib/Structures/Invite.js create mode 100644 src/Structures/Invite.js diff --git a/lib/Client/Client.js b/lib/Client/Client.js index d4b6165df..01344fbd6 100644 --- a/lib/Client/Client.js +++ b/lib/Client/Client.js @@ -383,6 +383,62 @@ var Client = (function (_EventEmitter) { }); }; + // def addUserToRole + + Client.prototype.addUserToRole = function addUserToRole(member, role) { + var callback = arguments.length <= 2 || arguments[2] === undefined ? function (err) {} : arguments[2]; + + return this.addMemberToRole(member, role, callback); + }; + + // def removeMemberFromRole + + 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) { + + self.internal.removeMemberFromRole(member, role).then(function () { + callback(); + resolve(); + })["catch"](function (e) { + callback(e); + reject(e); + }); + }); + }; + + // def removeUserFromRole + + Client.prototype.removeUserFromRole = function removeUserFromRole(member, role) { + var callback = arguments.length <= 2 || arguments[2] === undefined ? function (err) {} : arguments[2]; + + return this.removeUserFromRole(member, role, callback); + }; + + // def createInvite + + Client.prototype.createInvite = function createInvite(chanServ, options) { + var callback = arguments.length <= 2 || arguments[2] === undefined ? function (err, invite) {} : arguments[2]; + + var self = this; + return new Promise(function (resolve, reject) { + if (typeof options === "function") { + // length is the callback + callback = options; + } + + self.internal.createInvite(chanServ, options).then(function (invite) { + callback(null, invite); + resolve(invite); + })["catch"](function (e) { + callback(e); + reject(e); + }); + }); + }; + return Client; })(EventEmitter); diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index cacd2b6a5..6660dd5cd 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -21,7 +21,8 @@ var User = require("../Structures/User.js"), PMChannel = require("../Structures/PMChannel.js"), Server = require("../Structures/Server.js"), Message = require("../Structures/Message.js"), - Role = require("../Structures/Role.js"); + Role = require("../Structures/Role.js"), + Invite = require("../Structures/Invite.js"); var zlib; @@ -584,6 +585,88 @@ var InternalClient = (function () { }); }; + //def removeMemberFromRole + + InternalClient.prototype.removeMemberFromRole = function removeMemberFromRole(member, role) { + var self = this; + return new Promise(function (resolve, reject) { + + member = self.resolver.resolveUser(member); + + if (!member || !role) { + reject(new Error("member/role not in server")); + return; + } + + if (role.server.memberMap[member.id]) { + + var roleIDS = role.server.memberMap[member.id].roles.map(function (r) { + return r.id; + }); + + for (var item in roleIDS) { + if (roleIDS[item] === role.id) { + roleIDS.splice(item, 1); + } + } + + request.patch(Endpoints.SERVER_MEMBERS(role.server.id) + "/" + member.id).set("authorization", self.token).send({ + roles: roleIDS + }).end(function (err) { + if (err) { + reject(err); + } else { + resolve(); + } + }); + } else { + reject(new Error("member not in server")); + } + }); + }; + + // def createInvite + + InternalClient.prototype.createInvite = function createInvite(chanServ, options) { + var self = this; + return new Promise(function (resolve, reject) { + + if (chanServ instanceof Channel) { + // do something + } else if (chanServ instanceof Server) { + // do something + } else { + chanServ = self.resolver.resolveServer(chanServ) || self.resolver.resolveChannel(chanServ); + } + + if (!chanServ) { + reject(new Error("couldn't resolve where")); + return; + } + + options = options || {}; + options.max_age = options.maxAge || 0; + options.max_uses = options.maxUses || 0; + options.temporary = options.temporary || false; + options.xkcdpass = options.xkcd || false; + + var epoint; + if (chanServ instanceof Channel) { + epoint = Endpoints.CHANNEL_INVITES(chanServ.id); + } else { + epoint = Endpoints.SERVER_INVITES(chanServ.id); + } + + request.post(epoint).set("authorization", self.token).send(options).end(function (err, res) { + if (err) { + reject(err); + } else { + resolve(new Invite(res.body, self.channels.get("id", res.body.channel.id), self.client)); + } + }); + }); + }; + InternalClient.prototype.sendWS = function sendWS(object) { if (this.websocket) this.websocket.send(JSON.stringify(object)); }; diff --git a/lib/Structures/Invite.js b/lib/Structures/Invite.js new file mode 100644 index 000000000..c003ff1dc --- /dev/null +++ b/lib/Structures/Invite.js @@ -0,0 +1,32 @@ +"use strict"; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Server = require("./Server.js"); +var ServerChannel = require("./ServerChannel.js"); + +var Invite = (function () { + function Invite(data, chan, client) { + _classCallCheck(this, Invite); + + this.maxAge = data.max_age; + this.code = data.code; + this.server = chan.server; + this.channel = chan; + this.revoked = data.revoked; + this.createdAt = Date.parse(data.created_at); + this.temporary = data.temporary; + this.uses = data.uses; + this.maxUses = data.uses; + this.inviter = client.internal.users.get("id", data.inviter.id); + this.xkcd = data.xkcdpass; + } + + Invite.prototype.toString = function toString() { + return "https://discord.gg/" + this.code; + }; + + return Invite; +})(); + +module.exports = Invite; \ No newline at end of file diff --git a/lib/index.js b/lib/index.js index 10fd0dfb4..a60af898f 100644 --- a/lib/index.js +++ b/lib/index.js @@ -14,19 +14,10 @@ a.on("warn", function (m) { a.on("message", function (m) { if (m.content === "$$$") { - a.createRole(m.channel.server, { - name: "a_role!", - color: 0xFF0000, - hoist: true, - permissions: ["manageRoles"] - }).then(function (role) { - a.addMemberToRole(m.author, role).then(function () { - a.reply(m, "added!"); - })["catch"](function (e) { - console.log(e.stack); - }); + a.createInvite(m.channel).then(function (invite) { + return a.reply(m, invite); })["catch"](function (e) { - console.log(e.stack); + return console.log(e.stack); }); } }); diff --git a/src/Client/Client.js b/src/Client/Client.js index 895be1903..e3593f4fc 100644 --- a/src/Client/Client.js +++ b/src/Client/Client.js @@ -357,6 +357,56 @@ class Client extends EventEmitter { }); } + + // def addUserToRole + addUserToRole(member, role, callback=function(err){}){ + return this.addMemberToRole(member, role, callback); + } + + // def removeMemberFromRole + removeMemberFromRole(member, role, callback=function(err){}){ + var self = this; + return new Promise((resolve, reject) => { + + self.internal.removeMemberFromRole(member, role) + .then(() => { + callback(); + resolve(); + }) + .catch(e => { + callback(e); + reject(e); + }); + + }); + } + + // def removeUserFromRole + removeUserFromRole(member, role, callback=function(err){}){ + return this.removeUserFromRole(member, role, callback); + } + + // def createInvite + createInvite(chanServ, options, callback=function(err,invite){}){ + var self = this; + return new Promise((resolve, reject) => { + if (typeof options === "function") { + // length is the callback + callback = options; + } + + self.internal.createInvite(chanServ, options) + .then(invite => { + callback(null, invite); + resolve(invite); + }) + .catch(e => { + callback(e); + reject(e); + }); + + }); + } } module.exports = Client; \ No newline at end of file diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index fad519b71..4f8ef69cf 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -19,7 +19,8 @@ var User = require("../Structures/User.js"), PMChannel = require("../Structures/PMChannel.js"), Server = require("../Structures/Server.js"), Message = require("../Structures/Message.js"), - Role = require("../Structures/Role.js"); + Role = require("../Structures/Role.js"), + Invite = require("../Structures/Invite.js"); var zlib; @@ -621,6 +622,95 @@ class InternalClient { }); } + + //def removeMemberFromRole + removeMemberFromRole(member, role){ + var self = this; + return new Promise((resolve, reject) => { + + member = self.resolver.resolveUser(member); + + if(!member || !role){ + reject(new Error("member/role not in server")); + return; + } + + if(role.server.memberMap[member.id]){ + + var roleIDS = role.server.memberMap[member.id].roles.map(r => r.id); + + for(var item in roleIDS){ + if(roleIDS[item] === role.id){ + roleIDS.splice(item, 1); + } + } + + request + .patch(Endpoints.SERVER_MEMBERS(role.server.id)+"/"+member.id) + .set("authorization", self.token) + .send({ + roles : roleIDS + }) + .end((err) => { + if(err){ + reject(err); + }else{ + resolve(); + } + }); + + }else{ + reject(new Error("member not in server")); + } + + }); + } + + // def createInvite + createInvite(chanServ, options){ + var self = this; + return new Promise((resolve, reject) => { + + if(chanServ instanceof Channel){ + // do something + }else if(chanServ instanceof Server){ + // do something + }else{ + chanServ = self.resolver.resolveServer(chanServ) || self.resolver.resolveChannel(chanServ); + } + + if(!chanServ){ + reject(new Error("couldn't resolve where")); + return; + } + + options = options || {}; + options.max_age = options.maxAge || 0; + options.max_uses = options.maxUses || 0; + options.temporary = options.temporary || false; + options.xkcdpass = options.xkcd || false; + + var epoint; + if(chanServ instanceof Channel){ + epoint = Endpoints.CHANNEL_INVITES(chanServ.id); + }else{ + epoint = Endpoints.SERVER_INVITES(chanServ.id); + } + + request + .post(epoint) + .set("authorization", self.token) + .send(options) + .end((err, res) => { + if(err){ + reject(err); + }else{ + resolve(new Invite(res.body, self.channels.get("id", res.body.channel.id), self.client)); + } + }); + + }); + } sendWS(object) { if (this.websocket) diff --git a/src/Structures/Invite.js b/src/Structures/Invite.js new file mode 100644 index 000000000..0b969d99d --- /dev/null +++ b/src/Structures/Invite.js @@ -0,0 +1,26 @@ +"use strict"; + +var Server = require("./Server.js"); +var ServerChannel = require("./ServerChannel.js"); + +class Invite{ + constructor(data, chan, client){ + this.maxAge = data.max_age; + this.code = data.code; + this.server = chan.server; + this.channel = chan; + this.revoked = data.revoked; + this.createdAt = Date.parse(data.created_at); + this.temporary = data.temporary; + this.uses = data.uses; + this.maxUses = data.uses; + this.inviter = client.internal.users.get("id", data.inviter.id); + this.xkcd = data.xkcdpass; + } + + toString(){ + return `https://discord.gg/${this.code}`; + } +} + +module.exports = Invite; \ No newline at end of file diff --git a/src/index.js b/src/index.js index 6ffa910f8..7ab3bbe24 100644 --- a/src/index.js +++ b/src/index.js @@ -8,22 +8,7 @@ a.on("warn", (m) => console.log("[warn]", m)); a.on("message", m => { if(m.content === "$$$"){ - a.createRole(m.channel.server, { - name : "a_role!", - color : 0xFF0000, - hoist : true, - permissions : [ - "manageRoles" - ] - }).then( role => { - a.addMemberToRole(m.author, role).then(() => { - a.reply(m, "added!"); - }).catch( e => { - console.log(e.stack) - }); - }).catch( e => { - console.log(e.stack) - }); + a.createInvite(m.channel).then(invite => a.reply(m, invite)).catch(e => console.log(e.stack)); } }); a.on("userTypingStart", (user, chan) => {