mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-12 09:33:32 +01:00
Most arrays are now using lists.
This commit is contained in:
444
index.js
444
index.js
@@ -1,300 +1,320 @@
|
||||
var request = require("superagent");
|
||||
var Endpoints = require("./lib/endpoints.js");
|
||||
var Server = require("./lib/server.js").Server;
|
||||
var Message = require("./lib/message.js").Message;
|
||||
var User = require("./lib/user.js").User;
|
||||
var Channel = require("./lib/channel.js").Channel;
|
||||
var List = require("./lib/list.js").List;
|
||||
var WebSocket = require('ws');
|
||||
var request = require( "superagent" );
|
||||
var Endpoints = require( "./lib/endpoints.js" );
|
||||
var Server = require( "./lib/server.js" ).Server;
|
||||
var Message = require( "./lib/message.js" ).Message;
|
||||
var User = require( "./lib/user.js" ).User;
|
||||
var Channel = require( "./lib/channel.js" ).Channel;
|
||||
var List = require( "./lib/list.js" ).List;
|
||||
var WebSocket = require( 'ws' );
|
||||
|
||||
exports.Client = function(options) {
|
||||
exports.Client = function( options ) {
|
||||
|
||||
this.options = options || {};
|
||||
this.token = "";
|
||||
this.loggedIn = false;
|
||||
this.websocket = null;
|
||||
this.events = {};
|
||||
this.user = null;
|
||||
this.options = options || {};
|
||||
this.token = "";
|
||||
this.loggedIn = false;
|
||||
this.websocket = null;
|
||||
this.events = {};
|
||||
this.user = null;
|
||||
|
||||
this.serverList = new List("id");
|
||||
this.serverList = new List( "id" );
|
||||
|
||||
}
|
||||
|
||||
exports.Client.prototype.triggerEvent = function(event, args) {
|
||||
exports.Client.prototype.triggerEvent = function( event, args ) {
|
||||
|
||||
if (this.events[event]) {
|
||||
this.events[event].apply(this, args);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
if ( this.events[ event ] ) {
|
||||
this.events[ event ].apply( this, args );
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
exports.Client.prototype.on = function(name, fn) {
|
||||
this.events[name] = fn;
|
||||
exports.Client.prototype.on = function( name, fn ) {
|
||||
this.events[ name ] = fn;
|
||||
}
|
||||
|
||||
exports.Client.prototype.off = function(name) {
|
||||
this.events[name] = function() {};
|
||||
exports.Client.prototype.off = function( name ) {
|
||||
this.events[ name ] = function() {};
|
||||
}
|
||||
|
||||
exports.Client.prototype.cacheServer = function(id, cb, members) {
|
||||
exports.Client.prototype.cacheServer = function( id, cb, members ) {
|
||||
|
||||
if ( this.serverList.filter("id", id).length > 0 ) {
|
||||
return;
|
||||
}
|
||||
if ( this.serverList.filter( "id", id ).length > 0 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var self = this;
|
||||
var self = this;
|
||||
|
||||
request
|
||||
.get(Endpoints.SERVERS + "/" + id)
|
||||
.set("authorization", this.token)
|
||||
.end(function(err, res) {
|
||||
var dat = res.body;
|
||||
var server = new Server(dat.region, dat.owner_id, dat.name, dat.roles[0].id, members || dat.members);
|
||||
request
|
||||
.get( Endpoints.SERVERS + "/" + id )
|
||||
.set( "authorization", this.token )
|
||||
.end( function( err, res ) {
|
||||
var dat = res.body;
|
||||
var server = new Server( dat.region, dat.owner_id, dat.name, dat.roles[ 0 ].id, members || dat.members );
|
||||
|
||||
request
|
||||
.get(Endpoints.SERVERS + "/" + id + "/channels")
|
||||
.set("authorization", self.token)
|
||||
.end(function(err, res){
|
||||
request
|
||||
.get( Endpoints.SERVERS + "/" + id + "/channels" )
|
||||
.set( "authorization", self.token )
|
||||
.end( function( err, res ) {
|
||||
|
||||
var channelList = res.body;
|
||||
for(channel of channelList){
|
||||
server.channels.add( new Channel(channel, server) );
|
||||
}
|
||||
var channelList = res.body;
|
||||
for ( channel of channelList ) {
|
||||
server.channels.add( new Channel( channel, server ) );
|
||||
}
|
||||
|
||||
self.serverList.add(server);
|
||||
self.serverList.add( server );
|
||||
|
||||
cb(server);
|
||||
});
|
||||
});
|
||||
cb( server );
|
||||
} );
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
exports.Client.prototype.login = function(email, password) {
|
||||
exports.Client.prototype.login = function( email, password ) {
|
||||
|
||||
var client = this;
|
||||
var client = this;
|
||||
|
||||
var details = {
|
||||
email: email,
|
||||
password: password
|
||||
};
|
||||
var details = {
|
||||
email: email,
|
||||
password: password
|
||||
};
|
||||
|
||||
request
|
||||
.post(Endpoints.LOGIN)
|
||||
.send(details)
|
||||
.end(function(err, res) {
|
||||
if (!res.ok) {
|
||||
client.triggerEvent("disconnected", {
|
||||
reason : "failed to log in",
|
||||
error : err
|
||||
});
|
||||
} else {
|
||||
client.token = res.body.token;
|
||||
client.loggedIn = true;
|
||||
client.connectWebsocket();
|
||||
}
|
||||
});
|
||||
request
|
||||
.post( Endpoints.LOGIN )
|
||||
.send( details )
|
||||
.end( function( err, res ) {
|
||||
if ( !res.ok ) {
|
||||
client.triggerEvent( "disconnected", {
|
||||
reason: "failed to log in",
|
||||
error: err
|
||||
} );
|
||||
} else {
|
||||
client.token = res.body.token;
|
||||
client.loggedIn = true;
|
||||
client.connectWebsocket();
|
||||
}
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
exports.Client.prototype.connectWebsocket = function(cb) {
|
||||
exports.Client.prototype.connectWebsocket = function( cb ) {
|
||||
|
||||
var client = this;
|
||||
var client = this;
|
||||
|
||||
this.websocket = new WebSocket(Endpoints.WEBSOCKET_HUB);
|
||||
this.websocket.onclose = function(e) {
|
||||
client.triggerEvent("disconnected", {
|
||||
reason : "websocket disconnected",
|
||||
error : e
|
||||
});
|
||||
};
|
||||
this.websocket.onmessage = function(e) {
|
||||
this.websocket = new WebSocket( Endpoints.WEBSOCKET_HUB );
|
||||
this.websocket.onclose = function( e ) {
|
||||
client.triggerEvent( "disconnected", {
|
||||
reason: "websocket disconnected",
|
||||
error: e
|
||||
} );
|
||||
};
|
||||
this.websocket.onmessage = function( e ) {
|
||||
|
||||
var dat = JSON.parse(e.data);
|
||||
switch (dat.op) {
|
||||
var dat = JSON.parse( e.data );
|
||||
switch ( dat.op ) {
|
||||
|
||||
case 0:
|
||||
if (dat.t === "READY") {
|
||||
case 0:
|
||||
if ( dat.t === "READY" ) {
|
||||
|
||||
var data = dat.d;
|
||||
var data = dat.d;
|
||||
|
||||
self = this;
|
||||
setInterval(function() {
|
||||
self.keepAlive.apply(self);
|
||||
}, data.heartbeat_interval);
|
||||
self = this;
|
||||
setInterval( function() {
|
||||
self.keepAlive.apply( self );
|
||||
}, data.heartbeat_interval );
|
||||
|
||||
var _servers = data.guilds,
|
||||
servers = [];
|
||||
var _servers = data.guilds,
|
||||
servers = [];
|
||||
|
||||
var cached = 0, toCache = _servers.length;
|
||||
var cached = 0,
|
||||
toCache = _servers.length;
|
||||
|
||||
for (x in _servers) {
|
||||
_server = _servers[x];
|
||||
client.cacheServer(_server.roles[0].id, function(server) {
|
||||
cached++;
|
||||
if(cached >= toCache){
|
||||
client.triggerEvent("ready");
|
||||
}
|
||||
}, _server.members);
|
||||
}
|
||||
for ( x in _servers ) {
|
||||
_server = _servers[ x ];
|
||||
client.cacheServer( _server.roles[ 0 ].id, function( server ) {
|
||||
cached++;
|
||||
if ( cached >= toCache ) {
|
||||
client.triggerEvent( "ready" );
|
||||
}
|
||||
}, _server.members );
|
||||
}
|
||||
|
||||
client.user = new User(data.user.username, data.user.id, data.user.discriminator, data.user.avatar);
|
||||
} else if (dat.t === "MESSAGE_CREATE") {
|
||||
var data = dat.d;
|
||||
client.user = new User( data.user.username, data.user.id, data.user.discriminator, data.user.avatar );
|
||||
} else if ( dat.t === "MESSAGE_CREATE" ) {
|
||||
var data = dat.d;
|
||||
|
||||
var channel = client.channelFromId(data.channel_id);
|
||||
var channel = client.channelFromId( data.channel_id );
|
||||
|
||||
var message = new Message(data, channel);
|
||||
var message = new Message( data, channel );
|
||||
|
||||
client.triggerEvent("message", [message]);
|
||||
client.triggerEvent( "message", [ message ] );
|
||||
|
||||
} else if (dat.t === "PRESENCE_UPDATE"){
|
||||
} else if ( dat.t === "PRESENCE_UPDATE" ) {
|
||||
|
||||
var data = dat.d;
|
||||
var data = dat.d;
|
||||
|
||||
client.triggerEvent("presence", [new User(data.user), data.status, client.serverList.filter("id", data.guild_id, true)]);
|
||||
client.triggerEvent( "presence", [ new User( data.user ), data.status, client.serverList.filter( "id", data.guild_id, true ) ] );
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
this.websocket.sendPacket = function(p) {
|
||||
this.send(JSON.stringify(p));
|
||||
}
|
||||
this.websocket.keepAlive = function() {
|
||||
};
|
||||
this.websocket.sendPacket = function( p ) {
|
||||
this.send( JSON.stringify( p ) );
|
||||
}
|
||||
this.websocket.keepAlive = function() {
|
||||
|
||||
if(this.readyState !== 1)
|
||||
return false;
|
||||
if ( this.readyState !== 1 )
|
||||
return false;
|
||||
|
||||
this.sendPacket({
|
||||
op: 1,
|
||||
d: Date.now()
|
||||
});
|
||||
this.sendPacket( {
|
||||
op: 1,
|
||||
d: Date.now()
|
||||
} );
|
||||
|
||||
}
|
||||
this.websocket.onopen = function() {
|
||||
}
|
||||
this.websocket.onopen = function() {
|
||||
|
||||
var connDat = {
|
||||
op: 2,
|
||||
d: {
|
||||
token: client.token,
|
||||
v: 2
|
||||
}
|
||||
};
|
||||
var connDat = {
|
||||
op: 2,
|
||||
d: {
|
||||
token: client.token,
|
||||
v: 2
|
||||
}
|
||||
};
|
||||
|
||||
connDat.d.properties = {
|
||||
"$os": "DiscordJS",
|
||||
"$browser": "Dischromecord", // ;)
|
||||
"$device": "discord.js",
|
||||
"$referrer": "",
|
||||
"$referring_domain": ""
|
||||
};
|
||||
connDat.d.properties = {
|
||||
"$os": "discord.js",
|
||||
"$browser": "discord.js",
|
||||
"$device": "discord.js",
|
||||
"$referrer": "",
|
||||
"$referring_domain": ""
|
||||
};
|
||||
|
||||
this.sendPacket(connDat);
|
||||
}
|
||||
this.sendPacket( connDat );
|
||||
}
|
||||
}
|
||||
|
||||
exports.Client.prototype.logout = function() {
|
||||
|
||||
var client = this;
|
||||
var client = this;
|
||||
|
||||
request
|
||||
.post(Endpoints.LOGOUT)
|
||||
.end(function() {
|
||||
client.loggedIn = false;
|
||||
});
|
||||
request
|
||||
.post( Endpoints.LOGOUT )
|
||||
.end( function() {
|
||||
client.loggedIn = false;
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
exports.Client.prototype.createServer = function(details, cb) {
|
||||
exports.Client.prototype.createServer = function( details, cb ) {
|
||||
|
||||
var client = this;
|
||||
var client = this;
|
||||
|
||||
request
|
||||
.post(Endpoints.SERVERS)
|
||||
.set("authorization", client.token)
|
||||
.send(details)
|
||||
.end(function(err, res) {
|
||||
if (!res.ok) {
|
||||
cb(err);
|
||||
} else {
|
||||
cb(new Server(res.body));
|
||||
}
|
||||
});
|
||||
request
|
||||
.post( Endpoints.SERVERS )
|
||||
.set( "authorization", client.token )
|
||||
.send( details )
|
||||
.end( function( err, res ) {
|
||||
if ( !res.ok ) {
|
||||
cb( err );
|
||||
} else {
|
||||
cb( new Server( res.body ) );
|
||||
}
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
exports.Client.prototype.sendMessage = function(channel, message, cb, _mentions) {
|
||||
exports.Client.prototype.sendMessage = function( channel, message, cb, _mentions, options ) {
|
||||
|
||||
var cb = cb || function(){};
|
||||
options = options || {};
|
||||
|
||||
for (mention in _mentions) {
|
||||
_mentions[mention] = _mentions[mention].id;
|
||||
}
|
||||
var cb = cb || function() {};
|
||||
|
||||
var client = this;
|
||||
var details = {
|
||||
content: message.substring(0,2000),
|
||||
mentions: _mentions || []
|
||||
};
|
||||
if ( _mentions === false ) {
|
||||
//mentions is false, explicitly don't want to mention someone
|
||||
_mentions = [];
|
||||
} else if ( _mentions === true || _mentions === "auto" || _mentions == null || _mentions == undefined ) {
|
||||
//want to auto sort mentions
|
||||
_mentions = [];
|
||||
var mentionsArray = message.match( /<[^>]*>/g ) || [];
|
||||
for ( mention of mentionsArray ) {
|
||||
_mentions.push( mention.substring( 2, mention.length - 1 ) );
|
||||
}
|
||||
|
||||
request
|
||||
.post(Endpoints.CHANNELS + "/" + channel.id + "/messages")
|
||||
.set("authorization", client.token)
|
||||
.send(details)
|
||||
.end(function(err, res) {
|
||||
cb(new Message(res.body, client.channelFromId(res.body.channel_id)));
|
||||
});
|
||||
} else if ( _mentions instanceof Array ) {
|
||||
//specific mentions
|
||||
for ( mention in _mentions ) {
|
||||
_mentions[ mention ] = _mentions[ mention ].id;
|
||||
}
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
var client = this;
|
||||
var details = {
|
||||
content: message.substring( 0, 2000 ),
|
||||
mentions: _mentions || []
|
||||
};
|
||||
|
||||
request
|
||||
.post( Endpoints.CHANNELS + "/" + channel.id + "/messages" )
|
||||
.set( "authorization", client.token )
|
||||
.send( details )
|
||||
.end( function( err, res ) {
|
||||
var msg = new Message( res.body, client.channelFromId( res.body.channel_id ) );
|
||||
if ( options.selfDestruct ) {
|
||||
setTimeout( function() {
|
||||
client.deleteMessage( msg );
|
||||
}, options.selfDestruct );
|
||||
}
|
||||
cb( msg );
|
||||
} );
|
||||
}
|
||||
|
||||
exports.Client.prototype.deleteMessage = function(message) {
|
||||
exports.Client.prototype.deleteMessage = function( message ) {
|
||||
|
||||
if(!message)
|
||||
return false;
|
||||
if ( !message )
|
||||
return false;
|
||||
|
||||
var client = this;
|
||||
var client = this;
|
||||
|
||||
request
|
||||
.del(Endpoints.CHANNELS + "/" + message.channel.id + "/messages/" + message.id)
|
||||
.set("authorization", client.token)
|
||||
.end(function(err, res) {
|
||||
|
||||
});
|
||||
request
|
||||
.del( Endpoints.CHANNELS + "/" + message.channel.id + "/messages/" + message.id )
|
||||
.set( "authorization", client.token )
|
||||
.end();
|
||||
}
|
||||
|
||||
exports.Client.prototype.channelFromId = function(id){
|
||||
var channelList = this.serverList.concatSublists("channels", "id");
|
||||
var channel = channelList.filter("id", id, true);
|
||||
exports.Client.prototype.channelFromId = function( id ) {
|
||||
var channelList = this.serverList.concatSublists( "channels", "id" );
|
||||
var channel = channelList.filter( "id", id, true );
|
||||
|
||||
return channel;
|
||||
return channel;
|
||||
}
|
||||
|
||||
exports.Client.prototype.getChannelLogs = function(channel, amount, cb){
|
||||
exports.Client.prototype.getChannelLogs = function( channel, amount, cb ) {
|
||||
amount = amount || 0;
|
||||
var client = this;
|
||||
|
||||
amount = amount || 0;
|
||||
var client = this;
|
||||
request
|
||||
.get( Endpoints.CHANNELS + "/" + channel.id + "/messages?limit=" + amount )
|
||||
.set( "authorization", client.token )
|
||||
.end( function( err, res ) {
|
||||
|
||||
request
|
||||
.get(Endpoints.CHANNELS + "/" + channel.id + "/messages?limit="+amount)
|
||||
.set("authorization", client.token)
|
||||
.end(function(err, res){
|
||||
if ( err ) {
|
||||
cb( new List( "id" ) );
|
||||
return;
|
||||
}
|
||||
|
||||
if(err){
|
||||
cb(new List("id"));
|
||||
return;
|
||||
}
|
||||
var datList = new List( "id" );
|
||||
|
||||
var datList = new List("id");
|
||||
|
||||
for(item of res.body){
|
||||
datList.add( new Message(item, channel) );
|
||||
}
|
||||
|
||||
cb(datList);
|
||||
|
||||
});
|
||||
for ( item of res.body ) {
|
||||
datList.add( new Message( item, channel ) );
|
||||
}
|
||||
|
||||
cb( datList );
|
||||
} );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user