From 3e4f0fb74c4122f9aab770d317dd5e2a2456536d Mon Sep 17 00:00:00 2001 From: hydrabolt Date: Wed, 12 Aug 2015 16:35:17 +0100 Subject: [PATCH] small fixes and additions to examples, added deepFilter to list --- examples/avatar.js | 12 ++++++-- examples/presence.js | 12 ++++++-- examples/query.js | 67 ++++++++++++++++++++++++-------------------- examples/status.js | 6 ++-- index.js | 14 ++++++--- lib/list.js | 28 ++++++++++++++++++ 6 files changed, 96 insertions(+), 43 deletions(-) diff --git a/examples/avatar.js b/examples/avatar.js index c6fa4d69d..32ad48a8f 100644 --- a/examples/avatar.js +++ b/examples/avatar.js @@ -3,11 +3,17 @@ * access user avatars. */ -var Discord = require( "discord.js" ); +var Discord = require( "../" ); var myBot = new Discord.Client(); myBot.login( "hello@example.com", "password1" ); +// The "ready" event is triggered after the bot successfully connected to +// Discord and is ready to send messages. +myBot.on( "ready", function() { + console.log( "Bot connected successfully." ); +} ); + myBot.on( "message", function( message ) { // React to all messages with the content "$avatar" if ( message.content === "$avatar" ) { @@ -22,10 +28,10 @@ myBot.on( "message", function( message ) { // A user can be mentioned in a message by inserting the string obtained // by user.mention() into the message. // Note that simply writing "@user" will NOT work. - bot.sendMessage( message.channel, message.author.mention() + ", here's your avatar: " + url ); + this.sendMessage( message.channel, message.author.mention() + ", here's your avatar: " + url ); } else { // Nothing should be done if the user has not set an avatar. - bot.sendMessage( message.channel, message.author.mention() + ", you don't have an avatar!" ); + this.sendMessage( message.channel, message.author.mention() + ", you don't have an avatar!" ); } } } ); diff --git a/examples/presence.js b/examples/presence.js index 4a426e601..9014feea2 100644 --- a/examples/presence.js +++ b/examples/presence.js @@ -3,16 +3,24 @@ * joining or leaving. */ -var Discord = require( "discord.js" ); +var Discord = require( "../" ); var myBot = new Discord.Client(); myBot.login( "hello@example.com", "password1" ); +// The "ready" event is triggered after the bot successfully connected to +// Discord and is ready to send messages. +myBot.on( "ready", function() { + console.log( "Bot connected successfully." ); +} ); + // The "presence" event is triggered when a user joins a server, leaves it or // goes away. // The status parameter can be "online", "offline" or "idle", respectively. myBot.on( "presence", function( user, status, server ) { // Send a message on the default channel of the server, as presence updates // are not restricted to one channel. - bot.sendMessage( server.getDefaultChannel(), user.mention() + " is " + status + "!" ); + var message = user.mention() + " is " + status + " in " + server.name + "!"; + console.log(message); + this.sendMessage( server.getDefaultChannel(), message ); } ); diff --git a/examples/query.js b/examples/query.js index 00680102f..4d4ee7958 100644 --- a/examples/query.js +++ b/examples/query.js @@ -4,47 +4,52 @@ * 100 messages. */ -var Discord = require( "discord.js" ); +var Discord = require( "../" ); var myBot = new Discord.Client(); myBot.login( "hello@example.com", "password1" ); +// The "ready" event is triggered after the bot successfully connected to +// Discord and is ready to send messages. +myBot.on( "ready", function() { + console.log( "Bot connected successfully." ); +} ); + myBot.on( "message", function( message ) { // React to all messages starting with "$query". - if ( message.content.startsWith( "$query" ) ) { - // Obtain the channel for which logs should be accessed. - var channel = message.channel; + if ( message.content.split(" ")[0] === "$query") { + // Obtain the channel for which logs should be accessed. + var channel = message.channel; - // Find all the arguments to the command. - var arguments = message.content.split( " " ); + // Find all the arguments to the command. + var arguments = message.content.split( " " ); - // Get the first argument specifically, as it contains the username - // to be queried for. - var username = arguments.slice( 1 ).join( " " ); + // Get the arguments, as they contains the username + // to be queried for. + var username = arguments.slice( 1 ).join( " " ); - // Exit the event handler unless the user exists. - if( !username ) { - myBot.sendMessage( channel, "That user doesn't exist!" ); - return; - } + // Exit the event handler unless the user exists. + if ( !username ) { + myBot.sendMessage( channel, "That user doesn't exist!" ); + return; + } - // The getChannelLogs() function takes the channel that should be accessed, - // the amount of messages to query and a callback as its arguments. - myBot.getChannelLogs( channel, 100, function( messageList ) { - // filter() takes three arguments, the key to be filtered for (in this - // case the username, so "username"), the value to look for, and whether - // only the first finding should be returned (true) or a list of all - // findings (false). - var message = messageList.filter( "username", username, true ); + // The getChannelLogs() function takes the channel that should be accessed, + // the amount of messages to query and a callback as its arguments. + myBot.getChannelLogs( channel, 1000, function( messageList ) { + // filter() takes three arguments, the key to be filtered for (in this + // case the username, so "username"), the value to look for, and whether + // only the first finding should be returned (true) or a list of all + // findings (false). + var message = messageList.deepFilter( ["author", "username"], username, true ); - // Only continue if the message has been found - if( message ) { - myBot.sendMessage( channel, "The last message from user " + username + - " is: \"" + message.content + "\"." ). - } else { - myBot.sendMessage( "That user has not sent a message " + - "for the last 100 messages!" ) - } - } ); + // Only continue if the message has been found + if ( message ) { + myBot.sendMessage( channel, "The last message from user " + username + " is:\n_" + message.content + "_" ); + } else { + myBot.sendMessage( channel, "That user has not sent a message for the last 1,000 messages!" ); + } + } ); } + } ); diff --git a/examples/status.js b/examples/status.js index a54814b01..9ee2b9a6a 100644 --- a/examples/status.js +++ b/examples/status.js @@ -4,7 +4,7 @@ * starts up or shuts down, respectively. */ -var Discord = require( "discord.js" ); +var Discord = require( "../" ); var myBot = new Discord.Client(); myBot.login( "hello@example.com", "password1" ); @@ -19,6 +19,6 @@ myBot.on( "ready", function() { // ended. // It is also triggered when the connection attempt fails, for example due // to a wrong password. -myBot.on( "disconnected", function() { - console.log( "Bot disconnected from Discord." ); +myBot.on( "disconnected", function(e) { + console.log( "Bot disconnected from Discord -", e.reason ); } ); diff --git a/index.js b/index.js index 42ea0a72d..77e8e1d14 100644 --- a/index.js +++ b/index.js @@ -85,10 +85,10 @@ exports.Client.prototype.login = function( email, password ) { .send( details ) .end( function( err, res ) { if ( !res.ok ) { - client.triggerEvent( "disconnected", { + client.triggerEvent( "disconnected", [{ reason: "failed to log in", error: err - } ); + }] ); } else { client.token = res.body.token; client.loggedIn = true; @@ -104,10 +104,10 @@ exports.Client.prototype.connectWebsocket = function( cb ) { this.websocket = new WebSocket( Endpoints.WEBSOCKET_HUB ); this.websocket.onclose = function( e ) { - client.triggerEvent( "disconnected", { + client.triggerEvent( "disconnected", [{ reason: "websocket disconnected", error: e - } ); + }] ); }; this.websocket.onmessage = function( e ) { @@ -265,6 +265,12 @@ exports.Client.prototype.sendMessage = function( channel, message, cb, _mentions .set( "authorization", client.token ) .send( details ) .end( function( err, res ) { + + if(err){ + cb(err); + return; + } + var msg = new Message( res.body, client.channelFromId( res.body.channel_id ) ); if ( options.selfDestruct ) { setTimeout( function() { diff --git a/lib/list.js b/lib/list.js index d065cacfc..a57c246e9 100644 --- a/lib/list.js +++ b/lib/list.js @@ -72,3 +72,31 @@ exports.List.prototype.filter = function( key, value, onlyOne ) { return results; } + +exports.List.prototype.deepFilter = function( keys, value, onlyOne ) { + + var results = []; + + for ( index in this.contents ) { + var child = this.contents[ index ]; + var buffer = child; + + for(key of keys){ + buffer = buffer[key]; + } + + if ( buffer == value ) { + if ( onlyOne ) { + return child; + } else { + results.push( child ); + } + } + } + + if ( onlyOne ) { + return false; + } + + return results; +}