diff --git a/lib/Client.js b/lib/Client.js index 1958e12cc..291d695f3 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -802,15 +802,17 @@ var Client = (function (_EventEmitter) { if (data.color) data.color = Color.toDec(data.color); - self.guildRoleCreateIgnoreList[res.body.id] = function () { - self.updateRole(perm, data).then(function (perm) { - cb(null, perm); - resolve(perm); - })["catch"](function (err) { - cb(err); - reject(err); - }); - }; + self.guildRoleCreateIgnoreList[res.body.id] = true; + + server.addRole(res.body); + + self.updateRole(perm, data).then(function (perm) { + cb(null, perm); + resolve(perm); + })["catch"](function (err) { + cb(err); + reject(err); + }); } }); }); @@ -825,6 +827,11 @@ var Client = (function (_EventEmitter) { var server = role.server.id; + var tempRole = role; + for (var key in data) { + tempRole[key] = data[key]; + } + if (isNaN(Color.toDec(data.color))) { var err = new Error("Invalid Color"); reject(err); @@ -833,10 +840,10 @@ var Client = (function (_EventEmitter) { } request.patch(Endpoints.SERVERS + "/" + server + "/roles/" + role.id).set("authorization", self.token).send({ - color: Color.toDec(data.color) || role.color, - hoist: data.hoist || role.hoist, - name: data.name || role.name, - permissions: data.packed || role.packed + color: tempRole.color, + hoist: tempRole.hoist, + name: tempRole.name, + permissions: tempRole.packed }).end(function (err, res) { if (err) { cb(err); @@ -1302,15 +1309,21 @@ var Client = (function (_EventEmitter) { }*/ - if (self.serverCreateListener[data.id]) { - var cbs = self.serverCreateListener[data.id]; - cbs[0](server); //promise then callback - cbs[1](null, server); //legacy callback - self.serverCreateListener[data.id] = null; + if (data.owner_id === self.user.id) { + var keepCheck = setInterval(function () { + if (self.serverCreateListener[data.id]) { + var cbs = self.serverCreateListener[data.id]; + cbs[0](server); //promise then callback + cbs[1](null, server); //legacy callback + self.serverCreateListener[data.id] = null; + self.emit("serverCreate", server); + clearInterval(keepCheck); + } + }, 50); + } else { + self.emit("serverCreate", server); } - self.emit("serverCreate", server); - break; case "CHANNEL_CREATE": @@ -1469,8 +1482,6 @@ var Client = (function (_EventEmitter) { var role = data.role; if (self.guildRoleCreateIgnoreList[data.role.id]) { - server.addRole(role); - self.guildRoleCreateIgnoreList[data.role.id](); self.guildRoleCreateIgnoreList[data.role.id] = null; break; } diff --git a/lib/ServerPermissions.js b/lib/ServerPermissions.js index 79770f8e2..f67d94560 100644 --- a/lib/ServerPermissions.js +++ b/lib/ServerPermissions.js @@ -30,7 +30,7 @@ var ServerPermissions = (function () { manageRoles: this.manageRoles, manageChannels: this.manageChannels, readMessages: this.readMessages, - sendMessages: this.sendMessage, + sendMessages: this.sendMessages, sendTTSMessages: this.sendTTSMessages, manageMessages: this.manageMessages, embedLinks: this.embedLinks, @@ -64,7 +64,7 @@ var ServerPermissions = (function () { this.packed |= 1 << location; } else { // not allowed - this.packed &= 1 << location; + this.packed &= ~(1 << location); } }; diff --git a/src/Client.js b/src/Client.js index 3bb7d6bbe..37b03e9c6 100644 --- a/src/Client.js +++ b/src/Client.js @@ -844,18 +844,19 @@ class Client extends EventEmitter { if(data.color) data.color = Color.toDec(data.color); - self.guildRoleCreateIgnoreList[res.body.id] = function () { - self.updateRole(perm, data) - .then((perm) => { - cb(null, perm); - resolve(perm); - }) - .catch((err) => { - cb(err); - reject(err); - }); - - } + self.guildRoleCreateIgnoreList[res.body.id] = true; + + server.addRole(res.body); + + self.updateRole(perm, data) + .then((perm) => { + cb(null, perm); + resolve(perm); + }) + .catch((err) => { + cb(err); + reject(err); + }); } @@ -873,6 +874,11 @@ class Client extends EventEmitter { return new Promise(function (resolve, reject) { var server = role.server.id; + + var tempRole = role; + for(var key in data){ + tempRole[key] = data[key]; + } if(isNaN(Color.toDec(data.color))){ var err = new Error("Invalid Color"); @@ -885,10 +891,10 @@ class Client extends EventEmitter { .patch(`${Endpoints.SERVERS}/${server}/roles/${role.id}`) .set("authorization", self.token) .send({ - color: Color.toDec(data.color) || role.color, - hoist: data.hoist || role.hoist, - name: data.name || role.name, - permissions: data.packed || role.packed + color: tempRole.color, + hoist: tempRole.hoist, + name: tempRole.name, + permissions: tempRole.packed }) .end(function (err, res) { if (err) { @@ -1331,15 +1337,21 @@ class Client extends EventEmitter { }*/ - if (self.serverCreateListener[data.id]) { - var cbs = self.serverCreateListener[data.id]; - cbs[0](server); //promise then callback - cbs[1](null, server); //legacy callback - self.serverCreateListener[data.id] = null; + if(data.owner_id === self.user.id){ + var keepCheck = setInterval(() => { + if (self.serverCreateListener[data.id]) { + var cbs = self.serverCreateListener[data.id]; + cbs[0](server); //promise then callback + cbs[1](null, server); //legacy callback + self.serverCreateListener[data.id] = null; + self.emit("serverCreate", server); + clearInterval(keepCheck); + } + }, 50); + }else{ + self.emit("serverCreate", server); } - self.emit("serverCreate", server); - break; case "CHANNEL_CREATE": @@ -1500,8 +1512,6 @@ class Client extends EventEmitter { var role = data.role; if (self.guildRoleCreateIgnoreList[data.role.id]) { - server.addRole(role); - self.guildRoleCreateIgnoreList[data.role.id](); self.guildRoleCreateIgnoreList[data.role.id] = null; break; } diff --git a/src/ServerPermissions.js b/src/ServerPermissions.js index c4e799a11..5152b5ffd 100644 --- a/src/ServerPermissions.js +++ b/src/ServerPermissions.js @@ -24,7 +24,7 @@ class ServerPermissions { manageRoles: this.manageRoles, manageChannels: this.manageChannels, readMessages: this.readMessages, - sendMessages: this.sendMessage, + sendMessages: this.sendMessages, sendTTSMessages: this.sendTTSMessages, manageMessages: this.manageMessages, embedLinks: this.embedLinks, @@ -119,7 +119,7 @@ class ServerPermissions { } else { // not allowed - this.packed &= (1 << location); + this.packed &= ~(1 << location); } } diff --git a/test/bot.js b/test/bot.js index 6f38eb50b..d869d9008 100644 --- a/test/bot.js +++ b/test/bot.js @@ -1,134 +1,132 @@ +/* global process */ /* this file should be used for travis builds only + or testing local builds */ var Discord = require("../"); var mybot = new Discord.Client(); -var server, channel, message, sentMessage = false; +var server, channel, message, role, sentMessage = false, actions = [], current = -1; -function init(){ +function next() { + current++; + if (current !== 0) { + console.log("Success on test", current, actions[current]); + } + if (current === actions.length) + done(); + else + actions[current].apply(this, arguments); +} + +function init() { console.log("preparing..."); } -mybot.once("ready", function(){ - console.log("ready! beginning tests"); - success1(); +actions.push(() => { + mybot.createServer("test-server", "london").then(next).catch(error); }); -function success1(){ //make server - mybot.createServer("test-server", "london").then(success2).catch(error); -} - -function success2(_server){ //make channel - console.log("test 1 successful"); +actions.push((_server) => { server = _server; - mybot.createChannel(server, "test-channel", "text").then(success3).catch(error); -} + mybot.createChannel(server, "test-channel", "text").then(next).catch(error); +}); -function success3(_channel){ //send message - console.log("test 2 successful"); +actions.push((_channel) => { channel = _channel; - mybot.sendMessage(channel, [mybot.user.avatarURL, "an", "array", "of", "messages"]).then(success4).catch(error); -} + mybot.sendMessage(channel, [mybot.user.avatarURL, "an", "array", "of", "messages"]).then(next).catch(error); +}); -function success4(_message){ //delete message - console.log("test 3 successful"); - message = _message; - mybot.deleteMessage(message).then(success5).catch(error); -} +actions.push((message) => { + mybot.deleteMessage(message).then(next).catch(error); +}); -function success5(){ //send ping - console.log("test 4 successful"); - mybot.sendMessage(channel, "ping").then(function(msg){ - message = msg; - }).catch(error); - setTimeout(checkError, 30 * 1000); -} +actions.push(() => { + mybot.createRole(server, { + name: "Custom Role", + color: 0xff0000, + sendMessages: false + }).then(next).catch(error); +}); -function success7(){ - console.log("test 6 successful"); - mybot.deleteChannel(channel).then(success8).catch(error); -} - -function success8(){ - console.log("test 7 successful"); - mybot.createInvite(server).then(success9).catch(error); -} - -function success9(invite){ - console.log("test 8 successful"); - if(invite.code){ - success10(); - }else{ - error("reference error"); +actions.push((_role) => { + role = _role; + if (role.name === "Custom Role" && !role.sendMessages) { + next(); + } else { + error(new Error("bad role; " + role)); } -} +}); -function success10(){ - console.log("test 9 succesful"); - mybot.leaveServer(server).then(success11).catch(error); -} +actions.push(() => { + mybot.deleteRole(role).then(next).catch(error); +}); -function success11(){ - console.log("test 10 succesful"); - mybot.joinServer(process.env["ds_invite"]).then(success12).catch(error); -} +actions.push(() => { + mybot.sendMessage(channel, "ping").catch(error); +}); -function success12(_server){ - console.log("test 11 successful"); - server = mybot.getServer("id", _server.id); - if(server){ - success13(); - }else{ - error("reference error"); +actions.push((message) => { + mybot.updateMessage(message, "pong").then(next).catch(error); +}); + +actions.push((message) => { + mybot.deleteMessage(message).then(next).catch(error); +}) + +actions.push(() => { + mybot.sendFile(server, "./test/image.png").then(next).catch(error); +}) + +actions.push(() => { + mybot.leaveServer(server).then(next).catch(error); +}); + +// phase 2 + +actions.push(() => { + mybot.joinServer(process.env["ds_invite"]).then(next).catch(error); +}); + +actions.push((_server) => { + server = _server; + mybot.sendMessage(server.getMember("username", "hydrabolt"), "Travis Build test").then(next).catch(error); +}); + +actions.push((_message) => { + mybot.deleteMessage(_message).then(next).catch(error); +}); + +actions.push(() => { + mybot.logout().then(next).catch(error); +}); + +mybot.on("message", function (message) { + if(!message.isPrivate){ + if (message.channel.equals(channel)) { + if (message.content === "ping") { + sentMessage = true; + next(message); + } + } } -} +}) -function success13(){ - console.log("test 12 successful"); - mybot.sendFile(server, "./test/image.png").then(function(msg){ - mybot.deleteMessage(msg).then(success14).catch(error); - }).catch(error); -} +mybot.once("ready", function () { + console.log("ready! beginning tests"); + next(); +}); -function success14(msg){ - console.log("test 13 successful"); - mybot.leaveServer(server).then(success15).catch(error); -} +mybot.login(process.env["ds_email"], process.env["ds_password"]).then(init).catch(error); -function success15(){ - console.log("test 14 successful"); - mybot.logout().then(done).catch(error); -} - -function done(){ - console.log("All tests completed succesfully."); +function done() { + console.log("Finished! Build successful."); process.exit(0); } -function checkError(){ - if(!sentMessage){ - error("failure receiving messages"); - } -} - -function error(err){ - console.log("error", err); +function error(e) { + console.log("FAILED DURING TEST", current); + console.log(e.stack); process.exit(1); -} - -mybot.on("message", function(message){ - - if(message.channel.equals(channel)){ - if(message.content === "ping"){ - console.log("test 5 successful"); - sentMessage = true; - - mybot.updateMessage(message, "pong").then(success7).catch(error); - } - } - -}); - -mybot.login(process.env["ds_email"], process.env["ds_password"]).then(init).catch(error); \ No newline at end of file +} \ No newline at end of file