added createRole, updateRole and deleteRole

This commit is contained in:
hydrabolt
2015-11-05 17:37:27 +00:00
parent ca6f582853
commit e54da00282
6 changed files with 310 additions and 21 deletions

View File

@@ -325,6 +325,46 @@ var Client = (function (_EventEmitter) {
});
};
//def createRole
Client.prototype.createRole = function createRole(server) {
var data = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
var callback = arguments.length <= 2 || arguments[2] === undefined ? function (err, res) {} : arguments[2];
var self = this;
return new Promise(function (resolve, reject) {
if (typeof data === "function") {
// data is the callback
callback = data;
}
self.internal.createRole(server, data).then(function (role) {
callback(null, role);
resolve(role);
})["catch"](function (e) {
callback(e);
reject(e);
});
});
};
//def deleteRole
Client.prototype.deleteRole = function deleteRole(role) {
var callback = arguments.length <= 1 || arguments[1] === undefined ? function (err) {} : arguments[1];
var self = this;
return new Promise(function (resolve, reject) {
self.internal.deleteRole(role).then(function () {
callback();
resolve();
})["catch"](function (e) {
callback(e);
reject(e);
});
});
};
return Client;
})(EventEmitter);

View File

@@ -456,6 +456,100 @@ var InternalClient = (function () {
});
};
// def createRole
InternalClient.prototype.createRole = function createRole(server, data) {
var self = this;
return new Promise(function (resolve, reject) {
server = self.resolver.resolveServer(server);
request.post(Endpoints.SERVER_ROLES(server.id)).set("authorization", self.token).end(function (err, res) {
if (err) {
reject(err);
} else {
var role = server.roles.add(new Role(res.body, server, self.client));
if (data) {
self.updateRole(role, data).then(resolve)["catch"](reject);
} else {
resolve(role);
}
}
});
});
};
// def updateRole
InternalClient.prototype.updateRole = function updateRole(role, data) {
var self = this;
data = data || {};
data.permissions = data.permissions || [];
return new Promise(function (resolve, reject) {
var server = self.resolver.resolveServer(role.server);
var permissions = 0;
for (var _iterator2 = data.permissions, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
var _ref2;
if (_isArray2) {
if (_i2 >= _iterator2.length) break;
_ref2 = _iterator2[_i2++];
} else {
_i2 = _iterator2.next();
if (_i2.done) break;
_ref2 = _i2.value;
}
var perm = _ref2;
if (perm instanceof String || typeof perm === "string") {
permissions |= Constants.Permissions[perm] || 0;
} else {
permissions |= perm;
}
}
data.color = data.color || 0;
request.patch(Endpoints.SERVER_ROLES(server.id) + "/" + role.id).set("authorization", self.token).send({
color: data.color || role.color,
hoist: data.hoist || role.hoist,
name: data.name || role.name,
permissions: permissions
}).end(function (err, res) {
if (err) {
reject(err);
} else {
var nrole = new Role(res.body, server, self.client);
resolve(server.roles.update(role, nrole));
}
});
});
};
// def deleteRole
InternalClient.prototype.deleteRole = function deleteRole(role) {
var self = this;
return new Promise(function (resolve, reject) {
request.del(Endpoints.SERVER_ROLES(role.server.id) + "/" + role.id).set("authorization", self.token).end(function (err, res) {
if (err) {
reject(err);
} else {
resolve();
// the ws cache will handle it
// role.server.roles.remove(role);
}
});
});
};
InternalClient.prototype.sendWS = function sendWS(object) {
if (this.websocket) this.websocket.send(JSON.stringify(object));
};
@@ -593,19 +687,19 @@ var InternalClient = (function () {
var server = self.servers.get("id", data.id);
if (server) {
for (var _iterator2 = server.channels, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
var _ref2;
for (var _iterator3 = server.channels, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
var _ref3;
if (_isArray2) {
if (_i2 >= _iterator2.length) break;
_ref2 = _iterator2[_i2++];
if (_isArray3) {
if (_i3 >= _iterator3.length) break;
_ref3 = _iterator3[_i3++];
} else {
_i2 = _iterator2.next();
if (_i2.done) break;
_ref2 = _i2.value;
_i3 = _iterator3.next();
if (_i3.done) break;
_ref3 = _i3.value;
}
var channel = _ref2;
var channel = _ref3;
self.channels.remove(channel);
}
@@ -841,7 +935,7 @@ var InternalClient = (function () {
client.emit("userTypingStart", user, channel);
}
setTimeout(function () {
if (Date.now() - user.typing.since > 5990) {
if (Date.now() - user.typing.since > 5500) {
// they haven't typed since
user.typing.since = null;
user.typing.channel = null;

View File

@@ -13,10 +13,20 @@ a.on("warn", function (m) {
});
a.on("message", function (m) {
if (m.content === "$$$") a.createChannel(m.channel.server, "quackducks").then(function (c) {
a.sendMessage(c, "I'm alive!");
});
if (m.content === "$$$") {
a.createRole(m.channel.server, {
name: "a_role!",
color: 0xFF0000,
hoist: true,
permissions: ["manageRoles"]
}).then(function (role) {
a.deleteRole(role).then(function () {
a.reply(m, "deleted!");
});
})["catch"](function (e) {
console.log(e.stack);
});
}
});
a.on("userTypingStart", function (user, chan) {
console.log(user.username + " typing");

View File

@@ -298,6 +298,47 @@ class Client extends EventEmitter {
});
}
//def createRole
createRole(server, data=null, callback=function(err,res){}){
var self = this;
return new Promise((resolve, reject)=>{
if (typeof data === "function") {
// data is the callback
callback = data;
}
self.internal.createRole(server, data)
.then((role) => {
callback(null, role);
resolve(role);
})
.catch(e => {
callback(e);
reject(e);
});
});
}
//def deleteRole
deleteRole(role, callback=function(err){}){
var self = this;
return new Promise((resolve, reject) => {
self.internal.deleteRole(role)
.then(() => {
callback();
resolve();
})
.catch(e => {
callback(e);
reject(e);
});
});
}
}
module.exports = Client;

View File

@@ -490,6 +490,100 @@ class InternalClient {
});
}
// def createRole
createRole(server, data){
var self = this;
return new Promise((resolve, reject) => {
server = self.resolver.resolveServer(server);
request
.post(Endpoints.SERVER_ROLES(server.id))
.set("authorization", self.token)
.end( (err, res) => {
if(err){
reject(err);
}else{
var role = server.roles.add(new Role(res.body, server, self.client));
if(data){
self.updateRole(role, data)
.then(resolve)
.catch(reject);
}else{
resolve(role);
}
}
});
});
}
// def updateRole
updateRole(role, data){
var self = this;
data = data || {};
data.permissions = data.permissions || [];
return new Promise((resolve, reject) => {
var server = self.resolver.resolveServer(role.server);
var permissions = 0;
for(var perm of data.permissions){
if(perm instanceof String || typeof perm === "string"){
permissions |= (Constants.Permissions[perm] || 0);
}else{
permissions |= perm;
}
}
data.color = data.color || 0;
request
.patch(Endpoints.SERVER_ROLES(server.id)+"/"+role.id)
.set("authorization", self.token)
.send({
color : data.color || role.color,
hoist : data.hoist || role.hoist,
name : data.name || role.name,
permissions : permissions
})
.end((err, res) => {
if(err){
reject(err);
}else{
var nrole = new Role(res.body, server, self.client);
resolve(
server.roles.update(role, nrole)
);
}
});
});
}
// def deleteRole
deleteRole(role){
var self = this;
return new Promise((resolve, reject) => {
request
.del(Endpoints.SERVER_ROLES(role.server.id)+"/"+role.id)
.set("authorization", self.token)
.end((err, res) => {
if(err){
reject(err);
}else{
resolve();
// the ws cache will handle it
// role.server.roles.remove(role);
}
});
});
}
sendWS(object) {
if (this.websocket)
@@ -874,7 +968,7 @@ class InternalClient {
client.emit("userTypingStart", user, channel);
}
setTimeout(() => {
if (Date.now() - user.typing.since > 5990) {
if (Date.now() - user.typing.since > 5500) {
// they haven't typed since
user.typing.since = null;
user.typing.channel = null;

View File

@@ -7,12 +7,22 @@ a.on("debug", (m) => console.log("[debug]",m));
a.on("warn", (m) => console.log("[warn]", m));
a.on("message", m => {
if(m.content === "$$$")
a.createChannel(m.channel.server, "quackducks").then( c => {
a.sendMessage(c, "I'm alive!");
} );
if(m.content === "$$$"){
a.createRole(m.channel.server, {
name : "a_role!",
color : 0xFF0000,
hoist : true,
permissions : [
"manageRoles"
]
}).then( role => {
a.deleteRole(role).then(() => {
a.reply(m, "deleted!");
})
}).catch( e => {
console.log(e.stack)
});
}
});
a.on("userTypingStart", (user, chan) => {
console.log(user.username + " typing");