Started again

This commit is contained in:
hydrabolt
2015-10-31 13:56:08 +00:00
parent d70453b38b
commit 3a04a15066
21 changed files with 1 additions and 3600 deletions

File diff suppressed because one or more lines are too long

View File

@@ -1,162 +0,0 @@
class ChannelPermissions {
constructor(data, channel) {
var self = this;
function getBit(x) {
return ((self.packed >>> x) & 1) === 1;
}
this.type = data.type; //either member or role
this.id = data.id;
if (this.type === "member") {
this.packed = channel.server.getMember("id", data.id).evalPerms.packed;
} else {
this.packed = channel.server.getRole("id", data.id).packed;
}
this.packed = this.packed & ~data.deny;
this.packed = this.packed | data.allow;
this.deny = data.deny;
this.allow = data.allow;
}
serialise() {
return {
createInstantInvite: this.createInstantInvite,
manageRoles: this.manageRoles,
manageChannels: this.manageChannels,
readMessages: this.readMessages,
sendMessages: this.sendMessages,
sendTTSMessages: this.sendTTSMessages,
manageMessages: this.manageMessages,
embedLinks: this.embedLinks,
attachFiles: this.attachFiles,
readMessageHistory: this.readMessageHistory,
mentionEveryone: this.mentionEveryone,
voiceConnect: this.voiceConnect,
voiceSpeak: this.voiceSpeak,
voiceMuteMembers: this.voiceMuteMembers,
voiceDeafenMembers: this.voiceDeafenMembers,
voiceMoveMember: this.voiceMoveMembers,
voiceUseVoiceActivation: this.voiceUseVoiceActivation
}
}
serialize(){
return this.serialise();
}
get asAllowDisallow() {
var allow = 0, disallow = 0;
function ad(value, position) {
if (value) {
allow |= (1 << position);
} else {
disallow |= (1 << position);
}
}
ad(this.createInstantInvite, 0);
ad(this.manageRoles, 3);
ad(this.manageChannels, 4);
ad(this.readMessages, 10);
ad(this.sendMessages, 11);
ad(this.sendTTSMessages, 12);
ad(this.manageMessages, 13);
ad(this.embedLinks, 14);
ad(this.attachFiles, 15);
ad(this.readMessageHistory, 16);
ad(this.mentionEveryone, 17);
ad(this.voiceConnect, 20);
ad(this.voiceSpeak, 21);
ad(this.voiceMuteMembers, 22);
ad(this.voiceDeafenMembers, 23);
ad(this.voiceMoveMembers, 24);
ad(this.voiceUseVoiceActivation, 25);
return {
allow : allow,
deny : disallow
};
}
get createInstantInvite() { return this.getBit(0); }
set createInstantInvite(val) { this.setBit(0, val); }
get manageRoles() { return this.getBit(3); }
set manageRoles(val) { this.setBit(3, val); }
get manageChannels() { return this.getBit(4); }
set manageChannels(val) { this.setBit(4, val); }
get readMessages() { return this.getBit(10); }
set readMessages(val) { this.setBit(10, val); }
get sendMessages() { return this.getBit(11); }
set sendMessages(val) { this.setBit(11, val); }
get sendTTSMessages() { return this.getBit(12); }
set sendTTSMessages(val) { this.setBit(12, val); }
get manageMessages() { return this.getBit(13); }
set manageMessages(val) { this.setBit(13, val); }
get embedLinks() { return this.getBit(14); }
set embedLinks(val) { this.setBit(14, val); }
get attachFiles() { return this.getBit(15); }
set attachFiles(val) { this.setBit(15, val); }
get readMessageHistory() { return this.getBit(16); }
set readMessageHistory(val) { this.setBit(16, val); }
get mentionEveryone() { return this.getBit(17); }
set mentionEveryone(val) { this.setBit(17, val); }
get voiceConnect() { return this.getBit(20); }
set voiceConnect(val) { this.setBit(20, val); }
get voiceSpeak() { return this.getBit(21); }
set voiceSpeak(val) { this.setBit(21, val); }
get voiceMuteMembers() { return this.getBit(22); }
set voiceMuteMembers(val) { this.setBit(22, val); }
get voiceDeafenMembers() { return this.getBit(23); }
set voiceDeafenMembers(val) { this.setBit(23, val); }
get voiceMoveMembers() { return this.getBit(24); }
set voiceMoveMembers(val) { this.setBit(24, val); }
get voiceUseVoiceActivation() { return this.getBit(25); }
set voiceUseVoiceActivation(val) { this.setBit(25, val); }
getBit(x) {
if (((this.packed >>> 3) & 1) === 1) {
return true;
}
return ((this.packed >>> x) & 1) === 1;
}
setBit(location, value) {
if (value) {
// allow that permission
this.packed |= (1 << location);
} else {
// not allowed
this.packed &= (1 << location);
}
}
}
module.exports = ChannelPermissions;

File diff suppressed because it is too large Load Diff

View File

@@ -1,21 +0,0 @@
class Embed{
constructor(data){
this.url = data.url;
this.type = data.type;
this.title = data.title;
this.thumbnail = data.thumbnail;
//width
//height
//url
//proxy_url
this.provider = data.provider;
//url
//name
this.description = data.description;
this.author = data.author;
//url
//name
}
}
module.exports = Embed;

View File

@@ -1,17 +0,0 @@
var ImageEmbed = require("./ImageEmbed.js"),
VideoEmbed = require("./VideoEmbed.js"),
LinkEmbed = require("./LinkEmbed.js");
exports.createEmbed = function(data){
switch(data.type){
case "image":
return new ImageEmbed(data);
break;
case "video":
return new VideoEmbed(data);
break;
case "link":
return new LinkEmbed(data);
break;
}
}

View File

@@ -1,9 +0,0 @@
var Embed = require("./Embed.js");
class ImageEmbed extends Embed{
constructor(data){
super(data);
}
}
module.exports = ImageEmbed;

View File

@@ -1,9 +0,0 @@
var Embed = require("./Embed.js");
class LinkEmbed extends Embed{
constructor(data){
super(data);
}
}
module.exports = LinkEmbed;

View File

@@ -1,13 +0,0 @@
var Embed = require("./Embed.js");
class VideoEmbed extends Embed{
constructor(data){
super(data);
this.video = data.video;
//width
//height
//url
}
}
module.exports = VideoEmbed;

View File

@@ -1,11 +0,0 @@
exports.BASE_DOMAIN = "discordapp.com";
exports.BASE = `https://${exports.BASE_DOMAIN}`;
exports.WEBSOCKET_HUB = `wss://${exports.BASE_DOMAIN}/hub`;
exports.API = `${exports.BASE}/api`;
exports.AUTH = `${exports.API}/auth`;
exports.LOGIN = `${exports.AUTH}/login`;
exports.LOGOUT = `${exports.AUTH}/logout`;
exports.USERS = `${exports.API}/users`;
exports.SERVERS = `${exports.API}/guilds`;
exports.CHANNELS = `${exports.API}/channels`;

View File

@@ -1,110 +0,0 @@
class EvaluatedPermissions {
constructor(data) {
var self = this;
this.packed = data;
if(this.getBit(3))
this.packed = 4294967295;
}
serialise() {
return {
createInstantInvite : this.createInstantInvite,
manageRoles : this.manageRoles,
manageChannels : this.manageChannels,
readMessages : this.readMessages,
sendMessages : this.sendMessage,
sendTTSMessages : this.sendTTSMessages,
manageMessages : this.manageMessages,
embedLinks : this.embedLinks,
attachFiles : this.attachFiles,
readMessageHistory : this.readMessageHistory,
mentionEveryone : this.mentionEveryone,
voiceConnect : this.voiceConnect,
voiceSpeak : this.voiceSpeak,
voiceMuteMembers : this.voiceMuteMembers,
voiceDeafenMembers : this.voiceDeafenMembers,
voiceMoveMember : this.voiceMoveMembers,
voiceUseVoiceActivation : this.voiceUseVoiceActivation
}
}
serialize(){
return this.serialise();
}
get createInstantInvite() { return this.getBit(0); }
set createInstantInvite(val) { this.setBit(0, val); }
get manageRoles() { return this.getBit(3); }
set manageRoles(val) { this.setBit(3, val); }
get manageChannels() { return this.getBit(4); }
set manageChannels(val) { this.setBit(4, val); }
get readMessages() { return this.getBit(10); }
set readMessages(val) { this.setBit(10, val); }
get sendMessages() { return this.getBit(11); }
set sendMessages(val) { this.setBit(11, val); }
get sendTTSMessages() { return this.getBit(12); }
set sendTTSMessages(val) { this.setBit(12, val); }
get manageMessages() { return this.getBit(13); }
set manageMessages(val) { this.setBit(13, val); }
get embedLinks() { return this.getBit(14); }
set embedLinks(val) { this.setBit(14, val); }
get attachFiles() { return this.getBit(15); }
set attachFiles(val) { this.setBit(15, val); }
get readMessageHistory() { return this.getBit(16); }
set readMessageHistory(val) { this.setBit(16, val); }
get mentionEveryone() { return this.getBit(17); }
set mentionEveryone(val) { this.setBit(17, val); }
get voiceConnect() { return this.getBit(20); }
set voiceConnect(val) { this.setBit(20, val); }
get voiceSpeak() { return this.getBit(21); }
set voiceSpeak(val) { this.setBit(21, val); }
get voiceMuteMembers() { return this.getBit(22); }
set voiceMuteMembers(val) { this.setBit(22, val); }
get voiceDeafenMembers() { return this.getBit(23); }
set voiceDeafenMembers(val) { this.setBit(23, val); }
get voiceMoveMembers() { return this.getBit(24); }
set voiceMoveMembers(val) { this.setBit(24, val); }
get voiceUseVoiceActivation() { return this.getBit(25); }
set voiceUseVoiceActivation(val) { this.setBit(25, val); }
getBit(x) {
if( ((this.packed >>> 3) & 1) === 1 ){
return true;
}
return ((this.packed >>> x) & 1) === 1;
}
setBit(location, value){
if(value){
// allow that permission
this.packed |= (1 << location);
}else{
// not allowed
this.packed &= (1 << location);
}
}
}
module.exports = EvaluatedPermissions;

View File

@@ -1,107 +0,0 @@
var User = require("./user.js");
var ServerPermissions = require("./ServerPermissions.js");
var EvaluatedPermissions = require("./EvaluatedPermissions.js");
class Member extends User{
constructor(user, server, roles){
super(user); // should work, we are basically creating a Member that has the same properties as user and a few more
this.serverID = server.id;
this.client = server.client;
this.rawRoles = roles;
}
get server(){
return this.client.getServer("id", this.serverID);
}
get roles(){
var ufRoles = [ this.server.getRole("id", this.server.id) ];
for(var rawRole of this.rawRoles){
ufRoles.push( this.server.getRole("id", rawRole) );
}
return ufRoles;
}
get evalPerms(){
var basePerms = this.roles, //cache roles as it can be slightly expensive
basePerm = basePerms[0].packed;
basePerms = basePerms || [];
for(var perm of basePerms){
basePerm = basePerm | perm.packed;
}
return new EvaluatedPermissions(basePerm);
}
removeRole(role){
this.rawRoles.splice(this.rawRoles.indexOf(role.id), 1);
}
addRole(role){
if(this.rawRoles.indexOf(role.id) == -1){
this.rawRoles.push(role.id);
}
}
hasRole(role){
for(var _role of this.roles){
if(role.id === _role.id)
return true;
}
return false;
}
permissionsIn(channel){
if(channel.server.ownerID === this.id){
return new EvaluatedPermissions(4294967295); //all perms
}
var affectingOverwrites = [];
var affectingMemberOverwrites = [];
for(var overwrite of channel.roles) {
if(overwrite.id == this.serverID) { // @everyone for channel
affectingOverwrites.push(overwrite);
break;
}
}
for(var overwrite of channel.roles){
if(overwrite.id === this.id && overwrite.type === "member"){
affectingMemberOverwrites.push(overwrite);
}else if( this.rawRoles.indexOf(overwrite.id) !== -1 ){
affectingOverwrites.push(overwrite);
}
}
if(affectingOverwrites.length === 0 && affectingMemberOverwrites.length === 0){
return this.evalPerms;
}
var finalPacked = (affectingOverwrites.length !== 0 ? affectingOverwrites[0].packed : affectingMemberOverwrites[0].packed);
for(var overwrite of affectingOverwrites){
finalPacked = finalPacked & ~overwrite.deny;
finalPacked = finalPacked | overwrite.allow;
}
for(var overwrite of affectingMemberOverwrites){
finalPacked = finalPacked & ~overwrite.deny;
finalPacked = finalPacked | overwrite.allow;
}
return new EvaluatedPermissions(finalPacked);
}
}
module.exports = Member;

View File

@@ -1,35 +0,0 @@
class PMChannel {
constructor(data, client) {
this.user = client.getUser("id", data.recipient.id);
this.id = data.id;
this.messages = [];
this.client = client;
}
addMessage(data){
if(!this.getMessage("id", data.id)){
this.messages.push(data);
}
return this.getMessage("id", data.id);
}
getMessage(key, value){
if(this.messages.length > 1000){
this.messages.splice(0,1);
}
for(var message of this.messages){
if(message[key] === value){
return message;
}
}
return null;
}
get isPrivate(){
return true;
}
}
module.exports = PMChannel;

View File

@@ -1,132 +0,0 @@
class ServerPermissions {
constructor(data, server) {
var self = this;
function getBit(x) {
return ((self.packed >>> x) & 1) === 1;
}
this.managed = data.managed || false;
this.position = data.position || 1;
this.hoist = data.hoist || false;
this.color = data.color || 0;
this.packed = data.permissions || (data.name === "@everyone" ? 36953089 : 0);
this.name = data.name || "new role";
this.id = data.id || null;
this.server = server;
}
serialise() {
return {
createInstantInvite: this.createInstantInvite,
manageRoles: this.manageRoles,
manageChannels: this.manageChannels,
readMessages: this.readMessages,
sendMessages: this.sendMessages,
sendTTSMessages: this.sendTTSMessages,
manageMessages: this.manageMessages,
embedLinks: this.embedLinks,
attachFiles: this.attachFiles,
readMessageHistory: this.readMessageHistory,
mentionEveryone: this.mentionEveryone,
voiceConnect: this.voiceConnect,
voiceSpeak: this.voiceSpeak,
voiceMuteMembers: this.voiceMuteMembers,
voiceDeafenMembers: this.voiceDeafenMembers,
voiceMoveMembers: this.voiceMoveMembers,
voiceUseVoiceActivation: this.voiceUseVoiceActivation
}
}
serialize(){
return this.serialise();
}
get createInstantInvite() { return this.getBit(0); }
set createInstantInvite(val) { this.setBit(0, val); }
get banMembers() { return this.getBit(1); }
set banMembers(val) { this.setBit(1, val); }
get kickMembers() { return this.getBit(2); }
set kickMembers(val) { this.setBit(2, val); }
get manageRoles() { return this.getBit(3); }
set manageRoles(val) { this.setBit(3, val); }
get manageChannels() { return this.getBit(4); }
set manageChannels(val) { this.setBit(4, val); }
get manageServer() { return this.getBit(5); }
set manageServer(val) { this.setBit(5, val); }
get readMessages() { return this.getBit(10); }
set readMessages(val) { this.setBit(10, val); }
get sendMessages() { return this.getBit(11); }
set sendMessages(val) { this.setBit(11, val); }
get sendTTSMessages() { return this.getBit(12); }
set sendTTSMessages(val) { this.setBit(12, val); }
get manageMessages() { return this.getBit(13); }
set manageMessages(val) { this.setBit(13, val); }
get embedLinks() { return this.getBit(14); }
set embedLinks(val) { this.setBit(14, val); }
get attachFiles() { return this.getBit(15); }
set attachFiles(val) { this.setBit(15, val); }
get readMessageHistory() { return this.getBit(16); }
set readMessageHistory(val) { this.setBit(16, val); }
get mentionEveryone() { return this.getBit(17); }
set mentionEveryone(val) { this.setBit(17, val); }
get voiceConnect() { return this.getBit(20); }
set voiceConnect(val) { this.setBit(20, val); }
get voiceSpeak() { return this.getBit(21); }
set voiceSpeak(val) { this.setBit(21, val); }
get voiceMuteMembers() { return this.getBit(22); }
set voiceMuteMembers(val) { this.setBit(22, val); }
get voiceDeafenMembers() { return this.getBit(23); }
set voiceDeafenMembers(val) { this.setBit(23, val); }
get voiceMoveMembers() { return this.getBit(24); }
set voiceMoveMembers(val) { this.setBit(24, val); }
get voiceUseVoiceActivation() { return this.getBit(25); }
set voiceUseVoiceActivation(val) { this.setBit(25, val); }
getBit(x) {
if (((this.packed >>> 3) & 1) === 1) {
return true;
}
return ((this.packed >>> x) & 1) === 1;
}
setBit(location, value) {
if (value) {
// allow that permission
this.packed |= (1 << location);
} else {
// not allowed
this.packed &= ~(1 << location);
}
}
toString() {
return this.name;
}
}
module.exports = ServerPermissions;

View File

@@ -1,11 +0,0 @@
var Channel = require("./channel.js");
class VoiceChannel extends Channel{
constructor(data, server){
super(data, server);
}
}

View File

@@ -1,90 +0,0 @@
var ChannelPermissions = require("./ChannelPermissions.js");
class Channel {
constructor(data, server) {
this.serverID = server.id;
this.client = server.client;
this.name = data.name;
this.type = data.type;
this.topic = data.topic;
this.id = data.id;
this.messages = [];
this.roles = [];
if(data.permission_overwrites)
for (var role of data.permission_overwrites) {
this.roles.push( new ChannelPermissions(role, this) );
}
//this.isPrivate = isPrivate; //not sure about the implementation of this...
}
get server(){
return this.client.getServer("id", this.serverID);
}
get permissionOverwrites() {
return this.roles;
}
get permissions() {
return this.roles;
}
permissionsOf(member){
var mem = this.server.getMember("id", member.id);
if(mem){
return mem.permissionsIn(this);
}else{
return null;
}
}
equals(object) {
return (object && object.id === this.id);
}
addMessage(data) {
if (this.messages.length > 1000) {
this.messages.splice(0, 1);
}
if (!this.getMessage("id", data.id)) {
this.messages.push(data);
}
return this.getMessage("id", data.id);
}
getMessage(key, value) {
for (var message of this.messages) {
if (message[key] === value) {
return message;
}
}
return null;
}
toString() {
return "<#" + this.id + ">";
}
get isPrivate() {
return false;
}
get users() {
return this.server.members;
}
get members() {
return this.server.members;
}
}
module.exports = Channel;

View File

@@ -1,51 +0,0 @@
var request = require("superagent");
var Endpoints = require("./Endpoints.js");
var Client = require("./Client.js");
var Color = require("../ref/colours.js");
var Discord = {
Endpoints : Endpoints,
Client : Client,
Color : Color,
User : require("./user.js"),
Server : require("./server.js"),
Channel : require("./channel.js"),
Message : require("./message.js"),
Invite : require("./invite.js"),
PMChannel : require("./PMChannel.js"),
ServerPermissions : require("./ServerPermissions.js"),
ChannelPermissions : require("./ChannelPermissions.js"),
EvaluatedPermissiosn : require("./EvaluatedPermissions.js"),
VoiceChannel : require("./VoiceChannel.js"),
gameMap : require("../ref/gameMap.json"),
Embed : require("./Embeds/Embed.js"),
LinkEmbed : require("./Embeds/LinkEmbed.js"),
VideoEmbed : require("./Embeds/VideoEmbed.js"),
ImageEmbed : require("./Embeds/ImageEmbed.js"),
}
Discord.patchStrings = function () {
defineProperty("bold", "**");
defineProperty("underline", "__");
defineProperty("strike", "~~");
defineProperty("code", "`");
defineProperty("codeblock", "```");
defineProperty("newline", "\n");
Object.defineProperty(String.prototype, "italic", {
get: function () {
return "*" + this + "*";
}
});
function defineProperty(name, joiner) {
Object.defineProperty(String.prototype, name, {
get: function () {
return joiner + this + joiner;
}
});
}
}
module.exports = Discord;

View File

@@ -1,282 +0,0 @@
/*
this file is deprecated and should only be used as
reference.
*/
var request = require( "superagent" );
var Endpoints = require( "./endpoints.js" );
var Internal = {};
Internal.XHR = {};
Internal.WebSocket = {};
Internal.WebSocket.properties = {
"$os": "discord.js",
"$browser": "discord.js",
"$device": "discord.js",
"$referrer": "",
"$referring_domain": ""
};
Internal.XHR.login = function( email, password, callback ) {
request
.post( Endpoints.LOGIN )
.send( {
email: email,
password: password
} )
.end( function( err, res ) {
if ( err ) {
callback( err );
} else {
callback( null, res.body.token );
}
} );
}
Internal.XHR.logout = function( token, callback ) {
request
.post( Endpoints.LOGOUT )
.end( function( err, res ) {
err ? callback( err ) : callback( null );
} );
}
Internal.XHR.createServer = function( token, name, region, callback ) {
request
.post( Endpoints.SERVERS )
.set( "authorization", token )
.send( {
name: name,
region: region
} )
.end( function( err, res ) {
if ( err ) {
callback( err );
} else {
callback( null, res.body );
}
} );
}
Internal.XHR.leaveServer = function( token, serverId, callback ) {
request
.del( Endpoints.SERVERS + "/" + serverId )
.set( "authorization", token )
.end( function( err, res ) {
err ? callback( err ) : callback( null );
} );
}
Internal.XHR.createInvite = function( token, channelId, options, callback ) {
request
.post( Endpoints.CHANNELS + "/" + channelId + "/invites" )
.set( "authorization", token )
.send( options )
.end( function( err, res ) {
if ( err ) {
callback( err );
} else {
callback( null, res.body );
}
} )
}
Internal.XHR.startPM = function( token, selfID, userID, callback ) {
request
.post( Endpoints.USERS + "/" + selfID + "/channels" )
.set( "authorization", token )
.send( {
recipient_id: userID
} )
.end( function( err, res ) {
if ( err ) {
callback( err );
} else {
callback( null, res.body );
}
} );
}
Internal.XHR.sendMessage = function( token, channelID, messageParameters, callback ) {
request
.post( Endpoints.CHANNELS + "/" + channelID + "/messages" )
.set( "authorization", token )
.send( messageParameters )
.end( function( err, res ) {
if ( err ) {
callback( err );
} else {
callback( null, res.body );
}
} );
}
Internal.XHR.sendFile = function( token, channelID, file, fileName, callback ) {
request
.post( Endpoints.CHANNELS + "/" + channelID + "/messages" )
.set( "authorization", token )
.attach("file", file, fileName)
.end( function( err, res ) {
if ( err ) {
callback( err );
} else {
callback( null, res.body );
}
} );
}
Internal.XHR.deleteMessage = function( token, channelID, messageID, callback ) {
request
.del( Endpoints.CHANNELS + "/" + channelID + "/messages/" + messageID )
.set( "authorization", token )
.end( function( err ) {
err ? callback( err ) : callback( null );
} );
}
Internal.XHR.updateMessage = function( token, channelID, messageID, messageParameters, callback ) {
request
.patch( Endpoints.CHANNELS + "/" + channelID + "/messages/" + messageID )
.set( "authorization", token )
.send( messageParameters )
.end( function( err, res ) {
if ( err ) {
callback( err );
} else {
callback( null, res.body );
}
} );
}
Internal.XHR.getChannelLogs = function( token, channelID, amount, callback ) {
request
.get( Endpoints.CHANNELS + "/" + channelID + "/messages?limit=" + amount )
.set( "authorization", token )
.end( function( err, res ) {
if ( err ) {
callback( err );
} else {
callback( null, res.body );
}
} );
}
Internal.XHR.createChannel = function( token, serverID, name, type, callback ) {
request
.post( Endpoints.SERVERS + "/" + serverID + "/channels" )
.set( "authorization", token )
.send( {
name: name,
type: type
} )
.end( function( err, res ) {
if ( err ) {
callback( err );
} else {
callback( null, res.body );
}
} );
}
Internal.XHR.deleteChannel = function( token, channelID, callback ) {
request
.del( Endpoints.CHANNELS + "/" + channelID )
.set( "authorization", token )
.end( function( err ) {
err ? callback( err ) : callback( null );
} );
}
Internal.XHR.deleteServer = function( token, serverID, callback ) {
request
.del( Endpoints.SERVERS + "/" + serverID )
.set( "authorization", token )
.end( function( err ) {
err ? callback( err ) : callback( null );
} );
}
Internal.XHR.getChannels = function( token, serverID, callback ) {
request
.get( Endpoints.SERVERS + "/" + serverID + "/channels" )
.set( "authorization", token )
.end( function( err ) {
err ? callback( err ) : callback( null );
} );
}
Internal.XHR.getServer = function( token, serverID, callback ) {
request
.get( Endpoints.SERVERS + "/" + serverID )
.set( "authorization", token )
.end( function( err, res ) {
if ( err ) {
callback( err );
} else {
callback( null, res.body );
}
} );
}
Internal.XHR.acceptInvite = function( token, inviteID, callback ) {
request
.post( Endpoints.API + "/invite/" + inviteID )
.set( "authorization", token )
.end( function( err, res ) {
if ( err ) {
callback( err );
} else {
callback( null, res.body )
}
} );
}
Internal.XHR.setUsername = function( token, avatar, email, newPassword, password, username, callback ) {
request
.patch( Endpoints.API + "/users/@me" )
.set( "authorization", token )
.send( {
avatar: avatar,
email: email,
new_password: newPassword,
password: password,
username: username
} )
.end( function( err ) {
callback( err );
} );
}
exports.Internal = Internal;

View File

@@ -1,22 +0,0 @@
class Invite {
constructor(data, client) {
this.max_age = data.max_age;
this.code = data.code;
this.server = client.getServer("id", data.guild.id);
this.revoked = data.revoked;
this.created_at = Date.parse(data.created_at);
this.temporary = data.temporary;
this.uses = data.uses;
this.max_uses = data.uses;
this.inviter = client.addUser(data.inviter);
this.xkcd = data.xkcdpass;
this.channel = client.getChannel("id", data.channel.id);
}
get URL() {
var code = (this.xkcd ? this.xkcdpass : this.code);
return "https://discord.gg/" + code;
}
}
module.exports = Invite;

View File

@@ -1,55 +0,0 @@
var PMChannel = require("./PMChannel.js");
var Embeddable = require("./Embeds/IEmbed.js");
class Message {
constructor(data, channel, mentions, author) {
this.tts = data.tts;
this.timestamp = Date.parse(data.timestamp);
this.nonce = data.nonce;
this.mentions = mentions;
this.everyoneMentioned = data.mention_everyone;
this.id = data.id;
this.embeds = [];
if (data.embeds) {
for (var embed of data.embeds) {
this.embeds.push( Embeddable.createEmbed(embed) );
}
}
this.editedTimestamp = data.edited_timestamp;
this.content = data.content.trim();
this.channel = channel;
if (this.isPrivate) {
this.author = this.channel.client.getUser("id", author.id);
} else {
this.author = this.channel.server ? this.channel.server.getMember("id", author.id) : this.channel.client.getUser("id", author.id);
}
this.attachments = data.attachments;
}
isMentioned(user) {
var id = (user.id ? user.id : user);
for (var mention of this.mentions) {
if (mention.id === id) {
return true;
}
}
return false;
}
get sender() {
return this.author;
}
get isPrivate() {
return this.channel.isPrivate;
}
}
/*exports.Message.prototype.isPM = function() {
return ( this.channel instanceof PMChannel );
}*/
module.exports = Message;

View File

@@ -1,185 +0,0 @@
var ServerPermissions = require("./ServerPermissions.js");
var Member = require("./Member.js");
class Server {
constructor(data, client) {
this.client = client;
this.region = data.region;
this.ownerID = data.owner_id;
this.name = data.name;
this.id = data.id;
this.members = [];
this.channels = [];
this.icon = data.icon;
this.afkTimeout = data.afk_timeout;
this.afkChannelId = data.afk_channel_id;
this.roles = [];
for(var permissionGroup of data.roles){
this.roles.push( new ServerPermissions(permissionGroup, this) );
}
if(!data.members){
data.members = [ client.user ];
return;
}
for (var member of data.members) {
// 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.
if(member.user)
this.addMember(client.addUser(member.user), member.roles);
}
}
get permissionGroups(){
return this.roles;
}
get permissions(){
return this.roles;
}
get iconURL() {
if (!this.icon)
return null;
return `https://discordapp.com/api/guilds/${this.id}/icons/${this.icon}.jpg`;
}
get afkChannel() {
if (!this.afkChannelId)
return false;
return this.getChannel("id", this.afkChannelId);
}
get defaultChannel() {
return this.getChannel("name", "general");
}
get owner() {
return this.client.getUser("id", this.ownerID);
}
get users() {
return this.members;
}
// get/set
getRole(key, value){
for (var role of this.roles) {
if (role[key] === value) {
return role;
}
}
return null;
}
addRole(data){
if(this.getRole("id", data.id)){
return this.getRole("id", data.id);
}
var perms = new ServerPermissions(data, this);
this.roles.push(perms);
return perms;
}
updateRole(data){
var oldRole = this.getRole("id", data.id);
if(oldRole){
var index = this.roles.indexOf(oldRole);
this.roles[index] = new ServerPermissions(data, this);
return this.roles[index];
}else{
return false;
}
}
removeRole(id){
for (var roleId in this.roles) {
if (this.roles[roleId].id === id) {
this.roles.splice(roleId, 1);
}
}
for(var member of this.members){
for(var roleId in member.rawRoles){
if(member.rawRoles[roleId] === id){
member.rawRoles.splice(roleId, 1);
}
}
}
}
getChannel(key, value) {
for (var channel of this.channels) {
if (channel[key] === value) {
return channel;
}
}
return null;
}
getMember(key, value){
for (var member of this.members) {
if (member[key] === value) {
return member;
}
}
return null;
}
removeMember(key, value){
for (var member of this.members) {
if (member[key] === value) {
this.members.splice(key, 1);
return member;
}
}
return false;
}
addChannel(chann) {
if (!this.getChannel("id", chann.id)) {
this.channels.push(chann);
}
return chann;
}
addMember(user, roles){
if (!this.getMember("id", user.id)){
var mem = new Member(user, this, roles);
this.members.push(mem);
}
return mem;
}
toString(){
return this.name;
}
equals(object){
return object.id === this.id;
}
}
module.exports = Server;

View File

@@ -1,41 +0,0 @@
class User{
constructor( data ){
this.username = data.username;
this.discriminator = data.discriminator;
this.id = data.id;
this.avatar = data.avatar;
this.status = data.status || "offline";
this.gameId = data.game_id || null;
}
// access using user.avatarURL;
get avatarURL(){
if( !this.avatar )
return null;
return `https://discordapp.com/api/users/${this.id}/avatars/${this.avatar}.jpg`;
}
mention(){
return `<@${this.id}>`;
}
toString(){
/*
if we embed a user in a String - like so:
"Yo " + user + " what's up?"
It would generate something along the lines of:
"Yo @hydrabolt what's up?"
*/
return this.mention();
}
equals(object){
return object.id === this.id;
}
equalsStrict(object){
return object.id === this.id && object.avatar === this.avatar && object.username === this.username && object.discriminator === this.discriminator;
}
}
module.exports = User;