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

View File

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

View File

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

View File

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

View File

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

View File

@@ -23,11 +23,11 @@ var User = (function () {
};
User.prototype.toString = function toString() {
/*
if we embed a user in a String - like so:
"Yo " + user + " what's up?"
It would generate something along the lines of:
"Yo @hydrabolt what's up?"
/*
if we embed a user in a String - like so:
"Yo " + user + " what's up?"
It would generate something along the lines of:
"Yo @hydrabolt what's up?"
*/
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 ServerPermissions = require("./ServerPermissions.js");
var EvaluatedPermissions = require("./EvaluatedPermissions.js");
class Member extends User{
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
this.server = server;
this.rawRoles = roles;
}
get roles(){
var ufRoles = [ this.server.getRole(this.server.id) ];
for(var rawRole of this.rawRoles){
ufRoles.push( this.server.getRole(rawRole) );
}
return ufRoles;
}
get evalPerms(){
var basePerms = this.roles, //cache roles as it can be slightly expensive
basePerm = basePerms[0].packed;
basePerms = basePerms || [];
for(var perm of basePerms){
basePerm = basePerm | perm.packed;
}
return new ServerPermissions({
permissions : basePerm
});
}
removeRole(role){
this.rawRoles.splice(this.rawRoles.indexOf(role.id), 1);
}
addRole(role){
if(this.rawRoles.indexOf(role.id) == -1){
console.log("wanted to add", role.id, this.rawRoles.indexOf(role.id));
this.rawRoles.push(role.id);
}
}
hasRole(role){
for(var _role of this.roles){
if(role.id === _role.id)
return true;
}
return false;
}
permissionsIn(channel){
if(channel.server.ownerID === this.id){
return new EvaluatedPermissions(4294967295); //all perms
}
var affectingOverwrites = [];
var affectingMemberOverwrites = [];
for(var overwrite of channel.roles){
if(overwrite.id === this.id && overwrite.type === "member"){
affectingMemberOverwrites.push(overwrite);
}else if( this.rawRoles.indexOf(overwrite.id) !== -1 ){
affectingOverwrites.push(overwrite);
}
}
if(affectingOverwrites.length === 0 && affectingMemberOverwrites.length === 0){
return new EvaluatedPermissions(this.evalPerms.packed);
}
var finalPacked = (affectingOverwrites.length !== 0 ? affectingOverwrites[0].packed : affectingMemberOverwrites[0].packed);
for(var overwrite of affectingOverwrites){
finalPacked = finalPacked & ~overwrite.deny;
finalPacked = finalPacked | overwrite.allow;
}
for(var overwrite of affectingMemberOverwrites){
finalPacked = finalPacked & ~overwrite.deny;
finalPacked = finalPacked | overwrite.allow;
}
return new EvaluatedPermissions(finalPacked);
}
}
var User = require("./user.js");
var ServerPermissions = require("./ServerPermissions.js");
var EvaluatedPermissions = require("./EvaluatedPermissions.js");
class Member extends User{
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
this.server = server;
this.rawRoles = roles;
}
get roles(){
var ufRoles = [ this.server.getRole(this.server.id) ];
for(var rawRole of this.rawRoles){
ufRoles.push( this.server.getRole(rawRole) );
}
return ufRoles;
}
get evalPerms(){
var basePerms = this.roles, //cache roles as it can be slightly expensive
basePerm = basePerms[0].packed;
basePerms = basePerms || [];
for(var perm of basePerms){
basePerm = basePerm | perm.packed;
}
return new ServerPermissions({
permissions : basePerm
});
}
removeRole(role){
this.rawRoles.splice(this.rawRoles.indexOf(role.id), 1);
}
addRole(role){
if(this.rawRoles.indexOf(role.id) == -1){
this.rawRoles.push(role.id);
}
}
hasRole(role){
for(var _role of this.roles){
if(role.id === _role.id)
return true;
}
return false;
}
permissionsIn(channel){
if(channel.server.ownerID === this.id){
return new EvaluatedPermissions(4294967295); //all perms
}
var affectingOverwrites = [];
var affectingMemberOverwrites = [];
for(var overwrite of channel.roles){
if(overwrite.id === this.id && overwrite.type === "member"){
affectingMemberOverwrites.push(overwrite);
}else if( this.rawRoles.indexOf(overwrite.id) !== -1 ){
affectingOverwrites.push(overwrite);
}
}
if(affectingOverwrites.length === 0 && affectingMemberOverwrites.length === 0){
return new EvaluatedPermissions(this.evalPerms.packed);
}
var finalPacked = (affectingOverwrites.length !== 0 ? affectingOverwrites[0].packed : affectingMemberOverwrites[0].packed);
for(var overwrite of affectingOverwrites){
finalPacked = finalPacked & ~overwrite.deny;
finalPacked = finalPacked | overwrite.allow;
}
for(var overwrite of affectingMemberOverwrites){
finalPacked = finalPacked & ~overwrite.deny;
finalPacked = finalPacked | overwrite.allow;
}
return new EvaluatedPermissions(finalPacked);
}
}
module.exports = Member;

View File

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