Finished caching

This commit is contained in:
hydrabolt
2015-08-23 21:19:48 +01:00
parent b6506783f3
commit 0f9c1b8dad
6 changed files with 451 additions and 66 deletions

View File

@@ -7,6 +7,8 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
var Endpoints = require("./Endpoints.js");
var User = require("./User.js");
var Server = require("./Server.js");
var Channel = require("./Channel.js");
//node modules
var request = require("superagent");
@@ -56,18 +58,37 @@ var Client = (function () {
value: function debug(message) {
console.log(message);
}
}, {
key: "on",
value: function on(event, fn) {
this.events.set(event, fn);
}
}, {
key: "off",
value: function off(event, fn) {
this.events["delete"](event);
}
//def trigger
}, {
key: "trigger",
value: function trigger(event) {}
value: function trigger(event) {
var args = [];
for (var arg in arguments) {
args.push(arguments[arg]);
}
var evt = this.events.get(event);
if (evt) {
evt.apply(this, args.slice(1));
}
}
//def login
}, {
key: "login",
value: function login() {
var email = arguments.length <= 0 || arguments[0] === undefined ? "foo@bar.com" : arguments[0];
var password = arguments.length <= 1 || arguments[1] === undefined ? "pass1234s" : arguments[1];
var password = arguments.length <= 1 || arguments[1] === undefined ? "pass1234" : arguments[1];
var callback = arguments.length <= 2 || arguments[2] === undefined ? function () {} : arguments[2];
var self = this;
@@ -141,6 +162,34 @@ var Client = (function () {
self.user = self.addUser(data.user);
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = data.guilds[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var _server = _step.value;
self.addServer(_server);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator["return"]) {
_iterator["return"]();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
self.trigger("ready");
self.debug("cached " + self.serverCache.size + " servers, " + self.channelCache.size + " channels and " + self.userCache.size + " users.");
break;
default:
self.debug("received unknown packet");
@@ -161,6 +210,131 @@ var Client = (function () {
return this.userCache.get(data.id);
}
//def addChannel
}, {
key: "addChannel",
value: function addChannel(data, serverId) {
if (!this.channelCache.has(data.id)) {
this.channelCache.set(data.id, new Channel(data, this.getServer("id", serverId)));
}
return this.channelCache.get(data.id);
}
//def addServer
}, {
key: "addServer",
value: function addServer(data) {
if (!this.serverCache.has(data.id)) {
this.serverCache.set(data.id, new Server(data, this));
}
return this.serverCache.get(data.id);
}
//def getUser
}, {
key: "getUser",
value: function getUser(key, value) {
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = this.userCache[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var row = _step2.value;
var obj = row[1];
if (obj[key] === value) {
return obj;
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2["return"]) {
_iterator2["return"]();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return null;
}
//def getChannel
}, {
key: "getChannel",
value: function getChannel(key, value) {
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = this.channelCache[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var row = _step3.value;
var obj = row[1];
if (obj[key] === value) {
return obj;
}
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3["return"]) {
_iterator3["return"]();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
return null;
}
//def getServer
}, {
key: "getServer",
value: function getServer(key, value) {
var _iteratorNormalCompletion4 = true;
var _didIteratorError4 = false;
var _iteratorError4 = undefined;
try {
for (var _iterator4 = this.serverCache[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
var row = _step4.value;
var obj = row[1];
if (obj[key] === value) {
return obj;
}
}
} catch (err) {
_didIteratorError4 = true;
_iteratorError4 = err;
} finally {
try {
if (!_iteratorNormalCompletion4 && _iterator4["return"]) {
_iterator4["return"]();
}
} finally {
if (_didIteratorError4) {
throw _iteratorError4;
}
}
}
return null;
}
//def trySendConnData
}, {
key: "trySendConnData",
@@ -192,6 +366,21 @@ var Client = (function () {
get: function get() {
return this.state === 3;
}
}, {
key: "servers",
get: function get() {
return this.serverCache;
}
}, {
key: "channels",
get: function get() {
return this.channelCache;
}
}, {
key: "users",
get: function get() {
return this.userCache;
}
}]);
return Client;

View File

@@ -1,31 +1,33 @@
"use strict";
var List = require("./list.js").List;
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
exports.Channel = function (name, server, type, id, isPrivate) {
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
if (!type) {
//there's no second argument
var channel = name;
name = channel.name;
server = server;
type = channel.type;
id = channel.id;
isPrivate = channel.is_private;
var Channel = (function () {
function Channel(data, server) {
_classCallCheck(this, Channel);
this.server = server;
this.name = data.name;
this.type = data.type;
this.id = data.id;
//this.isPrivate = isPrivate; //not sure about the implementation of this...
}
this.name = name;
this.server = server;
this.type = type;
this.id = id;
this.isPrivate = isPrivate;
this.messages = new List("id", 5000);
};
_createClass(Channel, [{
key: "equals",
value: function equals(object) {
return object.id === this.id;
}
}, {
key: "client",
get: function get() {
return this.server.client;
}
}]);
exports.Channel.equals = function (otherChannel) {
if (otherChannel.id === this.id) {
return true;
} else {
return false;
}
};
return Channel;
})();
module.exports = Channel;

View File

@@ -1,37 +1,172 @@
"use strict";
var User = require("./user.js").User;
var List = require("./list.js").List;
exports.Server = function (data) {
this.region = data.region;
this.ownerID = data.owner_id;
this.name = data.name;
this.id = data.id;
this.members = new Map();
this.channels = new Map();
this.icon = data.icon;
this.afkTimeout = afkTimeout;
this.afkChannelId = afkChannelId;
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
for (var x in members) {
var member = members[x].user;
this.members.add(new User(member));
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Server = (function () {
function Server(data, client) {
_classCallCheck(this, Server);
this.client = client;
this.region = data.region;
this.ownerID = data.owner_id;
this.name = data.name;
this.id = data.id;
this.members = new Set();
this.channels = new Set();
this.icon = data.icon;
this.afkTimeout = data.afk_timeout;
this.afkChannelId = data.afk_channel_id;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = data.members[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var member = _step.value;
// first we cache the user in our Discord Client,
// then we add it to our list. This way when we
// get a user from this server's member list,
// it will be identical (unless an async change occurred)
// to the client's cache.
this.members.add(client.addUser(member.user));
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator["return"]) {
_iterator["return"]();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = data.channels[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var channel = _step2.value;
this.channels.add(client.addChannel(channel, this.id));
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2["return"]) {
_iterator2["return"]();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
}
};
exports.Server.prototype.getIconURL = function () {
if (!this.icon) return false;
return "https://discordapp.com/api/guilds/" + this.id + "/icons/" + this.icon + ".jpg";
};
_createClass(Server, [{
key: "getChannel",
exports.Server.prototype.getAFKChannel = function () {
// get/set
value: function getChannel(key, value) {
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
if (!this.afkChannelId) return false;
try {
for (var _iterator3 = this.channels[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var channel = _step3.value;
return this.channels.filter("id", this.afkChannelId, true);
};
if (channel[key] === value) {
return channel;
}
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3["return"]) {
_iterator3["return"]();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
exports.Server.prototype.getDefaultChannel = function () {
return null;
}
}, {
key: "getMember",
value: function getMember(key, value) {
var _iteratorNormalCompletion4 = true;
var _didIteratorError4 = false;
var _iteratorError4 = undefined;
return this.channels.filter("name", "general", true);
};
try {
for (var _iterator4 = this.members[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
var member = _step4.value;
if (member[key] === value) {
return member;
}
}
} catch (err) {
_didIteratorError4 = true;
_iteratorError4 = err;
} finally {
try {
if (!_iteratorNormalCompletion4 && _iterator4["return"]) {
_iterator4["return"]();
}
} finally {
if (_didIteratorError4) {
throw _iteratorError4;
}
}
}
return null;
}
}, {
key: "iconURL",
get: function get() {
if (!this.icon) return null;
return "https://discordapp.com/api/guilds/" + this.id + "/icons/" + this.icon + ".jpg";
}
}, {
key: "afkChannel",
get: function get() {
if (!this.afkChannelId) return false;
return this.getChannel("id", this.afkChannelId);
}
}, {
key: "defaultChannel",
get: function get() {
return this.getChannel("name", "general");
}
}, {
key: "owner",
get: function get() {
return this.client.getUser("id", this.ownerID);
}
}]);
return Server;
})();
module.exports = Server;

View File

@@ -44,6 +44,18 @@ class Client {
get ready() {
return this.state === 3;
}
get servers() {
return this.serverCache;
}
get channels() {
return this.channelCache;
}
get users() {
return this.userCache;
}
//def debug
@@ -51,13 +63,28 @@ class Client {
console.log(message);
}
on(event, fn){
this.events.set(event, fn);
}
off(event, fn){
this.events.delete(event);
}
//def trigger
trigger(event) {
var args = [];
for(var arg in arguments){
args.push(arguments[arg]);
}
var evt = this.events.get(event);
if(evt){
evt.apply(this, args.slice(1));
}
}
//def login
login(email = "foo@bar.com", password = "pass1234s", callback = function () { }) {
login(email = "foo@bar.com", password = "pass1234", callback = function () { }) {
var self = this;
@@ -133,6 +160,13 @@ class Client {
self.user = self.addUser( data.user );
for(var _server of data.guilds){
self.addServer(_server);
}
self.trigger("ready");
self.debug(`cached ${self.serverCache.size} servers, ${self.channelCache.size} channels and ${self.userCache.size} users.`);
break;
default:
@@ -155,9 +189,9 @@ class Client {
}
//def addChannel
addChannel(data) {
addChannel(data, serverId) {
if (!this.channelCache.has(data.id)){
this.channelCache.set(data.id, new Channel(data, SERVER));
this.channelCache.set(data.id, new Channel(data, this.getServer("id", serverId)));
}
return this.channelCache.get(data.id);
}
@@ -172,13 +206,34 @@ class Client {
//def getUser
getUser(key, value){
for (var userRow of this.userCache) {
var user = userRow[1];
if (user[key] === value) {
return user;
for (var row of this.userCache) {
var obj = row[1];
if (obj[key] === value) {
return obj;
}
}
return null;
}
//def getChannel
getChannel(key, value){
for (var row of this.channelCache) {
var obj = row[1];
if (obj[key] === value) {
return obj;
}
}
return null;
}
//def getServer
getServer(key, value){
for (var row of this.serverCache) {
var obj = row[1];
if (obj[key] === value) {
return obj;
}
}
return null;
}

View File

@@ -18,12 +18,12 @@ class Server {
// get a user from this server's member list,
// it will be identical (unless an async change occurred)
// to the client's cache.
this.members.add(client.addUser(member));
this.members.add(client.addUser(member.user));
}
for (var channel of data.channels) {
this.channels.add(client.addChannel(channel));
this.channels.add(client.addChannel(channel, this.id));
}
}

View File

@@ -2,6 +2,10 @@ var Discord = require("../lib/index.js");
var mybot = new Discord.Client();
mybot.login("riftes@outlook.com", "hydrabotsecure", function(err, res){
console.log(res);
});
mybot.login("email", "pass", function(err, res){
});
mybot.on("ready", function(){
console.log("Ready!");
})