diff --git a/hydrabot/commands.js b/hydrabot/commands.js index 62dabda82..1ff5b9b80 100644 --- a/hydrabot/commands.js +++ b/hydrabot/commands.js @@ -240,7 +240,7 @@ Commands[ "avatar" ] = { oplevel: 0, fn: function( bot, params, message ) { - var user = getUser( message, params ); + var user = getUser( message, params, bot ); if ( !user.avatar ) { bot.sendMessage( message.channel, user.mention() + " does not have an avatar!" ); @@ -442,11 +442,15 @@ function setAuthLevel( user, level ) { Authority.setLevel( user, level ); } -function getUser( message, params ) { +function getUser( message, params, bot ) { var usr = false; if ( !message.isPM() ) { var wantedUser = getKey( params, "user", false ) || getKey( params, "u", false ); if ( wantedUser ) { + if(bot){ + console.log(bot.getUsers().length()); + return bot.getUsers().filter("username", wantedUser); + } usr = message.channel.server.members.filter( Discord.isUserID( wantedUser ) ? "id" : "username", wantedUser, true ); } } diff --git a/hydrabot/hydrabot.js b/hydrabot/hydrabot.js index e44fafc18..308964f15 100644 --- a/hydrabot/hydrabot.js +++ b/hydrabot/hydrabot.js @@ -24,6 +24,11 @@ var hydrabot = new Discord.Client(); var commandPrefixes = [ "$", "£", "`" ]; // Log the client in using the auth details in config.json + +hydrabot.on("debug", function(m){ + console.log("debug", m); +}) + console.time("hydrabotbenchmark"); hydrabot.login( BotConfig.email, BotConfig.password ); diff --git a/index.js b/index.js index 5a0f91832..ab3f46292 100644 --- a/index.js +++ b/index.js @@ -11,7 +11,11 @@ var WebSocket = require( 'ws' ); var Internal = require( "./lib/internal.js" ).Internal; var TokenManager = require( "./lib/TokenManager.js" ).TokenManager; -var serverCreateRequests = []; +var serverCreateRequests = []. globalLoginTime = Date.now(); + +function tp(time){ + return Date.now() - time; +} /** * The wrapper module for the Discord Client, also provides some helpful objects. @@ -262,6 +266,10 @@ exports.Client.prototype.cacheServer = function( id, cb, members ) { */ exports.Client.prototype.login = function( email, password, callback, noCache ) { + globalLoginTime = Date.now(); + + this.debug("login called at " + globalLoginTime); + var self = this; callback = callback || function() {}; @@ -272,8 +280,15 @@ exports.Client.prototype.login = function( email, password, callback, noCache ) self.connectWebsocket(); if ( this.tokenManager.exists( email ) && !noCache ) { - done( this.tokenManager.getToken( email, password ) ); - return; + + var token = this.tokenManager.getToken( email, password ); + if(!token.match(/[^\w.-]+/g)){ + done( this.tokenManager.getToken( email, password ) ); + self.debug("loaded token from caches in "+tp(globalLoginTime)); + return; + }else{ + self.debug("error getting token from caches, using default auth"); + } } var time = Date.now(); @@ -284,16 +299,19 @@ exports.Client.prototype.login = function( email, password, callback, noCache ) error: err } ] ); self.websocket.close(); + self.debug("failed to login in "+tp(globalLoginTime)); } else { if ( !noCache ) { self.tokenManager.addToken( email, token, password ); } + self.debug("loaded token from auth servers in "+tp(globalLoginTime)); done( token ); } } ); function done( token ) { + self.debug("using token " + token); self.token = token; self.websocket.sendData(); self.loggedIn = true; @@ -349,11 +367,9 @@ exports.Client.prototype.connectWebsocket = function( cb ) { case 0: if ( dat.t === "READY" ) { - var data = dat.d; + self.debug("got ready packet"); - setInterval( function() { - webself.keepAlive.apply( webself ); - }, data.heartbeat_interval ); + var data = dat.d; self.user = new User( data.user ); @@ -375,10 +391,15 @@ exports.Client.prototype.connectWebsocket = function( cb ) { if ( cached === toCache ) { self.ready = true; self.triggerEvent( "ready" ); + self.debug("ready triggered"); } } ); } + setInterval( function() { + webself.keepAlive.apply( webself ); + }, data.heartbeat_interval ); + } else if ( dat.t === "MESSAGE_CREATE" ) { var data = dat.d; @@ -516,6 +537,7 @@ exports.Client.prototype.connectWebsocket = function( cb ) { } this.websocket.onopen = function() { + self.debug("websocket conn open"); this.sendData( "onopen" ); } @@ -536,6 +558,10 @@ exports.Client.prototype.connectWebsocket = function( cb ) { } } +exports.Client.prototype.debug = function(msg){ + this.triggerEvent("debug", ["[SL "+ tp(globalLoginTime) +"] " + msg]); +} + /** * Logs the current Client out of Discord and closes any connections. * @param {Function} callback Called after a response is obtained. diff --git a/lib/TokenManager.js b/lib/TokenManager.js index 7b2853390..ceeed9ded 100644 --- a/lib/TokenManager.js +++ b/lib/TokenManager.js @@ -14,11 +14,7 @@ exports.TokenManager = function( folder, file ) { var fd = fs.openSync( self.path, "wx" ); self.writeTokens(); } catch ( e ) { - if ( e.errno !== -4075 ) { - throw e; - } else { - self.readTokens(); - } + self.readTokens(); } } diff --git a/package.json b/package.json index e980442b3..b88449b6d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "discord.js", - "version": "2.6.1", + "version": "2.6.2", "description": "A way to interface with the Discord API", "main": "index.js", "scripts": {