Add createRoleIfNotExists function

This commit is contained in:
hydrabolt
2015-10-27 16:42:32 +00:00
parent 4783b75b84
commit d08e802083
9 changed files with 2509 additions and 2454 deletions

View File

@@ -1,101 +1,87 @@
/* /*
this bot is a permissions bot and is currently working this bot is a permissions bot and is currently working
with the experimental additions. Some functions may with the experimental additions. Some functions may
change in the future. change in the future.
*/ */
var Discord = require("../"); var Discord = require("../");
// Get the email and password // Get the email and password
var AuthDetails = require("./auth.json"); var AuthDetails = require("./auth.json");
var bot = new Discord.Client(); var bot = new Discord.Client();
bot.on("ready", function () { bot.on("ready", function () {
console.log("Ready to begin! Serving in " + bot.channels.length + " channels"); console.log("Ready to begin! Serving in " + bot.channels.length + " channels");
}); });
bot.on("disconnected", function () { bot.on("disconnected", function () {
console.log("Disconnected!"); console.log("Disconnected!");
process.exit(1); //exit node.js with an error process.exit(1); //exit node.js with an error
}); });
bot.on("message", function (msg) { bot.on("message", function (msg) {
if (msg.content === "skype") { if (msg.content === "skype") {
//stop the user from speaking in the channel: //stop the user from speaking in the channel:
bot.overwritePermissions(msg.channel, msg.sender, { bot.overwritePermissions(msg.channel, msg.sender, {
sendMessages : false sendMessages: false
}); });
// send a barely funny message ;) // send a barely funny message ;)
bot.reply(msg, "how dare you mention that!"); bot.reply(msg, "how dare you mention that!");
} }
if (msg.content === "discord") { if (msg.content === "discord") {
// see if there is a permission called 'good people' in the server already // if the role doesn't exist, make it
var found = false; bot.createRoleIfNotExists(msg.channel.server, {
name: "good people",
for(var role of msg.channel.server.roles){ color: Discord.Colors.BLUE, // colour of blue
if(role.name === "good people"){ hoist: true // make a seperate category in the users list
found = role; }).then(addUserToList).catch(console.log);
break;
} function addUserToList(role, alreadyExists) {
} console.log(arguments);
bot.addMemberToRole(msg.sender, role);
// if the role doesn't exist, make it bot.reply(msg, "welcome to the good people! " + alreadyExists);
if(!found){
bot.createRole(msg.channel.server, { }
name : "good people",
color : Discord.Colors.BLUE, // colour of blue }
hoist : true // make a seperate category in the users list
}).then(addUserToList); if (msg.content === "remove me") {
}else{ // remove the user from the good people list, if it exists
addUserToList(role); var found = false;
}
for (var role of msg.channel.server.roles) {
function addUserToList(role){ if (role.name === "good people") {
found = role;
bot.addMemberToRole(msg.sender, role); break;
bot.reply(msg, "welcome to the good people!"); }
}
}
if (found) {
} // if the role exists
if( msg.content === "remove me" ){ if (msg.sender.hasRole(role)) {
// remove the user from the good people list, if it exists // remove the member from the role
var found = false; bot.removeMemberFromRole(msg.sender, role);
bot.reply(msg, "removed!")
for(var role of msg.channel.server.roles){ } else {
if(role.name === "good people"){ bot.reply(msg, "you're not in the role!");
found = role; }
break;
} } else {
} // role doesn't exist
bot.reply(msg, "the role doesn't even exist!");
if(found){ }
// if the role exists
}
if( msg.sender.hasRole(role) ){
// remove the member from the role });
bot.removeMemberFromRole(msg.sender, role);
bot.reply(msg, "removed!")
}else{
bot.reply(msg, "you're not in the role!");
}
}else{
// role doesn't exist
bot.reply(msg, "the role doesn't even exist!");
}
}
});
bot.login(AuthDetails.email, AuthDetails.password); bot.login(AuthDetails.email, AuthDetails.password);

View File

@@ -32,10 +32,10 @@ var Client = (function () {
_classCallCheck(this, Client); _classCallCheck(this, Client);
/* /*
When created, if a token is specified the Client will When created, if a token is specified the Client will
try connecting with it. If the token is incorrect, no try connecting with it. If the token is incorrect, no
further efforts will be made to connect. further efforts will be made to connect.
*/ */
this.options = options; this.options = options;
this.options.compress = options.compress; this.options.compress = options.compress;
@@ -56,13 +56,13 @@ var Client = (function () {
this.email = "abc"; this.email = "abc";
this.password = "abc"; this.password = "abc";
/* /*
State values: State values:
0 - idle 0 - idle
1 - logging in 1 - logging in
2 - logged in 2 - logged in
3 - ready 3 - ready
4 - disconnected 4 - disconnected
*/ */
this.userCache = []; this.userCache = [];
@@ -231,8 +231,8 @@ var Client = (function () {
// creating here does NOT give us the channels of the server // creating here does NOT give us the channels of the server
// so we must wait for the guild_create event. // so we must wait for the guild_create event.
self.serverCreateListener[res.body.id] = [resolve, callback]; self.serverCreateListener[res.body.id] = [resolve, callback];
/*var srv = self.addServer(res.body); /*var srv = self.addServer(res.body);
callback(null, srv); callback(null, srv);
resolve(srv);*/ resolve(srv);*/
} }
}); });
@@ -744,8 +744,54 @@ var Client = (function () {
return prom; return prom;
}; };
Client.prototype.createRoleIfNotExists = function createRoleIfNotExists(dest, data) {
var cb = arguments.length <= 2 || arguments[2] === undefined ? function (err, role) {} : arguments[2];
var self = this;
return new Promise(function (resolve, reject) {
var serverID = self.resolveServerID(dest);
var server = self.getServer("id", serverID);
var baseRole = new ServerPermissions({}, server);
for (var key in data) {
baseRole[key] = data[key];
}
for (var _iterator4 = server.roles, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
var _ref4;
if (_isArray4) {
if (_i4 >= _iterator4.length) break;
_ref4 = _iterator4[_i4++];
} else {
_i4 = _iterator4.next();
if (_i4.done) break;
_ref4 = _i4.value;
}
var role = _ref4;
if (baseRole.name == role.name && baseRole.packed == role.packed && baseRole.color == role.color) {
resolve(role);
cb(null, role);
return false;
}
}
self.createRole(dest, data).then(function (role) {
cb(null, role);
resolve(role);
})["catch"](function (e) {
cb(e);
reject(e);
});
});
};
Client.prototype.createRole = function createRole(dest, data) { Client.prototype.createRole = function createRole(dest, data) {
var cb = arguments.length <= 2 || arguments[2] === undefined ? function (err, perm) {} : arguments[2]; var cb = arguments.length <= 2 || arguments[2] === undefined ? function (err, role) {} : arguments[2];
var self = this; var self = this;
@@ -883,8 +929,6 @@ var Client = (function () {
acMember.removeRole(role); acMember.removeRole(role);
} }
console.log("remainder: ", acMember.rawRoles, "wanting", role.id);
request.patch("https://discordapp.com/api/guilds/" + serverId + "/members/" + memberId).set("authorization", self.token).send({ request.patch("https://discordapp.com/api/guilds/" + serverId + "/members/" + memberId).set("authorization", self.token).send({
roles: acMember.rawRoles roles: acMember.rawRoles
}).end(function (err) { }).end(function (err) {
@@ -1059,24 +1103,7 @@ var Client = (function () {
self.user = self.addUser(data.user); self.user = self.addUser(data.user);
for (var _iterator4 = data.guilds, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) { for (var _iterator5 = data.guilds, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
var _ref4;
if (_isArray4) {
if (_i4 >= _iterator4.length) break;
_ref4 = _iterator4[_i4++];
} else {
_i4 = _iterator4.next();
if (_i4.done) break;
_ref4 = _i4.value;
}
var _server = _ref4;
var server = self.addServer(_server);
}
for (var _iterator5 = data.private_channels, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
var _ref5; var _ref5;
if (_isArray5) { if (_isArray5) {
@@ -1088,7 +1115,24 @@ var Client = (function () {
_ref5 = _i5.value; _ref5 = _i5.value;
} }
var _pmc = _ref5; var _server = _ref5;
var server = self.addServer(_server);
}
for (var _iterator6 = data.private_channels, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {
var _ref6;
if (_isArray6) {
if (_i6 >= _iterator6.length) break;
_ref6 = _iterator6[_i6++];
} else {
_i6 = _iterator6.next();
if (_i6.done) break;
_ref6 = _i6.value;
}
var _pmc = _ref6;
var pmc = self.addPMChannel(_pmc); var pmc = self.addPMChannel(_pmc);
} }
@@ -1109,19 +1153,19 @@ var Client = (function () {
data.mentions = data.mentions || []; //for some reason this was not defined at some point? data.mentions = data.mentions || []; //for some reason this was not defined at some point?
var channel = self.getChannel("id", data.channel_id); var channel = self.getChannel("id", data.channel_id);
for (var _iterator6 = data.mentions, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) { for (var _iterator7 = data.mentions, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {
var _ref6; var _ref7;
if (_isArray6) { if (_isArray7) {
if (_i6 >= _iterator6.length) break; if (_i7 >= _iterator7.length) break;
_ref6 = _iterator6[_i6++]; _ref7 = _iterator7[_i7++];
} else { } else {
_i6 = _iterator6.next(); _i7 = _iterator7.next();
if (_i6.done) break; if (_i7.done) break;
_ref6 = _i6.value; _ref7 = _i7.value;
} }
var mention = _ref6; var mention = _ref7;
var user = self.addUser(mention); var user = self.addUser(mention);
if (channel.server) mentions.push(channel.server.getMember("id", user.id) || user);else mentions.push(user); if (channel.server) mentions.push(channel.server.getMember("id", user.id) || user);else mentions.push(user);
@@ -1168,19 +1212,19 @@ var Client = (function () {
data.mentions = data.mentions || []; data.mentions = data.mentions || [];
var mentions = []; var mentions = [];
for (var _iterator7 = data.mentions, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) { for (var _iterator8 = data.mentions, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) {
var _ref7; var _ref8;
if (_isArray7) { if (_isArray8) {
if (_i7 >= _iterator7.length) break; if (_i8 >= _iterator8.length) break;
_ref7 = _iterator7[_i7++]; _ref8 = _iterator8[_i8++];
} else { } else {
_i7 = _iterator7.next(); _i8 = _iterator8.next();
if (_i7.done) break; if (_i8.done) break;
_ref7 = _i7.value; _ref8 = _i8.value;
} }
var mention = _ref7; var mention = _ref8;
var user = self.addUser(mention); var user = self.addUser(mention);
if (channel.server) mentions.push(channel.server.getMember("id", user.id) || user);else mentions.push(user); if (channel.server) mentions.push(channel.server.getMember("id", user.id) || user);else mentions.push(user);
@@ -1243,14 +1287,14 @@ var Client = (function () {
if (!server) { if (!server) {
//if server doesn't already exist because duh //if server doesn't already exist because duh
server = self.addServer(data); server = self.addServer(data);
} /*else if(server.channels.length === 0){ } /*else if(server.channels.length === 0){
var srv = new Server(data, self); var srv = new Server(data, self);
for(channel of data.channels){ for(channel of data.channels){
srv.channels.push(new Channel(channel, data.id)); srv.channels.push(new Channel(channel, data.id));
} }
self.serverCache[self.serverCache.indexOf(server)] = srv; self.serverCache[self.serverCache.indexOf(server)] = srv;
}*/ }*/
if (self.serverCreateListener[data.id]) { if (self.serverCreateListener[data.id]) {
@@ -1537,38 +1581,38 @@ var Client = (function () {
server = new Server(data, this); server = new Server(data, this);
this.serverCache.push(server); this.serverCache.push(server);
if (data.channels) { if (data.channels) {
for (var _iterator8 = data.channels, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) { for (var _iterator9 = data.channels, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) {
var _ref8; var _ref9;
if (_isArray8) { if (_isArray9) {
if (_i8 >= _iterator8.length) break; if (_i9 >= _iterator9.length) break;
_ref8 = _iterator8[_i8++]; _ref9 = _iterator9[_i9++];
} else { } else {
_i8 = _iterator8.next(); _i9 = _iterator9.next();
if (_i8.done) break; if (_i9.done) break;
_ref8 = _i8.value; _ref9 = _i9.value;
} }
var channel = _ref8; var channel = _ref9;
server.channels.push(this.addChannel(channel, server.id)); server.channels.push(this.addChannel(channel, server.id));
} }
} }
} }
for (var _iterator9 = data.presences, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) { for (var _iterator10 = data.presences, _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) {
var _ref9; var _ref10;
if (_isArray9) { if (_isArray10) {
if (_i9 >= _iterator9.length) break; if (_i10 >= _iterator10.length) break;
_ref9 = _iterator9[_i9++]; _ref10 = _iterator10[_i10++];
} else { } else {
_i9 = _iterator9.next(); _i10 = _iterator10.next();
if (_i9.done) break; if (_i10.done) break;
_ref9 = _i9.value; _ref10 = _i10.value;
} }
var presence = _ref9; var presence = _ref10;
var user = self.getUser("id", presence.user.id); var user = self.getUser("id", presence.user.id);
user.status = presence.status; user.status = presence.status;
@@ -1581,31 +1625,7 @@ var Client = (function () {
//def getUser //def getUser
Client.prototype.getUser = function getUser(key, value) { Client.prototype.getUser = function getUser(key, value) {
for (var _iterator10 = this.userCache, _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) { for (var _iterator11 = this.userCache, _isArray11 = Array.isArray(_iterator11), _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _iterator11[Symbol.iterator]();;) {
var _ref10;
if (_isArray10) {
if (_i10 >= _iterator10.length) break;
_ref10 = _iterator10[_i10++];
} else {
_i10 = _iterator10.next();
if (_i10.done) break;
_ref10 = _i10.value;
}
var user = _ref10;
if (user[key] === value) {
return user;
}
}
return null;
};
//def getChannel
Client.prototype.getChannel = function getChannel(key, value) {
for (var _iterator11 = this.channelCache, _isArray11 = Array.isArray(_iterator11), _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _iterator11[Symbol.iterator]();;) {
var _ref11; var _ref11;
if (_isArray11) { if (_isArray11) {
@@ -1617,17 +1637,19 @@ var Client = (function () {
_ref11 = _i11.value; _ref11 = _i11.value;
} }
var channel = _ref11; var user = _ref11;
if (channel[key] === value) { if (user[key] === value) {
return channel; return user;
} }
} }
return this.getPMChannel(key, value); //might be a PM return null;
}; };
Client.prototype.getPMChannel = function getPMChannel(key, value) { //def getChannel
for (var _iterator12 = this.pmChannelCache, _isArray12 = Array.isArray(_iterator12), _i12 = 0, _iterator12 = _isArray12 ? _iterator12 : _iterator12[Symbol.iterator]();;) {
Client.prototype.getChannel = function getChannel(key, value) {
for (var _iterator12 = this.channelCache, _isArray12 = Array.isArray(_iterator12), _i12 = 0, _iterator12 = _isArray12 ? _iterator12 : _iterator12[Symbol.iterator]();;) {
var _ref12; var _ref12;
if (_isArray12) { if (_isArray12) {
@@ -1645,13 +1667,11 @@ var Client = (function () {
return channel; return channel;
} }
} }
return null; return this.getPMChannel(key, value); //might be a PM
}; };
//def getServer Client.prototype.getPMChannel = function getPMChannel(key, value) {
for (var _iterator13 = this.pmChannelCache, _isArray13 = Array.isArray(_iterator13), _i13 = 0, _iterator13 = _isArray13 ? _iterator13 : _iterator13[Symbol.iterator]();;) {
Client.prototype.getServer = function getServer(key, value) {
for (var _iterator13 = this.serverCache, _isArray13 = Array.isArray(_iterator13), _i13 = 0, _iterator13 = _isArray13 ? _iterator13 : _iterator13[Symbol.iterator]();;) {
var _ref13; var _ref13;
if (_isArray13) { if (_isArray13) {
@@ -1663,7 +1683,31 @@ var Client = (function () {
_ref13 = _i13.value; _ref13 = _i13.value;
} }
var server = _ref13; var channel = _ref13;
if (channel[key] === value) {
return channel;
}
}
return null;
};
//def getServer
Client.prototype.getServer = function getServer(key, value) {
for (var _iterator14 = this.serverCache, _isArray14 = Array.isArray(_iterator14), _i14 = 0, _iterator14 = _isArray14 ? _iterator14 : _iterator14[Symbol.iterator]();;) {
var _ref14;
if (_isArray14) {
if (_i14 >= _iterator14.length) break;
_ref14 = _iterator14[_i14++];
} else {
_i14 = _iterator14.next();
if (_i14.done) break;
_ref14 = _i14.value;
}
var server = _ref14;
if (server[key] === value) { if (server[key] === value) {
return server; return server;
@@ -1733,19 +1777,19 @@ var Client = (function () {
} else if (destination instanceof User) { } else if (destination instanceof User) {
//check if we have a PM //check if we have a PM
for (var _iterator14 = self.pmChannelCache, _isArray14 = Array.isArray(_iterator14), _i14 = 0, _iterator14 = _isArray14 ? _iterator14 : _iterator14[Symbol.iterator]();;) { for (var _iterator15 = self.pmChannelCache, _isArray15 = Array.isArray(_iterator15), _i15 = 0, _iterator15 = _isArray15 ? _iterator15 : _iterator15[Symbol.iterator]();;) {
var _ref14; var _ref15;
if (_isArray14) { if (_isArray15) {
if (_i14 >= _iterator14.length) break; if (_i15 >= _iterator15.length) break;
_ref14 = _iterator14[_i14++]; _ref15 = _iterator15[_i15++];
} else { } else {
_i14 = _iterator14.next(); _i15 = _iterator15.next();
if (_i14.done) break; if (_i15.done) break;
_ref14 = _i14.value; _ref15 = _i15.value;
} }
var pmc = _ref14; var pmc = _ref15;
if (pmc.user && pmc.user.equals(destination)) { if (pmc.user && pmc.user.equals(destination)) {
resolve(pmc.id); resolve(pmc.id);
@@ -1786,19 +1830,19 @@ var Client = (function () {
var channel = self.getChannel("id", data.channel_id); var channel = self.getChannel("id", data.channel_id);
for (var _iterator15 = data.mentions, _isArray15 = Array.isArray(_iterator15), _i15 = 0, _iterator15 = _isArray15 ? _iterator15 : _iterator15[Symbol.iterator]();;) { for (var _iterator16 = data.mentions, _isArray16 = Array.isArray(_iterator16), _i16 = 0, _iterator16 = _isArray16 ? _iterator16 : _iterator16[Symbol.iterator]();;) {
var _ref15; var _ref16;
if (_isArray15) { if (_isArray16) {
if (_i15 >= _iterator15.length) break; if (_i16 >= _iterator16.length) break;
_ref15 = _iterator15[_i15++]; _ref16 = _iterator16[_i16++];
} else { } else {
_i15 = _iterator15.next(); _i16 = _iterator16.next();
if (_i15.done) break; if (_i16.done) break;
_ref15 = _i15.value; _ref16 = _i16.value;
} }
var mention = _ref15; var mention = _ref16;
var user = self.addUser(mention); var user = self.addUser(mention);
if (channel.server) mentions.push(channel.server.getMember("id", user.id) || user);else mentions.push(user); if (channel.server) mentions.push(channel.server.getMember("id", user.id) || user);else mentions.push(user);
@@ -1954,19 +1998,19 @@ var Client = (function () {
id = null; id = null;
for (var _iterator16 = gameMap, _isArray16 = Array.isArray(_iterator16), _i16 = 0, _iterator16 = _isArray16 ? _iterator16 : _iterator16[Symbol.iterator]();;) { for (var _iterator17 = gameMap, _isArray17 = Array.isArray(_iterator17), _i17 = 0, _iterator17 = _isArray17 ? _iterator17 : _iterator17[Symbol.iterator]();;) {
var _ref16; var _ref17;
if (_isArray16) { if (_isArray17) {
if (_i16 >= _iterator16.length) break; if (_i17 >= _iterator17.length) break;
_ref16 = _iterator16[_i16++]; _ref17 = _iterator17[_i17++];
} else { } else {
_i16 = _iterator16.next(); _i17 = _iterator17.next();
if (_i16.done) break; if (_i17.done) break;
_ref16 = _i16.value; _ref17 = _i17.value;
} }
var game = _ref16; var game = _ref17;
if (game.name.trim().toUpperCase() === gid) { if (game.name.trim().toUpperCase() === gid) {
@@ -2032,19 +2076,19 @@ var Client = (function () {
get: function get() { get: function get() {
var msgs = []; var msgs = [];
for (var _iterator17 = this.channelCache, _isArray17 = Array.isArray(_iterator17), _i17 = 0, _iterator17 = _isArray17 ? _iterator17 : _iterator17[Symbol.iterator]();;) { for (var _iterator18 = this.channelCache, _isArray18 = Array.isArray(_iterator18), _i18 = 0, _iterator18 = _isArray18 ? _iterator18 : _iterator18[Symbol.iterator]();;) {
var _ref17; var _ref18;
if (_isArray17) { if (_isArray18) {
if (_i17 >= _iterator17.length) break; if (_i18 >= _iterator18.length) break;
_ref17 = _iterator17[_i17++]; _ref18 = _iterator18[_i18++];
} else { } else {
_i17 = _iterator17.next(); _i18 = _iterator18.next();
if (_i17.done) break; if (_i18.done) break;
_ref17 = _i17.value; _ref18 = _i18.value;
} }
var channel = _ref17; var channel = _ref18;
msgs = msgs.concat(channel.messages); msgs = msgs.concat(channel.messages);
} }

View File

@@ -27,7 +27,6 @@ var Member = (function (_User) {
Member.prototype.addRole = function addRole(role) { Member.prototype.addRole = function addRole(role) {
if (this.rawRoles.indexOf(role.id) == -1) { if (this.rawRoles.indexOf(role.id) == -1) {
console.log("wanted to add", role.id, this.rawRoles.indexOf(role.id));
this.rawRoles.push(role.id); this.rawRoles.push(role.id);
} }
}; };

View File

@@ -18,12 +18,7 @@ Discord.patchStrings = function () {
defineProperty("strike", "~~"); defineProperty("strike", "~~");
defineProperty("code", "`"); defineProperty("code", "`");
defineProperty("codeblock", "```"); defineProperty("codeblock", "```");
defineProperty("newline", "\n");
Object.defineProperty(String.prototype, "newline", {
get: function get() {
return this + "\n";
}
});
Object.defineProperty(String.prototype, "italic", { Object.defineProperty(String.prototype, "italic", {
get: function get() { get: function get() {

View File

@@ -30,8 +30,8 @@ var Message = (function () {
this.attachments = data.attachments; this.attachments = data.attachments;
} }
/*exports.Message.prototype.isPM = function() { /*exports.Message.prototype.isPM = function() {
return ( this.channel instanceof PMChannel ); return ( this.channel instanceof PMChannel );
}*/ }*/
Message.prototype.isMentioned = function isMentioned(user) { Message.prototype.isMentioned = function isMentioned(user) {

View File

@@ -23,11 +23,11 @@ var User = (function () {
}; };
User.prototype.toString = function toString() { User.prototype.toString = function toString() {
/* /*
if we embed a user in a String - like so: if we embed a user in a String - like so:
"Yo " + user + " what's up?" "Yo " + user + " what's up?"
It would generate something along the lines of: It would generate something along the lines of:
"Yo @hydrabolt what's up?" "Yo @hydrabolt what's up?"
*/ */
return this.mention(); return this.mention();
}; };

File diff suppressed because it is too large Load Diff

View File

@@ -1,98 +1,97 @@
var User = require("./user.js"); var User = require("./user.js");
var ServerPermissions = require("./ServerPermissions.js"); var ServerPermissions = require("./ServerPermissions.js");
var EvaluatedPermissions = require("./EvaluatedPermissions.js"); var EvaluatedPermissions = require("./EvaluatedPermissions.js");
class Member extends User{ class Member extends User{
constructor(user, server, roles){ constructor(user, server, roles){
super(user); // should work, we are basically creating a Member that has the same properties as user and a few more super(user); // should work, we are basically creating a Member that has the same properties as user and a few more
this.server = server; this.server = server;
this.rawRoles = roles; this.rawRoles = roles;
} }
get roles(){ get roles(){
var ufRoles = [ this.server.getRole(this.server.id) ]; var ufRoles = [ this.server.getRole(this.server.id) ];
for(var rawRole of this.rawRoles){ for(var rawRole of this.rawRoles){
ufRoles.push( this.server.getRole(rawRole) ); ufRoles.push( this.server.getRole(rawRole) );
} }
return ufRoles; return ufRoles;
} }
get evalPerms(){ get evalPerms(){
var basePerms = this.roles, //cache roles as it can be slightly expensive var basePerms = this.roles, //cache roles as it can be slightly expensive
basePerm = basePerms[0].packed; basePerm = basePerms[0].packed;
basePerms = basePerms || []; basePerms = basePerms || [];
for(var perm of basePerms){ for(var perm of basePerms){
basePerm = basePerm | perm.packed; basePerm = basePerm | perm.packed;
} }
return new ServerPermissions({ return new ServerPermissions({
permissions : basePerm permissions : basePerm
}); });
} }
removeRole(role){ removeRole(role){
this.rawRoles.splice(this.rawRoles.indexOf(role.id), 1); this.rawRoles.splice(this.rawRoles.indexOf(role.id), 1);
} }
addRole(role){ addRole(role){
if(this.rawRoles.indexOf(role.id) == -1){ if(this.rawRoles.indexOf(role.id) == -1){
console.log("wanted to add", role.id, this.rawRoles.indexOf(role.id)); this.rawRoles.push(role.id);
this.rawRoles.push(role.id); }
} }
}
hasRole(role){
hasRole(role){ for(var _role of this.roles){
for(var _role of this.roles){ if(role.id === _role.id)
if(role.id === _role.id) return true;
return true; }
} return false;
return false; }
}
permissionsIn(channel){
permissionsIn(channel){
if(channel.server.ownerID === this.id){
if(channel.server.ownerID === this.id){ return new EvaluatedPermissions(4294967295); //all perms
return new EvaluatedPermissions(4294967295); //all perms }
}
var affectingOverwrites = [];
var affectingOverwrites = []; var affectingMemberOverwrites = [];
var affectingMemberOverwrites = [];
for(var overwrite of channel.roles){
for(var overwrite of channel.roles){ if(overwrite.id === this.id && overwrite.type === "member"){
if(overwrite.id === this.id && overwrite.type === "member"){ affectingMemberOverwrites.push(overwrite);
affectingMemberOverwrites.push(overwrite); }else if( this.rawRoles.indexOf(overwrite.id) !== -1 ){
}else if( this.rawRoles.indexOf(overwrite.id) !== -1 ){ affectingOverwrites.push(overwrite);
affectingOverwrites.push(overwrite); }
} }
}
if(affectingOverwrites.length === 0 && affectingMemberOverwrites.length === 0){
if(affectingOverwrites.length === 0 && affectingMemberOverwrites.length === 0){ return new EvaluatedPermissions(this.evalPerms.packed);
return new EvaluatedPermissions(this.evalPerms.packed); }
}
var finalPacked = (affectingOverwrites.length !== 0 ? affectingOverwrites[0].packed : affectingMemberOverwrites[0].packed);
var finalPacked = (affectingOverwrites.length !== 0 ? affectingOverwrites[0].packed : affectingMemberOverwrites[0].packed);
for(var overwrite of affectingOverwrites){
for(var overwrite of affectingOverwrites){ finalPacked = finalPacked & ~overwrite.deny;
finalPacked = finalPacked & ~overwrite.deny; finalPacked = finalPacked | overwrite.allow;
finalPacked = finalPacked | overwrite.allow; }
}
for(var overwrite of affectingMemberOverwrites){
for(var overwrite of affectingMemberOverwrites){ finalPacked = finalPacked & ~overwrite.deny;
finalPacked = finalPacked & ~overwrite.deny; finalPacked = finalPacked | overwrite.allow;
finalPacked = finalPacked | overwrite.allow; }
}
return new EvaluatedPermissions(finalPacked);
return new EvaluatedPermissions(finalPacked);
}
}
}
}
module.exports = Member; module.exports = Member;

View File

@@ -1,128 +1,128 @@
class ServerPermissions { class ServerPermissions {
constructor(data, server) { constructor(data, server) {
var self = this; var self = this;
function getBit(x) { function getBit(x) {
return ((self.packed >>> x) & 1) === 1; return ((self.packed >>> x) & 1) === 1;
} }
this.managed = data.managed || false; this.managed = data.managed || false;
this.position = data.position || 1; this.position = data.position || 1;
this.hoist = data.hoist || false; this.hoist = data.hoist || false;
this.color = data.color || 0; this.color = data.color || 0;
this.packed = data.permissions || 36953089; this.packed = data.permissions || 36953089;
this.name = data.name || "new role"; this.name = data.name || "new role";
this.id = data.id || null; this.id = data.id || null;
this.server = server; this.server = server;
} }
serialise() { serialise() {
return { return {
createInstantInvite: this.createInstantInvite, createInstantInvite: this.createInstantInvite,
manageRoles: this.manageRoles, manageRoles: this.manageRoles,
manageChannels: this.manageChannels, manageChannels: this.manageChannels,
readMessages: this.readMessages, readMessages: this.readMessages,
sendMessages: this.sendMessage, sendMessages: this.sendMessage,
sendTTSMessages: this.sendTTSMessages, sendTTSMessages: this.sendTTSMessages,
manageMessages: this.manageMessages, manageMessages: this.manageMessages,
embedLinks: this.embedLinks, embedLinks: this.embedLinks,
attachFiles: this.attachFiles, attachFiles: this.attachFiles,
readMessageHistory: this.readMessageHistory, readMessageHistory: this.readMessageHistory,
mentionEveryone: this.mentionEveryone, mentionEveryone: this.mentionEveryone,
voiceConnect: this.voiceConnect, voiceConnect: this.voiceConnect,
voiceSpeak: this.voiceSpeak, voiceSpeak: this.voiceSpeak,
voiceMuteMembers: this.voiceMuteMembers, voiceMuteMembers: this.voiceMuteMembers,
voiceDeafenMembers: this.voiceDeafenMembers, voiceDeafenMembers: this.voiceDeafenMembers,
voiceMoveMember: this.voiceMoveMembers, voiceMoveMember: this.voiceMoveMembers,
voiceUseVoiceActivation: this.voiceUseVoiceActivation voiceUseVoiceActivation: this.voiceUseVoiceActivation
} }
} }
get createInstantInvite() { return this.getBit(0); } get createInstantInvite() { return this.getBit(0); }
set createInstantInvite(val) { this.setBit(0, val); } set createInstantInvite(val) { this.setBit(0, val); }
get banMembers() { return this.getBit(1); } get banMembers() { return this.getBit(1); }
set banMembers(val) { this.setBit(1, val); } set banMembers(val) { this.setBit(1, val); }
get kickMembers() { return this.getBit(2); } get kickMembers() { return this.getBit(2); }
set kickMembers(val) { this.setBit(2, val); } set kickMembers(val) { this.setBit(2, val); }
get manageRoles() { return this.getBit(3); } get manageRoles() { return this.getBit(3); }
set manageRoles(val) { this.setBit(3, val); } set manageRoles(val) { this.setBit(3, val); }
get manageChannels() { return this.getBit(4); } get manageChannels() { return this.getBit(4); }
set manageChannels(val) { this.setBit(4, val); } set manageChannels(val) { this.setBit(4, val); }
get manageServer() { return this.getBit(5); } get manageServer() { return this.getBit(5); }
set manageServer(val) { this.setBit(5, val); } set manageServer(val) { this.setBit(5, val); }
get readMessages() { return this.getBit(10); } get readMessages() { return this.getBit(10); }
set readMessages(val) { this.setBit(10, val); } set readMessages(val) { this.setBit(10, val); }
get sendMessages() { return this.getBit(11); } get sendMessages() { return this.getBit(11); }
set sendMessages(val) { this.setBit(11, val); } set sendMessages(val) { this.setBit(11, val); }
get sendTTSMessages() { return this.getBit(12); } get sendTTSMessages() { return this.getBit(12); }
set sendTTSMessages(val) { this.setBit(12, val); } set sendTTSMessages(val) { this.setBit(12, val); }
get manageMessages() { return this.getBit(13); } get manageMessages() { return this.getBit(13); }
set manageMessages(val) { this.setBit(13, val); } set manageMessages(val) { this.setBit(13, val); }
get embedLinks() { return this.getBit(14); } get embedLinks() { return this.getBit(14); }
set embedLinks(val) { this.setBit(14, val); } set embedLinks(val) { this.setBit(14, val); }
get attachFiles() { return this.getBit(15); } get attachFiles() { return this.getBit(15); }
set attachFiles(val) { this.setBit(15, val); } set attachFiles(val) { this.setBit(15, val); }
get readMessageHistory() { return this.getBit(16); } get readMessageHistory() { return this.getBit(16); }
set readMessageHistory(val) { this.setBit(16, val); } set readMessageHistory(val) { this.setBit(16, val); }
get mentionEveryone() { return this.getBit(17); } get mentionEveryone() { return this.getBit(17); }
set mentionEveryone(val) { this.setBit(17, val); } set mentionEveryone(val) { this.setBit(17, val); }
get voiceConnect() { return this.getBit(20); } get voiceConnect() { return this.getBit(20); }
set voiceConnect(val) { this.setBit(20, val); } set voiceConnect(val) { this.setBit(20, val); }
get voiceSpeak() { return this.getBit(21); } get voiceSpeak() { return this.getBit(21); }
set voiceSpeak(val) { this.setBit(21, val); } set voiceSpeak(val) { this.setBit(21, val); }
get voiceMuteMembers() { return this.getBit(22); } get voiceMuteMembers() { return this.getBit(22); }
set voiceMuteMembers(val) { this.setBit(22, val); } set voiceMuteMembers(val) { this.setBit(22, val); }
get voiceDeafenMembers() { return this.getBit(23); } get voiceDeafenMembers() { return this.getBit(23); }
set voiceDeafenMembers(val) { this.setBit(23, val); } set voiceDeafenMembers(val) { this.setBit(23, val); }
get voiceMoveMembers() { return this.getBit(24); } get voiceMoveMembers() { return this.getBit(24); }
set voiceMoveMembers(val) { this.setBit(24, val); } set voiceMoveMembers(val) { this.setBit(24, val); }
get voiceUseVoiceActivation() { return this.getBit(25); } get voiceUseVoiceActivation() { return this.getBit(25); }
set voiceUseVoiceActivation(val) { this.setBit(25, val); } set voiceUseVoiceActivation(val) { this.setBit(25, val); }
getBit(x) { getBit(x) {
if (((this.packed >>> 3) & 1) === 1) { if (((this.packed >>> 3) & 1) === 1) {
return true; return true;
} }
return ((this.packed >>> x) & 1) === 1; return ((this.packed >>> x) & 1) === 1;
} }
setBit(location, value) { setBit(location, value) {
if (value) { if (value) {
// allow that permission // allow that permission
this.packed |= (1 << location); this.packed |= (1 << location);
} else { } else {
// not allowed // not allowed
this.packed &= (1 << location); this.packed &= (1 << location);
} }
} }
toString() { toString() {
return this.name; return this.name;
} }
} }
module.exports = ServerPermissions; module.exports = ServerPermissions;