mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-12 17:43:30 +01:00
Add createRoleIfNotExists function
This commit is contained in:
3960
src/Client.js
3960
src/Client.js
File diff suppressed because it is too large
Load Diff
193
src/Member.js
193
src/Member.js
@@ -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;
|
||||
@@ -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;
|
||||
Reference in New Issue
Block a user