diff --git a/README.md b/README.md index ed50cc5c4..1a6360ef6 100644 --- a/README.md +++ b/README.md @@ -1,69 +1,71 @@ # discord.js -Discord.js is a node module that allows you to interface with the [Discord](https://discordapp.com/) API for creation of things such as bots or loggers. -The aim of this API is to make it *really* simple to start developing your bots. This API has server, channel and user tracking, as well as tools to make identification really simple. +[![Build Status](https://travis-ci.org/discord-js/discord.js.svg)](https://travis-ci.org/discord-js/discord.js) -The new rewrite of the API (version 3+) is written in ECMAScript 6 and compiled down to EC5 using Babel. It allows the code to be written faster and more consistently, and take use of new features. - -## New update break your code? Read why [here](https://github.com/discord-js/discord.js/wiki#why-did-my-code-break-with-the-new-update). - -**[Find the website here.](http://discord-js.github.io)** - -**[For more information, click here.](https://github.com/hydrabolt/discord.js/wiki)** - -### This module is still in alpha - especially the newer versions! - -This node module is still in alpha, and some methods and functions may change or completely disappear! +discord.js is a node module used as a way of interfacing with +[Discord](https://discordapp.com/). It is a very useful module for creating +bots. ### Installation -``npm install --save discord.js`` +`npm install --save discord.js` -### Features +--- -* Send, Receive Delete and **Edit** messages from channels _and_ DMs! Auto-initiates DMs for you! -* Create, Delete and Leave servers and channels -* Create invites for Servers -* Silent Mention - trigger mention notification without actually @mentioning a user! -* Get complete metadata on users, channels and servers - including avatars. -* Get limitless logs from channels. -* Fast and efficient caching -* Auto-cache messages - -### Example usage +### Example ```js -/* - * A basic bot that shows how to connect to a Discord account, - * how to listen to messages and how to send messages. - * - * This bot responds to every "ping" message with a "pong". - */ +var Discord = require("discord.js"); -var Discord = require( "discord.js" ); +var mybot = new Discord.Client(); -// Create the bot -var myBot = new Discord.Client(); +mybot.on("message", function(message){ + + if(message.content === "ping") + mybot.reply(message, "pong"); + +}); -// Login with an example email and password -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." ); -} ); - -// Add a listener to the "message" event, which triggers upon receiving -// any message -myBot.on( "message", function( message ) { - // message.content accesses the content of the message as a string. - // If it is equal to "ping", then the bot should respond with "pong". - if ( message.content === "ping" ) { - // Send a message ("pong") to the channel the message was sent in, - // which is accessed by message.channel. - this.sendMessage( message.channel, "pong" ); - } -} ); +mybot.login("email", "password"); ``` -### TODO -* Joining servers from an invite -* Stealthy Ninja support +--- + +### Related Projects + +Here is a list of other Discord APIs: + +#### Java: +[Discord4J](https://github.com/nerd/Discord4J) +#### .NET: +[Discord.Net](https://github.com/RogueException/Discord.Net) + +[DiscordSharp](https://github.com/Luigifan/DiscordSharp) +#### NodeJS +[node-discord](https://github.com/izy521/node-discord) (similar to discord.js but lower level) + +#### PHP +[DiscordPHP](https://github.com/teamreflex/DiscordPHP) + +#### Python +[discord.py](https://github.com/Rapptz/discord.py) + +#### Ruby +[discordrb](https://github.com/meew0/discordrb) + +--- + +### Links +**[Documentation](https://github.com/discord-js/discord.js/wiki/Documentation)** + +**[GitHub](https://github.com/discord-js/discord.js)** + +**[Wiki](https://github.com/discord-js/discord.js/wiki)** + +**[Website](http://discord-js.github.io/)** + +**[NPM](npmjs.com/package/discord.js)** + +--- + +### Contact + +If you would like to contact me, you can create an issue on the GitHub repo +or send a DM to **hydrabolt** in [Discord API](https://discord.gg/0SBTUU1wZTY66OLO). \ No newline at end of file diff --git a/lib/Client.js b/lib/Client.js index b625710fa..02687d0f2 100644 --- a/lib/Client.js +++ b/lib/Client.js @@ -73,7 +73,7 @@ var Client = (function () { }, { key: "debug", value: function debug(message) { - console.log(message); + this.trigger("debug", message); } }, { key: "on", @@ -167,6 +167,7 @@ var Client = (function () { callback(err); reject(err); } else { + self.websocket.close(); self.state = 4; callback(); resolve(); diff --git a/src/Client.js b/src/Client.js index 97a46358c..3f152c711 100644 --- a/src/Client.js +++ b/src/Client.js @@ -95,7 +95,7 @@ class Client { //def debug debug(message) { - console.log(message); + this.trigger("debug", message); } on(event, fn) { @@ -185,6 +185,7 @@ class Client { callback(err); reject(err); } else { + self.websocket.close(); self.state = 4; callback(); resolve(); diff --git a/test/bot.js b/test/bot.js index 6dc4c9ca2..af8cb8b6c 100644 --- a/test/bot.js +++ b/test/bot.js @@ -1,18 +1,119 @@ /* - + this file should be used for travis builds only */ var Discord = require("../"); var mybot = new Discord.Client(); -mybot.login("email", "password").then(success).catch(error); +var server, channel, message, sentMessage = false; -function success(){ - console.log("login successful"); +function success1(){ //make server + console.log("preparing..."); + mybot.createServer("test-server", "london").then(success2).catch(error); +} + +function success2(_server){ //make channel + console.log("test 1 successful"); + server = _server; + mybot.createChannel(server, "test-channel", "text").then(success3).catch(error); +} + +function success3(_channel){ //send message + console.log("test 2 successful"); + channel = _channel; + mybot.sendMessage(channel, [mybot.user.avatarURL, "an", "array", "of", "messages"]).then(success4).catch(error); +} + +function success4(_message){ //delete message + console.log("test 3 successful"); + message = _message; + mybot.deleteMessage(message).then(success5).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); +} + +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"); + } +} + +function success10(){ + console.log("test 9 succesful"); + mybot.leaveServer(server).then(success11).catch(error); +} + +function success11(){ + console.log("test 10 succesful"); + mybot.joinServer(process.env["ds-invite"]).then(success12).catch(error); +} + +function success12(_server){ + console.log("test 11 successful"); + server = mybot.getServer("id", _server.id); + if(server){ + success13(); + }else{ + error("reference error"); + } +} + +function success13(){ + console.log("test 12 successful"); + mybot.leaveServer(server).then(success14).catch(error); +} + +function success14(){ + console.log("test 13 successful"); + mybot.logout().then(done).catch(error); +} + +function done(){ + console.log("All tests completed succesfully."); process.exit(0); } -function error(){ - console.log("login error, but the API works"); - process.exit(0); -} \ No newline at end of file +function checkError(){ + if(!sentMessage){ + error("failure receiving messages"); + } +} + +function error(err){ + console.log("error", err); + 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(success1).catch(error); \ No newline at end of file