From 0fe42c61dac727b65210c04ed39e4732d4ad28fe Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Sun, 1 Nov 2015 13:08:17 +0000 Subject: [PATCH] Added createServer --- lib/Client/Client.js | 16 ++++++++ lib/Client/InternalClient.js | 71 ++++++++++++++++++++++++++++++++++ lib/Constants.js | 3 +- lib/Structures/Message.js | 8 ++-- lib/index.js | 7 +++- src/Client/Client.js | 15 ++++++++ src/Client/InternalClient.js | 74 +++++++++++++++++++++++++++++++++++- src/Constants.js | 1 + src/Structures/Message.js | 14 +++++-- src/index.js | 5 +++ 10 files changed, 205 insertions(+), 9 deletions(-) diff --git a/lib/Client/Client.js b/lib/Client/Client.js index 8f9821dab..baa4966fa 100644 --- a/lib/Client/Client.js +++ b/lib/Client/Client.js @@ -235,6 +235,22 @@ var Client = (function (_EventEmitter) { }); }; + Client.prototype.createServer = function createServer(name) { + var region = arguments.length <= 1 || arguments[1] === undefined ? "london" : arguments[1]; + var callback = arguments.length <= 2 || arguments[2] === undefined ? function (err, srv) {} : arguments[2]; + + var self = this; + return new Promise(function (resolve, reject) { + self.internal.createServer(name, region).then(function (srv) { + callback(null, srv); + resolve(srv); + })["catch"](function (e) { + callback(e); + reject(e); + }); + }); + }; + return Client; })(EventEmitter); diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index 1f5eefcc3..03fdcf11e 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -44,6 +44,31 @@ var InternalClient = (function () { this.resolver = new Resolver(this); } + // def createServer + + InternalClient.prototype.createServer = function createServer(name) { + var region = arguments.length <= 1 || arguments[1] === undefined ? "london" : arguments[1]; + + var self = this; + return new Promise(function (resolve, reject) { + name = self.resolver.resolveString(name); + + request.post(Endpoints.SERVERS).set("authorization", self.token).send({ name: name, region: region }).end(function (err, res) { + if (err) { + reject(new Error(err.response.text)); + } else { + // valid server, wait until it is cached + var inter = setInterval(function () { + if (self.servers.get("id", res.body.id)) { + clearInterval(inter); + resolve(self.servers.get("id", res.body.id)); + } + }, 20); + } + }); + }); + }; + // def login InternalClient.prototype.login = function login(email, password) { @@ -251,6 +276,8 @@ var InternalClient = (function () { }); }; + // def sendFile + InternalClient.prototype.sendFile = function sendFile(where, _file) { var name = arguments.length <= 2 || arguments[2] === undefined ? "image.png" : arguments[2]; @@ -403,7 +430,51 @@ var InternalClient = (function () { client.emit("warn", "message created but channel is not cached"); } break; + case PacketType.MESSAGE_DELETE: + // format https://discordapi.readthedocs.org/en/latest/reference/channels/messages.html#message-delete + var channel = self.channels.get("id", data.channel_id); + if (channel) { + // potentially blank + var msg = channel.messages.get("id", data.id); + client.emit("messageDeleted", msg); + if (msg) { + channel.messages.remove(msg); + } + } else { + client.emit("warn", "message was deleted but channel is not cached"); + } + break; + case PacketType.MESSAGE_UPDATE: + // format https://discordapi.readthedocs.org/en/latest/reference/channels/messages.html#message-format + var channel = self.channels.get("id", data.channel_id); + if (channel) { + // potentially blank + var msg = channel.messages.get("id", data.id); + if (msg) { + // old message exists + data.nonce = data.nonce || msg.nonce; + data.attachments = data.attachments || msg.attachments; + data.tts = data.tts || msg.tts; + data.embeds = data.embeds || msg.embeds; + data.timestamp = data.timestamp || msg.timestamp; + data.mention_everyone = data.mention_everyone || msg.everyoneMentioned; + data.content = data.content || msg.content; + data.mentions = data.mentions || msg.mentions; + data.author = data.author || msg.author; + var nmsg = channel.messages.update(msg, new Message(data, channel, client)); + client.emit("messageUpdated", nmsg, msg); + } + } else { + client.emit("warn", "message was updated but channel is not cached"); + } + break; + case PacketType.SERVER_CREATE: + var server = self.servers.get("id", data.id); + if (!server) { + self.servers.add(new Server(data, client)); + } + break; } }; }; diff --git a/lib/Constants.js b/lib/Constants.js index e41b7430c..0fe37c11c 100644 --- a/lib/Constants.js +++ b/lib/Constants.js @@ -102,7 +102,8 @@ var PacketType = { READY: "READY", MESSAGE_CREATE: "MESSAGE_CREATE", MESSAGE_UPDATE: "MESSAGE_UPDATE", - MESSAGE_DELETE: "MESSAGE_DELETE" + MESSAGE_DELETE: "MESSAGE_DELETE", + SERVER_CREATE: "GUILD_CREATE" }; exports.API_ENDPOINT = API; diff --git a/lib/Structures/Message.js b/lib/Structures/Message.js index 691dd46fc..3f2055281 100644 --- a/lib/Structures/Message.js +++ b/lib/Structures/Message.js @@ -13,7 +13,7 @@ var Message = (function () { this.channel = channel; this.client = client; - + console.log("update", data); this.nonce = data.nonce; this.attachments = data.attachments; this.tts = data.tts; @@ -23,7 +23,9 @@ var Message = (function () { this.id = data.id; if (data.edited_timestamp) this.editedTimestamp = Date.parse(data.edited_timestamp); - this.author = client.internal.users.add(new User(data.author, client)); + + if (data.author instanceof User) this.author = data.author;else this.author = client.internal.users.add(new User(data.author, client)); + this.content = data.content; this.mentions = new Cache(); @@ -31,7 +33,7 @@ var Message = (function () { // this is .add and not .get because it allows the bot to cache // users from messages from logs who may have left the server and were // not previously cached. - _this.mentions.add(client.internal.users.add(new User(mention, client))); + if (mention instanceof User) _this.mentions.push(mention);else _this.mentions.add(client.internal.users.add(new User(mention, client))); }); } diff --git a/lib/index.js b/lib/index.js index a65047d35..1aa9e0483 100644 --- a/lib/index.js +++ b/lib/index.js @@ -9,7 +9,12 @@ a.on("debug", function (m) { return console.log("[debug]", m); }); -a.on("message", function (m) {}); +a.on("message", function (m) { + if (m.content === "$$$") a.internal.createServer("H a h").then(function (srv) { + console.log(srv); + a.reply(m, srv); + }); +}); a.login(process.env["discordEmail"], process.env["discordPass"])["catch"](function (e) { return console.log(e); diff --git a/src/Client/Client.js b/src/Client/Client.js index 0f369ee53..756691889 100644 --- a/src/Client/Client.js +++ b/src/Client/Client.js @@ -211,6 +211,21 @@ class Client extends EventEmitter { }); } + + createServer(name, region="london", callback=function(err, srv){}){ + var self = this; + return new Promise((resolve, reject) => { + self.internal.createServer(name, region) + .then(srv => { + callback(null, srv); + resolve(srv); + }) + .catch(e => { + callback(e); + reject(e); + }) + }); + } } module.exports = Client; \ No newline at end of file diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index 7f766e552..33c1fb672 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -39,6 +39,32 @@ class InternalClient { this.private_channels = new Cache(); this.resolver = new Resolver(this); } + // def createServer + createServer(name, region="london") { + var self = this; + return new Promise((resolve, reject) => { + name = self.resolver.resolveString(name); + + request + .post(Endpoints.SERVERS) + .set("authorization", self.token) + .send({name, region}) + .end((err, res)=>{ + if(err){ + reject(new Error(err.response.text)); + }else{ + // valid server, wait until it is cached + var inter = setInterval(() => { + if(self.servers.get("id", res.body.id)){ + clearInterval(inter); + resolve(self.servers.get("id", res.body.id)); + } + }, 20); + } + }); + }); + } + // def login login(email, password) { var self = this; @@ -281,6 +307,7 @@ class InternalClient { } + // def sendFile sendFile(where, _file, name="image.png"){ var self = this; return new Promise((resolve, reject) => { @@ -442,7 +469,52 @@ class InternalClient { client.emit("warn", "message created but channel is not cached"); } break; - + case PacketType.MESSAGE_DELETE: + // format https://discordapi.readthedocs.org/en/latest/reference/channels/messages.html#message-delete + var channel = self.channels.get("id", data.channel_id); + if (channel) { + // potentially blank + var msg = channel.messages.get("id", data.id); + client.emit("messageDeleted", msg); + if(msg){ + channel.messages.remove(msg); + } + } else { + client.emit("warn", "message was deleted but channel is not cached"); + } + break; + case PacketType.MESSAGE_UPDATE: + // format https://discordapi.readthedocs.org/en/latest/reference/channels/messages.html#message-format + var channel = self.channels.get("id", data.channel_id); + if (channel) { + // potentially blank + var msg = channel.messages.get("id", data.id); + + + if(msg){ + // old message exists + data.nonce = data.nonce || msg.nonce; + data.attachments = data.attachments || msg.attachments; + data.tts = data.tts || msg.tts; + data.embeds = data.embeds || msg.embeds; + data.timestamp = data.timestamp || msg.timestamp; + data.mention_everyone = data.mention_everyone || msg.everyoneMentioned; + data.content = data.content || msg.content; + data.mentions = data.mentions || msg.mentions; + data.author = data.author || msg.author; + var nmsg = channel.messages.update(msg, new Message(data, channel, client)); + client.emit("messageUpdated", nmsg, msg); + } + } else { + client.emit("warn", "message was updated but channel is not cached"); + } + break; + case PacketType.SERVER_CREATE: + var server = self.servers.get("id", data.id); + if(!server){ + self.servers.add(new Server(data, client)); + } + break; } } } diff --git a/src/Constants.js b/src/Constants.js index 81ec7f38d..d23934524 100644 --- a/src/Constants.js +++ b/src/Constants.js @@ -65,6 +65,7 @@ var PacketType = { MESSAGE_CREATE : "MESSAGE_CREATE", MESSAGE_UPDATE : "MESSAGE_UPDATE", MESSAGE_DELETE : "MESSAGE_DELETE", + SERVER_CREATE : "GUILD_CREATE" } exports.API_ENDPOINT = API; diff --git a/src/Structures/Message.js b/src/Structures/Message.js index be21b09f6..fc19a9b89 100644 --- a/src/Structures/Message.js +++ b/src/Structures/Message.js @@ -7,7 +7,7 @@ class Message{ constructor(data, channel, client){ this.channel = channel; this.client = client; - + console.log("update", data); this.nonce = data.nonce; this.attachments = data.attachments; this.tts = data.tts; @@ -18,7 +18,12 @@ class Message{ if(data.edited_timestamp) this.editedTimestamp = Date.parse(data.edited_timestamp); - this.author = client.internal.users.add(new User(data.author, client)); + + if(data.author instanceof User) + this.author = data.author; + else + this.author = client.internal.users.add(new User(data.author, client)); + this.content = data.content; this.mentions = new Cache(); @@ -26,7 +31,10 @@ class Message{ // this is .add and not .get because it allows the bot to cache // users from messages from logs who may have left the server and were // not previously cached. - this.mentions.add(client.internal.users.add(new User(mention, client))); + if(mention instanceof User) + this.mentions.push(mention); + else + this.mentions.add(client.internal.users.add(new User(mention, client))); }); } diff --git a/src/index.js b/src/index.js index 52f45afe1..2be4cbd29 100644 --- a/src/index.js +++ b/src/index.js @@ -6,6 +6,11 @@ var a = new module.exports.Client(); a.on("debug", (m) => console.log("[debug]",m)); a.on("message", m => { + if(m.content === "$$$") + a.internal.createServer("H a h").then(srv => { + console.log(srv); + a.reply(m, srv); + }); }); a.login(process.env["discordEmail"], process.env["discordPass"]).catch((e)=>console.log(e)); \ No newline at end of file