Added permission functions for client in docs

This commit is contained in:
hydrabolt
2015-10-27 21:03:48 +00:00
parent a18823c47f
commit d21372e0f6
4 changed files with 339 additions and 192 deletions

View File

@@ -55,9 +55,9 @@ author = u'hydrabolt'
# built documents. # built documents.
# #
# The short X.Y version. # The short X.Y version.
version = '3.6' version = '3.10'
# The full version, including alpha/beta/rc tags. # The full version, including alpha/beta/rc tags.
release = '3.6.1' release = '3.10.1'
# The language for content autogenerated by Sphinx. Refer to documentation # The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages. # for a list of supported languages.

View File

@@ -359,6 +359,122 @@ Sets the topic of the specified channel
- **error** - An error if one occurred, otherwise it is null. - **error** - An error if one occurred, otherwise it is null.
createRole(server, data, `callback`)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Creates a role (or set of permissions) in a given server.
- **server** - A `Server Resolvable`_ where the role should be created.
- **data** - An `Object` containing values available in any `ServerPermissions`_ object.
- **callback** - A `function` that can take the following parameters:
- **error** - An error if one occurred, otherwise it is null.
- **role** - If no errors occurred, this will be a `ServerPermissions`_ object representing the created role.
.. code-block:: js
// example usage:
bot.createRole(server, {
name : "My Role",
color : Discord.Colors.RED,
sendMessages : false
});
createRoleIfNotExists(server, data, `callback`)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Identical to createRole_ but it only executes if a role with the same name, permissions and color exists in the given server.
- **server** - A `Server Resolvable`_ where the role should be created.
- **data** - An `Object` containing values available in any `ServerPermissions`_ object.
- **callback** - A `function` that can take the following parameters:
- **error** - An error if one occurred, otherwise it is null.
- **role** - If no errors occurred, this will be a `ServerPermissions`_ object representing the created role.
.. code-block:: js
// example usage:
bot.createRoleIfNotExists(server, {
name : "My Role",
color : Discord.Colors.RED,
sendMessages : false
}) // would execute, role doesn't exist in the server yet
.then(function(){
bot.createRoleIfNotExists(server, {
name : "My Role",
color : Discord.Colors.RED,
sendMessages : false
}); // would not execute, role already exists
});
.. warning :: Due to the asynchronous nature of the code, if you ran the same code twice without putting one in a callback, both would execute as at the point of execution, neither are existant.
deleteRole(role, `callback`)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Deletes a Role
- **role** - The `ServerPermissions` that you want to delete.
- **callback** - A `function` that can take the following parameters:
- **error** - An error if one occurred, otherwise it is null.
updateRole(role, data, `callback`)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Updates a role existing in a server to have new permissions, order, color, name or to have `hoist` (whether it should be its own category in the users list)
- **role** - A `ServerPermissions`_ which represents the role to edit.
- **data** - An `Object` containing values available in any `ServerPermissions`_ object.
- **callback** - A `function` that can take the following parameters:
- **error** - An error if one occurred, otherwise it is null.
- **role** - If no errors occurred, this will be a `ServerPermissions`_ object representing the edited role.
.. code-block:: js
bot.updateRole(alreadyExistantRole, {
name : "this is a new role name"
});
addMemberToRole(member, role, `callback`)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Adds a Member to a Server Role.
- **member** - The `Member`_ you would like to add to the role.
- **role** - The `ServerPermissions`_ (or role) you would like to add the member to.
- **callback** - A `function` that can take the following parameters:
- **error** - An error if one occurred, otherwise it is null.
removeMemberFromRole(member, role, `callback`)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Removes a Member from a Server Role.
- **member** - The `Member`_ you would like to remove from the role.
- **role** - The `ServerPermissions`_ (or role) you would like to remove the member from.
- **callback** - A `function` that can take the following parameters:
- **error** - An error if one occurred, otherwise it is null.
overwritePermissions(channel, role, overwrites, `callback`)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Overrides/overwrites a role in a specific channel.
- **channel** - A `Channel Resolvable`_ where the permissions should be overridden.
- **role** - A `ServerPermissions`_ role that you want to override
- **overwrites** - An `Object` containing any values in a `ChannelPermissions`_
- **callback** - A `function` that can take the following parameters:
- **error** - An error if one occurred, otherwise it is null.
getUser(key, value) getUser(key, value)
~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
@@ -620,3 +736,5 @@ Called when a WebSocket message is received and it gives you the message.
.. _Discord Game ID : https://raw.githubusercontent.com/hydrabolt/discord.js/master/ref/gameMap.json .. _Discord Game ID : https://raw.githubusercontent.com/hydrabolt/discord.js/master/ref/gameMap.json
.. _EventEmitter : https://nodejs.org/api/events.html#events_class_events_eventemitter .. _EventEmitter : https://nodejs.org/api/events.html#events_class_events_eventemitter
.. _createRole : #createRole

View File

@@ -818,20 +818,25 @@ var Client = (function (_EventEmitter) {
}); });
}; };
Client.prototype.updateRole = function updateRole(server, role) { Client.prototype.updateRole = function updateRole(role, data) {
var cb = arguments.length <= 2 || arguments[2] === undefined ? function (err, perm) {} : arguments[2]; var cb = arguments.length <= 2 || arguments[2] === undefined ? function (err, perm) {} : arguments[2];
var self = this; var self = this;
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
server = self.resolveServerID(server); var server = role.server.id;
var modRole = role;
for (var key in data) {
modRole[key] = data[key];
}
request.patch(Endpoints.SERVERS + "/" + server + "/roles/" + role.id).set("authorization", self.token).send({ request.patch(Endpoints.SERVERS + "/" + server + "/roles/" + role.id).set("authorization", self.token).send({
color: role.color, color: modRole.color,
hoist: role.hoist, hoist: modRole.hoist,
name: role.name, name: modRole.name,
permissions: role.packed permissions: modRole.packed
}).end(function (err, res) { }).end(function (err, res) {
if (err) { if (err) {
cb(err); cb(err);
@@ -944,27 +949,37 @@ var Client = (function (_EventEmitter) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
var data; function dieerror(e) {
reject(e);
if (role instanceof ServerPermissions || role.type === "role") { callback(e);
data = ad(updatedStuff);
data.id = role.id;
data.type = "role";
} else {
data = ad(updatedStuff);
data.id = role.id;
data.type = "member";
} }
request.put(Endpoints.CHANNELS + "/" + channel.id + "/permissions/" + role.id).set("authorization", self.token).send(data).end(function (err) {
if (err) { self.resolveDestination(channel).then(next)["catch"](dieerror);
reject(err);
callback(err); function next(channelID) {
var data;
if (role instanceof ServerPermissions || role.type === "role") {
data = ad(updatedStuff);
data.id = role.id;
data.type = "role";
} else { } else {
resolve();
callback(); data = ad(updatedStuff);
data.id = role.id;
data.type = "member";
} }
}); request.put(Endpoints.CHANNELS + "/" + channelID + "/permissions/" + role.id).set("authorization", self.token).send(data).end(function (err) {
if (err) {
reject(err);
callback(err);
} else {
resolve();
callback();
}
});
}
}); });
function ad(data) { function ad(data) {

View File

@@ -21,9 +21,9 @@ var defaultOptions = {
queue: false queue: false
} }
class Client extends EventEmitter{ class Client extends EventEmitter {
constructor(options = defaultOptions, token = undefined){ constructor(options = defaultOptions, token = undefined) {
/* /*
When created, if a token is specified the Client will When created, if a token is specified the Client will
@@ -35,7 +35,7 @@ class Client extends EventEmitter{
this.options = options; this.options = options;
this.options.compress = options.compress; this.options.compress = options.compress;
if(this.options.compress){ if (this.options.compress) {
// only require zlib if necessary // only require zlib if necessary
zlib = require("zlib"); zlib = require("zlib");
} }
@@ -179,11 +179,11 @@ class Client extends EventEmitter{
} }
banMember(user, server, daysToDeleteMessage=1, cb=function(err){}){ banMember(user, server, daysToDeleteMessage = 1, cb = function (err) { }) {
var self = this; var self = this;
return new Promise(function(resolve, reject){ return new Promise(function (resolve, reject) {
var serverID = self.resolveServerID(server); var serverID = self.resolveServerID(server);
var memberID = self.resolveUserID(user); var memberID = self.resolveUserID(user);
@@ -191,11 +191,11 @@ class Client extends EventEmitter{
request request
.put(`${Endpoints.SERVERS}/${serverID}/bans/${memberID}?delete-message-days=${daysToDeleteMessage}`) .put(`${Endpoints.SERVERS}/${serverID}/bans/${memberID}?delete-message-days=${daysToDeleteMessage}`)
.set("authorization", self.token) .set("authorization", self.token)
.end(function(err, res){ .end(function (err, res) {
cb(err); cb(err);
if(err){ if (err) {
reject(err); reject(err);
}else{ } else {
resolve(); resolve();
} }
}); });
@@ -535,14 +535,14 @@ class Client extends EventEmitter{
var mentions = []; var mentions = [];
for (var mention of message.mentions) { for (var mention of message.mentions) {
var user = self.addUser(mention); var user = self.addUser(mention);
if(channel.server) if (channel.server)
mentions.push(channel.server.getMember("id", user.id) || user); mentions.push(channel.server.getMember("id", user.id) || user);
else else
mentions.push(user); mentions.push(user);
} }
var authorRaw = self.addUser(message.author), author; var authorRaw = self.addUser(message.author), author;
if(channel.server) if (channel.server)
author = channel.server.getMember("id", authorRaw.id) || authorRaw; author = channel.server.getMember("id", authorRaw.id) || authorRaw;
else else
author = authorRaw; author = authorRaw;
@@ -713,11 +713,11 @@ class Client extends EventEmitter{
if (typeof options === "function") { if (typeof options === "function") {
// options is a function, which means the developer wants this to be the callback // options is a function, which means the developer wants this to be the callback
callback = options; callback = options;
options = {tts : false}; options = { tts: false };
} }
if(!options){ if (!options) {
options = {tts:false}; options = { tts: false };
} }
message = premessage + resolveMessage(message); message = premessage + resolveMessage(message);
@@ -785,29 +785,29 @@ class Client extends EventEmitter{
return prom; return prom;
} }
createRoleIfNotExists(dest, data, cb = function(err, role){}){ createRoleIfNotExists(dest, data, cb = function (err, role) { }) {
var self = this; var self = this;
return new Promise(function(resolve, reject){ return new Promise(function (resolve, reject) {
var serverID = self.resolveServerID(dest); var serverID = self.resolveServerID(dest);
var server = self.getServer("id", serverID); var server = self.getServer("id", serverID);
var baseRole = new ServerPermissions({}, server); var baseRole = new ServerPermissions({}, server);
for(var key in data){ for (var key in data) {
baseRole[key] = data[key]; baseRole[key] = data[key];
} }
for(var role of server.roles){ for (var role of server.roles) {
if(baseRole.name == role.name && baseRole.packed == role.packed && baseRole.color == role.color){ if (baseRole.name == role.name && baseRole.packed == role.packed && baseRole.color == role.color) {
resolve(role); resolve(role);
cb(null, role); cb(null, role);
return false; return false;
} }
} }
self.createRole(dest, data).then( (role) => { self.createRole(dest, data).then((role) => {
cb(null, role); cb(null, role);
resolve(role); resolve(role);
}).catch((e) => { }).catch((e) => {
@@ -867,22 +867,27 @@ class Client extends EventEmitter{
} }
updateRole(server, role, cb = function (err, perm) { }) { updateRole(role, data, cb = function (err, perm) { }) {
var self = this; var self = this;
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
server = self.resolveServerID(server); var server = role.server.id;
var modRole = role;
for (var key in data) {
modRole[key] = data[key];
}
request request
.patch(`${Endpoints.SERVERS}/${server}/roles/${role.id}`) .patch(`${Endpoints.SERVERS}/${server}/roles/${role.id}`)
.set("authorization", self.token) .set("authorization", self.token)
.send({ .send({
color: role.color, color: modRole.color,
hoist: role.hoist, hoist: modRole.hoist,
name: role.name, name: modRole.name,
permissions: role.packed permissions: modRole.packed
}) })
.end(function (err, res) { .end(function (err, res) {
if (err) { if (err) {
@@ -901,21 +906,21 @@ class Client extends EventEmitter{
} }
deleteRole(role, callback = function(err){}){ deleteRole(role, callback = function (err) { }) {
// role is a ServerPermissions // role is a ServerPermissions
var self = this; var self = this;
return new Promise(function(resolve, reject){ return new Promise(function (resolve, reject) {
request request
.del(`${Endpoints.SERVERS}/${role.server.id}/roles/${role.id}`) .del(`${Endpoints.SERVERS}/${role.server.id}/roles/${role.id}`)
.set("authorization", self.token) .set("authorization", self.token)
.end(function(err){ .end(function (err) {
if(err){ if (err) {
reject(err); reject(err);
callback(err); callback(err);
}else{ } else {
resolve(); resolve();
callback(); callback();
} }
@@ -929,36 +934,36 @@ class Client extends EventEmitter{
var self = this; var self = this;
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
try{ try {
var serverId = self.resolveServerID(member.server); var serverId = self.resolveServerID(member.server);
var memberId = self.resolveUserID(member); var memberId = self.resolveUserID(member);
var acServer = self.getServer("id", serverId); var acServer = self.getServer("id", serverId);
var acMember = acServer.getMember("id", memberId); var acMember = acServer.getMember("id", memberId);
if(acMember.rawRoles.indexOf(role.id) !== -1){ if (acMember.rawRoles.indexOf(role.id) !== -1) {
// user already has role // user already has role
return; return;
} }
request request
.patch(`https://discordapp.com/api/guilds/${serverId}/members/${memberId}`) .patch(`https://discordapp.com/api/guilds/${serverId}/members/${memberId}`)
.set("authorization", self.token) .set("authorization", self.token)
.send({ .send({
roles: acMember.rawRoles.concat(role.id) roles: acMember.rawRoles.concat(role.id)
}) })
.end(function (err) { .end(function (err) {
if (err) { if (err) {
reject(err); reject(err);
callback(err); callback(err);
} else { } else {
acMember.addRole(role); acMember.addRole(role);
resolve(); resolve();
callback(); callback();
} }
}); });
}catch(e){ } catch (e) {
reject(e); reject(e);
} }
}); });
@@ -968,78 +973,87 @@ class Client extends EventEmitter{
var self = this; var self = this;
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
try{ try {
var serverId = self.resolveServerID(member.server); var serverId = self.resolveServerID(member.server);
var memberId = self.resolveUserID(member); var memberId = self.resolveUserID(member);
var acServer = self.getServer("id", serverId); var acServer = self.getServer("id", serverId);
var acMember = acServer.getMember("id", memberId); var acMember = acServer.getMember("id", memberId);
if(~acMember.rawRoles.indexOf(role.id)){ if (~acMember.rawRoles.indexOf(role.id)) {
acMember.removeRole(role); acMember.removeRole(role);
} }
request request
.patch(`https://discordapp.com/api/guilds/${serverId}/members/${memberId}`) .patch(`https://discordapp.com/api/guilds/${serverId}/members/${memberId}`)
.set("authorization", self.token) .set("authorization", self.token)
.send({ .send({
roles: acMember.rawRoles roles: acMember.rawRoles
}) })
.end(function (err) { .end(function (err) {
if (err) { if (err) {
reject(err); reject(err);
callback(err); callback(err);
} else { } else {
acMember.addRole(role); acMember.addRole(role);
resolve(); resolve();
callback(); callback();
} }
}); });
}catch(e){ } catch (e) {
reject(e); reject(e);
} }
}); });
} }
overwritePermissions(channel, role, updatedStuff, callback=function(err){}){ overwritePermissions(channel, role, updatedStuff, callback = function (err) { }) {
var self = this; var self = this;
return new Promise(function(resolve, reject){ return new Promise(function (resolve, reject) {
var data;
if( role instanceof ServerPermissions || role.type === "role" ){
data = ad(updatedStuff);
data.id = role.id;
data.type = "role";
}else{
data = ad(updatedStuff);
data.id = role.id;
data.type = "member";
function dieerror(e) {
reject(e);
callback(e);
} }
request
.put(`${Endpoints.CHANNELS}/${channel.id}/permissions/${role.id}`)
.set("authorization", self.token)
.send(data)
.end(function(err){
if (err) {
reject(err);
callback(err);
} else {
resolve();
callback();
}
});
self.resolveDestination(channel).then(next).catch(dieerror);
function next(channelID) {
var data;
if (role instanceof ServerPermissions || role.type === "role") {
data = ad(updatedStuff);
data.id = role.id;
data.type = "role";
} else {
data = ad(updatedStuff);
data.id = role.id;
data.type = "member";
}
request
.put(`${Endpoints.CHANNELS}/${channelID}/permissions/${role.id}`)
.set("authorization", self.token)
.send(data)
.end(function (err) {
if (err) {
reject(err);
callback(err);
} else {
resolve();
callback();
}
});
}
}); });
function ad(data){ function ad(data) {
var allow = 0, disallow = 0; var allow = 0, disallow = 0;
function bitit(value, position){ function bitit(value, position) {
if (value) { if (value) {
allow |= (1 << position); allow |= (1 << position);
} else { } else {
@@ -1047,8 +1061,8 @@ class Client extends EventEmitter{
} }
} }
for(var perm in data){ for (var perm in data) {
switch(perm){ switch (perm) {
case "canCreateInstantInvite": case "canCreateInstantInvite":
bitit(data[perm], 0); bitit(data[perm], 0);
break; break;
@@ -1136,8 +1150,8 @@ class Client extends EventEmitter{
//message //message
this.websocket.onmessage = function (e) { this.websocket.onmessage = function (e) {
if(e.type === "Binary"){ if (e.type === "Binary") {
if(!zlib) if (!zlib)
zlib = require("zlib"); zlib = require("zlib");
e.data = zlib.inflateSync(e.data).toString(); e.data = zlib.inflateSync(e.data).toString();
@@ -1191,7 +1205,7 @@ class Client extends EventEmitter{
var channel = self.getChannel("id", data.channel_id); var channel = self.getChannel("id", data.channel_id);
for (var mention of data.mentions) { for (var mention of data.mentions) {
var user = self.addUser(mention); var user = self.addUser(mention);
if(channel.server) if (channel.server)
mentions.push(channel.server.getMember("id", user.id) || user); mentions.push(channel.server.getMember("id", user.id) || user);
else else
mentions.push(user); mentions.push(user);
@@ -1240,7 +1254,7 @@ class Client extends EventEmitter{
for (var mention of data.mentions) { for (var mention of data.mentions) {
var user = self.addUser(mention); var user = self.addUser(mention);
if(channel.server) if (channel.server)
mentions.push(channel.server.getMember("id", user.id) || user); mentions.push(channel.server.getMember("id", user.id) || user);
else else
mentions.push(user); mentions.push(user);
@@ -1679,7 +1693,7 @@ class Client extends EventEmitter{
"$referrer": "", "$referrer": "",
"$referring_domain": "" "$referring_domain": ""
}, },
compress : self.options.compress compress: self.options.compress
} }
}; };
this.websocket.send(JSON.stringify(data)); this.websocket.send(JSON.stringify(data));
@@ -1770,14 +1784,14 @@ class Client extends EventEmitter{
for (var mention of data.mentions) { for (var mention of data.mentions) {
var user = self.addUser(mention); var user = self.addUser(mention);
if(channel.server) if (channel.server)
mentions.push(channel.server.getMember("id", user.id) || user); mentions.push(channel.server.getMember("id", user.id) || user);
else else
mentions.push(user); mentions.push(user);
} }
if (channel) { if (channel) {
var msg = channel.addMessage(new Message(data, channel, mentions, {id:data.author.id})); var msg = channel.addMessage(new Message(data, channel, mentions, { id: data.author.id }));
resolve(msg); resolve(msg);
} }
} }