mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-18 04:23:31 +01:00
A pretty crappy example and a load of bug fixes
Much more stable permission management
This commit is contained in:
101
examples/adminbot.js
Normal file
101
examples/adminbot.js
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
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!");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
bot.login("riftes@outlook.com", "bananaman");
|
||||||
@@ -814,6 +814,11 @@ var Client = (function () {
|
|||||||
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) {
|
||||||
|
// user already has role
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
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.concat(role.id)
|
roles: acMember.rawRoles.concat(role.id)
|
||||||
}).end(function (err) {
|
}).end(function (err) {
|
||||||
@@ -845,12 +850,12 @@ var Client = (function () {
|
|||||||
var acServer = self.getServer("id", serverId);
|
var acServer = self.getServer("id", serverId);
|
||||||
var acMember = acServer.getMember("id", memberId);
|
var acMember = acServer.getMember("id", memberId);
|
||||||
|
|
||||||
for (var safeRole in acMember.rawRoles) {
|
if (~acMember.rawRoles.indexOf(role.id)) {
|
||||||
if (acMember.rawRoles[safeRole] == role.id) {
|
acMember.removeRole(role);
|
||||||
acMember.rawRoles.splice(safeRole, 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
|||||||
125
lib/Member.js
125
lib/Member.js
@@ -21,22 +21,19 @@ var Member = (function (_User) {
|
|||||||
this.rawRoles = roles;
|
this.rawRoles = roles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Member.prototype.removeRole = function removeRole(role) {
|
||||||
|
this.rawRoles.splice(this.rawRoles.indexOf(role.id), 1);
|
||||||
|
};
|
||||||
|
|
||||||
Member.prototype.addRole = function addRole(role) {
|
Member.prototype.addRole = function addRole(role) {
|
||||||
if (! ~this.rawRoles.indexOf(role)) {
|
if (this.rawRoles.indexOf(role.id) == -1) {
|
||||||
this.rawRoles.push(role);
|
console.log("wanted to add", role.id, this.rawRoles.indexOf(role.id));
|
||||||
|
this.rawRoles.push(role.id);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Member.prototype.permissionsIn = function permissionsIn(channel) {
|
Member.prototype.hasRole = function hasRole(role) {
|
||||||
|
for (var _iterator = this.roles, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
|
||||||
if (channel.server.ownerID === this.id) {
|
|
||||||
return new EvaluatedPermissions(4294967295); //all perms
|
|
||||||
}
|
|
||||||
|
|
||||||
var affectingOverwrites = [];
|
|
||||||
var affectingMemberOverwrites = [];
|
|
||||||
|
|
||||||
for (var _iterator = channel.roles, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
|
|
||||||
var _ref;
|
var _ref;
|
||||||
|
|
||||||
if (_isArray) {
|
if (_isArray) {
|
||||||
@@ -48,7 +45,35 @@ var Member = (function (_User) {
|
|||||||
_ref = _i.value;
|
_ref = _i.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
var overwrite = _ref;
|
var _role = _ref;
|
||||||
|
|
||||||
|
if (role.id === _role.id) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
Member.prototype.permissionsIn = function permissionsIn(channel) {
|
||||||
|
|
||||||
|
if (channel.server.ownerID === this.id) {
|
||||||
|
return new EvaluatedPermissions(4294967295); //all perms
|
||||||
|
}
|
||||||
|
|
||||||
|
var affectingOverwrites = [];
|
||||||
|
var affectingMemberOverwrites = [];
|
||||||
|
|
||||||
|
for (var _iterator2 = channel.roles, _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 overwrite = _ref2;
|
||||||
|
|
||||||
if (overwrite.id === this.id && overwrite.type === "member") {
|
if (overwrite.id === this.id && overwrite.type === "member") {
|
||||||
affectingMemberOverwrites.push(overwrite);
|
affectingMemberOverwrites.push(overwrite);
|
||||||
@@ -63,25 +88,7 @@ var Member = (function (_User) {
|
|||||||
|
|
||||||
var finalPacked = affectingOverwrites.length !== 0 ? affectingOverwrites[0].packed : affectingMemberOverwrites[0].packed;
|
var finalPacked = affectingOverwrites.length !== 0 ? affectingOverwrites[0].packed : affectingMemberOverwrites[0].packed;
|
||||||
|
|
||||||
for (var _iterator2 = affectingOverwrites, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
|
for (var _iterator3 = affectingOverwrites, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[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 overwrite = _ref2;
|
|
||||||
|
|
||||||
finalPacked = finalPacked & ~overwrite.deny;
|
|
||||||
finalPacked = finalPacked | overwrite.allow;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var _iterator3 = affectingMemberOverwrites, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
|
|
||||||
var _ref3;
|
var _ref3;
|
||||||
|
|
||||||
if (_isArray3) {
|
if (_isArray3) {
|
||||||
@@ -99,6 +106,24 @@ var Member = (function (_User) {
|
|||||||
finalPacked = finalPacked | overwrite.allow;
|
finalPacked = finalPacked | overwrite.allow;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (var _iterator4 = affectingMemberOverwrites, _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 overwrite = _ref4;
|
||||||
|
|
||||||
|
finalPacked = finalPacked & ~overwrite.deny;
|
||||||
|
finalPacked = finalPacked | overwrite.allow;
|
||||||
|
}
|
||||||
|
|
||||||
return new EvaluatedPermissions(finalPacked);
|
return new EvaluatedPermissions(finalPacked);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -108,19 +133,19 @@ var Member = (function (_User) {
|
|||||||
|
|
||||||
var ufRoles = [this.server.getRole(this.server.id)];
|
var ufRoles = [this.server.getRole(this.server.id)];
|
||||||
|
|
||||||
for (var _iterator4 = this.rawRoles, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
|
for (var _iterator5 = this.rawRoles, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
|
||||||
var _ref4;
|
var _ref5;
|
||||||
|
|
||||||
if (_isArray4) {
|
if (_isArray5) {
|
||||||
if (_i4 >= _iterator4.length) break;
|
if (_i5 >= _iterator5.length) break;
|
||||||
_ref4 = _iterator4[_i4++];
|
_ref5 = _iterator5[_i5++];
|
||||||
} else {
|
} else {
|
||||||
_i4 = _iterator4.next();
|
_i5 = _iterator5.next();
|
||||||
if (_i4.done) break;
|
if (_i5.done) break;
|
||||||
_ref4 = _i4.value;
|
_ref5 = _i5.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
var rawRole = _ref4;
|
var rawRole = _ref5;
|
||||||
|
|
||||||
ufRoles.push(this.server.getRole(rawRole));
|
ufRoles.push(this.server.getRole(rawRole));
|
||||||
}
|
}
|
||||||
@@ -135,19 +160,19 @@ var Member = (function (_User) {
|
|||||||
basePerm = basePerms[0].packed;
|
basePerm = basePerms[0].packed;
|
||||||
|
|
||||||
basePerms = basePerms || [];
|
basePerms = basePerms || [];
|
||||||
for (var _iterator5 = basePerms, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
|
for (var _iterator6 = basePerms, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {
|
||||||
var _ref5;
|
var _ref6;
|
||||||
|
|
||||||
if (_isArray5) {
|
if (_isArray6) {
|
||||||
if (_i5 >= _iterator5.length) break;
|
if (_i6 >= _iterator6.length) break;
|
||||||
_ref5 = _iterator5[_i5++];
|
_ref6 = _iterator6[_i6++];
|
||||||
} else {
|
} else {
|
||||||
_i5 = _iterator5.next();
|
_i6 = _iterator6.next();
|
||||||
if (_i5.done) break;
|
if (_i6.done) break;
|
||||||
_ref5 = _i5.value;
|
_ref6 = _i6.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
var perm = _ref5;
|
var perm = _ref6;
|
||||||
|
|
||||||
basePerm = basePerm | perm.packed;
|
basePerm = basePerm | perm.packed;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -882,6 +882,11 @@ class Client {
|
|||||||
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){
|
||||||
|
// user already has role
|
||||||
|
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)
|
||||||
@@ -916,12 +921,12 @@ class Client {
|
|||||||
var acServer = self.getServer("id", serverId);
|
var acServer = self.getServer("id", serverId);
|
||||||
var acMember = acServer.getMember("id", memberId);
|
var acMember = acServer.getMember("id", memberId);
|
||||||
|
|
||||||
for(var safeRole in acMember.rawRoles){
|
if(~acMember.rawRoles.indexOf(role.id)){
|
||||||
if(acMember.rawRoles[safeRole] == role.id){
|
acMember.removeRole(role);
|
||||||
acMember.rawRoles.splice(safeRole, 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("remainder: ",acMember.rawRoles, "wanting", role.id);
|
||||||
|
|
||||||
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)
|
||||||
|
|||||||
@@ -36,12 +36,25 @@ class Member extends User{
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
removeRole(role){
|
||||||
|
this.rawRoles.splice(this.rawRoles.indexOf(role.id), 1);
|
||||||
|
}
|
||||||
|
|
||||||
addRole(role){
|
addRole(role){
|
||||||
if(!~this.rawRoles.indexOf(role)){
|
if(this.rawRoles.indexOf(role.id) == -1){
|
||||||
this.rawRoles.push(role);
|
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){
|
permissionsIn(channel){
|
||||||
|
|
||||||
if(channel.server.ownerID === this.id){
|
if(channel.server.ownerID === this.id){
|
||||||
|
|||||||
Reference in New Issue
Block a user