ESLint stuff...

This commit is contained in:
Amish Shah
2016-08-13 14:44:49 +01:00
parent 53d767ec04
commit b8db4c4f4b
74 changed files with 2574 additions and 2956 deletions

16
.eslintrc.js Normal file
View File

@@ -0,0 +1,16 @@
module.exports = {
"extends": "airbnb",
"plugins": [
"react",
"jsx-a11y",
"import"
],
"rules" : {
"max-len": [2, 120, 2],
"no-underscore-dangle": 0,
"global-require": 0,
"guard-for-in": 0,
"no-restricted-syntax": 0,
"no-param-reassign": 0,
}
};

View File

@@ -4,7 +4,7 @@
"description": "A way to interface with the Discord API",
"main": "./src/index",
"scripts": {
"test": "jscs src && node test/random"
"test": "node test/random"
},
"repository": {
"type": "git",
@@ -34,6 +34,11 @@
"devDependencies": {
"babel-preset-es2015": "^6.6.0",
"babel-preset-stage-3": "^6.5.0",
"eslint": "^3.3.0",
"eslint-config-airbnb": "^10.0.1",
"eslint-plugin-import": "^1.13.0",
"eslint-plugin-jsx-a11y": "^2.1.0",
"eslint-plugin-react": "^6.0.0",
"grunt": "^0.4.5",
"grunt-babel": "^6.0.0",
"grunt-browserify": "^4.0.1",

View File

@@ -1,10 +1,8 @@
'use strict';
const EventEmitter = require('events').EventEmitter;
const MergeDefault = require('../util/MergeDefault');
const mergeDefault = require('../util/MergeDefault');
const Constants = require('../util/Constants');
const RESTManager = require('./rest/RestManager');
const ClientDataStore = require('../structures/DataStore/ClientDataStore');
const RESTManager = require('./rest/RESTManager');
const ClientDataStore = require('../structures/datastore/ClientDataStore');
const ClientManager = require('./ClientManager');
const ClientDataResolver = require('./ClientDataResolver');
const WebSocketManager = require('./websocket/WebSocketManager');
@@ -21,7 +19,7 @@ class Client extends EventEmitter{
constructor(options) {
super();
this.options = MergeDefault(Constants.DefaultOptions, options);
this.options = mergeDefault(Constants.DefaultOptions, options);
this.rest = new RESTManager(this);
this.store = new ClientDataStore(this);
this.manager = new ClientManager(this);
@@ -44,11 +42,10 @@ class Client extends EventEmitter{
login(email, password) {
if (password) {
// login with email and password
return this.rest.methods.LoginEmailPassword(email, password);
} else {
// login with token
return this.rest.methods.LoginToken(email);
return this.rest.methods.loginEmailPassword(email, password);
}
// login with token
return this.rest.methods.loginToken(email);
}
/**

View File

@@ -1,15 +1,10 @@
'use strict';
const getStructure = name => require(`../structures/${name}`);
const Structure = name => require(`../structures/${name}`);
const User = Structure('User');
const Message = Structure('Message');
const Guild = Structure('Guild');
const Channel = Structure('Channel');
const ServerChannel = Structure('ServerChannel');
const TextChannel = Structure('TextChannel');
const VoiceChannel = Structure('VoiceChannel');
const GuildMember = Structure('GuildMember');
const User = getStructure('User');
const Message = getStructure('Message');
const Guild = getStructure('Guild');
const Channel = getStructure('Channel');
const GuildMember = getStructure('GuildMember');
function $string(obj) {
return (typeof obj === 'string' || obj instanceof String);
@@ -21,7 +16,7 @@ class ClientDataResolver {
this.client = client;
}
ResolveUser(user) {
resolveUser(user) {
if (user instanceof User) {
return user;
} else if ($string(user)) {
@@ -35,19 +30,22 @@ class ClientDataResolver {
return null;
}
ResolveGuild(guild) {
resolveGuild(guild) {
if (guild instanceof Guild) {
return guild;
}
return null;
}
ResolveGuildMember(guild, user) {
resolveGuildMember($guild, $user) {
let guild = $guild;
let user = $user;
if (user instanceof GuildMember) {
return user;
}
guild = this.ResolveGuild(guild);
user = this.ResolveUser(user);
guild = this.resolveGuild(guild);
user = this.resolveUser(user);
if (!guild || !user) {
return null;
@@ -56,15 +54,15 @@ class ClientDataResolver {
return guild.store.get('members', user.id);
}
ResolveBase64(data) {
resolveBase64(data) {
if (data instanceof Buffer) {
return 'data:image/jpg;base64,' + data.toString('base64');
return `data:image/jpg;base64,${data.toString('base64')}`;
}
return data;
}
ResolveChannel(channel) {
resolveChannel(channel) {
if (channel instanceof Channel) {
return channel;
}
@@ -72,9 +70,11 @@ class ClientDataResolver {
if ($string(channel)) {
return this.client.store.get('channels', channel);
}
return null;
}
ResolveString(data) {
resolveString(data) {
if (data instanceof String) {
return data;
}

View File

@@ -1,5 +1,3 @@
'use strict';
const Constants = require('../util/Constants');
class ClientManager {
@@ -11,7 +9,7 @@ class ClientManager {
connectToWebSocket(token, resolve, reject) {
this.client.store.token = token;
this.client.rest.methods.GetGateway()
this.client.rest.methods.getGateway()
.then(gateway => {
this.client.ws.connect(gateway);
this.client.once(Constants.Events.READY, () => resolve(token));

View File

@@ -1,5 +1,3 @@
'use strict';
/*
ABOUT ACTIONS
@@ -19,9 +17,9 @@ class GenericAction {
}
handle(data) {
return data;
}
}
};
module.exports = GenericAction;

View File

@@ -1,5 +1,3 @@
'use strict';
const requireAction = name => require(`./${name}`);
class ActionsManager {
@@ -22,7 +20,7 @@ class ActionsManager {
}
register(name) {
let Action = requireAction(name);
const Action = requireAction(name);
this[name] = new Action(this.client);
}
}

View File

@@ -1,23 +1,15 @@
'use strict';
const Action = require('./Action');
const Constants = require('../../util/Constants');
const Message = require('../../structures/Message');
class ChannelCreateAction extends Action {
constructor(client) {
super(client);
}
handle(data) {
let client = this.client;
let channel = client.store.NewChannel(data);
const client = this.client;
const channel = client.store.newChannel(data);
return {
channel,
};
}
};
}
module.exports = ChannelCreateAction;

View File

@@ -1,8 +1,4 @@
'use strict';
const Action = require('./Action');
const Constants = require('../../util/Constants');
const Message = require('../../structures/Message');
class ChannelDeleteAction extends Action {
@@ -13,19 +9,15 @@ class ChannelDeleteAction extends Action {
}
handle(data) {
let client = this.client;
const client = this.client;
let channel = client.store.get('channels', data.id);
if (channel) {
client.store.KillChannel(channel);
client.store.killChannel(channel);
this.deleted[channel.id] = channel;
this.scheduleForDeletion(channel.id);
} else if (this.deleted[data.id]) {
channel = this.deleted[data.id];
}
return {
@@ -39,6 +31,6 @@ class ChannelDeleteAction extends Action {
this.client.options.rest_ws_bridge_timeout)
);
}
};
}
module.exports = ChannelDeleteAction;

View File

@@ -1,23 +1,15 @@
'use strict';
const Action = require('./Action');
const Constants = require('../../util/Constants');
const CloneObject = require('../../util/CloneObject');
const Message = require('../../structures/Message');
const cloneObject = require('../../util/CloneObject');
class ChannelUpdateAction extends Action {
constructor(client) {
super(client);
}
handle(data) {
let client = this.client;
let channel = client.store.get('channels', data.id);
const client = this.client;
const channel = client.store.get('channels', data.id);
if (channel) {
let oldChannel = CloneObject(channel);
const oldChannel = cloneObject(channel);
channel.setup(data);
if (!oldChannel.equals(data)) {
client.emit(Constants.Events.CHANNEL_UPDATE, oldChannel, channel);
@@ -34,6 +26,6 @@ class ChannelUpdateAction extends Action {
updated: null,
};
}
};
}
module.exports = ChannelUpdateAction;

View File

@@ -1,8 +1,5 @@
'use strict';
const Action = require('./Action');
const Constants = require('../../util/Constants');
const Message = require('../../structures/Message');
class GuildDeleteAction extends Action {
@@ -13,8 +10,7 @@ class GuildDeleteAction extends Action {
}
handle(data) {
let client = this.client;
const client = this.client;
let guild = client.store.get('guilds', data.id);
if (guild) {
@@ -28,12 +24,11 @@ class GuildDeleteAction extends Action {
return {
guild: null,
};
} else {
}
// delete guild
client.store.remove('guilds', guild);
this.deleted[guild.id] = guild;
this.scheduleForDeletion(guild.id);
}
} else if (this.deleted[data.id]) {
guild = this.deleted[data.id];
}
@@ -49,6 +44,6 @@ class GuildDeleteAction extends Action {
this.client.options.rest_ws_bridge_timeout)
);
}
};
}
module.exports = GuildDeleteAction;

View File

@@ -1,8 +1,5 @@
'use strict';
const Action = require('./Action');
const Constants = require('../../util/Constants');
const Message = require('../../structures/Message');
class GuildMemberRemoveAction extends Action {
@@ -13,8 +10,8 @@ class GuildMemberRemoveAction extends Action {
}
handle(data) {
let client = this.client;
let guild = client.store.get('guilds', data.guild_id);
const client = this.client;
const guild = client.store.get('guilds', data.guild_id);
if (guild) {
let member = guild.store.get('members', data.user.id);
if (member) {
@@ -46,6 +43,6 @@ class GuildMemberRemoveAction extends Action {
this.client.options.rest_ws_bridge_timeout)
);
}
};
}
module.exports = GuildMemberRemoveAction;

View File

@@ -1,23 +1,16 @@
'use strict';
const Action = require('./Action');
const Constants = require('../../util/Constants');
const Role = require('../../structures/Role');
class GuildRoleCreate extends Action {
constructor(client) {
super(client);
}
handle(data) {
let client = this.client;
let guild = client.store.get('guilds', data.guild_id);
const client = this.client;
const guild = client.store.get('guilds', data.guild_id);
if (guild) {
let already = guild.store.get('roles', data.role.id);
let role = new Role(guild, data.role);
const already = guild.store.get('roles', data.role.id);
const role = new Role(guild, data.role);
guild.store.add('roles', role);
if (!already) {
@@ -33,6 +26,6 @@ class GuildRoleCreate extends Action {
role: null,
};
}
};
}
module.exports = GuildRoleCreate;

View File

@@ -1,8 +1,5 @@
'use strict';
const Action = require('./Action');
const Constants = require('../../util/Constants');
const Message = require('../../structures/Message');
class GuildRoleDeleteAction extends Action {
@@ -13,8 +10,8 @@ class GuildRoleDeleteAction extends Action {
}
handle(data) {
let client = this.client;
let guild = client.store.get('guilds', data.guild_id);
const client = this.client;
const guild = client.store.get('guilds', data.guild_id);
if (guild) {
let exists = guild.store.get('roles', data.role_id);
@@ -45,6 +42,6 @@ class GuildRoleDeleteAction extends Action {
this.client.options.rest_ws_bridge_timeout)
);
}
};
}
module.exports = GuildRoleDeleteAction;

View File

@@ -1,29 +1,21 @@
'use strict';
const Action = require('./Action');
const Constants = require('../../util/Constants');
const CloneObject = require('../../util/CloneObject');
const Message = require('../../structures/Message');
const cloneObject = require('../../util/CloneObject');
class GuildRoleUpdateAction extends Action {
constructor(client) {
super(client);
}
handle(data) {
const client = this.client;
const guild = client.store.get('guilds', data.guild_id);
let client = this.client;
let guild = client.store.get('guilds', data.guild_id);
let roleData = data.role;
const roleData = data.role;
if (guild) {
let oldRole;
let existingRole = guild.store.get('roles', roleData.id);
const existingRole = guild.store.get('roles', roleData.id);
// exists and not the same
if (existingRole && !existingRole.equals(roleData)) {
oldRole = CloneObject(existingRole);
oldRole = cloneObject(existingRole);
existingRole.setup(data.role);
client.emit(Constants.Events.GUILD_ROLE_UPDATE, guild, oldRole, existingRole);
}
@@ -39,6 +31,6 @@ class GuildRoleUpdateAction extends Action {
updated: null,
};
}
};
}
module.exports = GuildRoleUpdateAction;

View File

@@ -1,9 +1,6 @@
'use strict';
const Action = require('./Action');
const Constants = require('../../util/Constants');
const CloneObject = require('../../util/CloneObject');
const Message = require('../../structures/Message');
const cloneObject = require('../../util/CloneObject');
class GuildUpdateAction extends Action {
@@ -14,12 +11,11 @@ class GuildUpdateAction extends Action {
}
handle(data) {
let client = this.client;
let guild = client.store.get('guilds', data.id);
const client = this.client;
const guild = client.store.get('guilds', data.id);
if (guild) {
let oldGuild = CloneObject(guild);
const oldGuild = cloneObject(guild);
guild.setup(data);
if (!oldGuild.equals(data)) {
@@ -37,6 +33,6 @@ class GuildUpdateAction extends Action {
updated: null,
};
}
};
}
module.exports = GuildUpdateAction;

View File

@@ -1,22 +1,14 @@
'use strict';
const Action = require('./Action');
const Constants = require('../../util/Constants');
const Message = require('../../structures/Message');
class MessageCreateAction extends Action {
constructor(client) {
super(client);
}
handle(data) {
let client = this.client;
let channel = client.store.get('channels', data.channel_id);
const client = this.client;
const channel = client.store.get('channels', data.channel_id);
if (channel) {
let message = channel._cacheMessage(new Message(channel, data, client));
const message = channel._cacheMessage(new Message(channel, data, client));
return {
m: message,
};
@@ -26,6 +18,6 @@ class MessageCreateAction extends Action {
m: null,
};
}
};
}
module.exports = MessageCreateAction;

View File

@@ -1,8 +1,4 @@
'use strict';
const Action = require('./Action');
const Constants = require('../../util/Constants');
const Message = require('../../structures/Message');
class MessageDeleteAction extends Action {
@@ -13,21 +9,17 @@ class MessageDeleteAction extends Action {
}
handle(data) {
let client = this.client;
let channel = client.store.get('channels', data.channel_id);
const client = this.client;
const channel = client.store.get('channels', data.channel_id);
if (channel) {
let message = channel.store.get('messages', data.id);
if (message) {
channel.store.remove('messages', message.id);
this.deleted[channel.id + message.id] = message;
this.scheduleForDeletion(channel.id, message.id);
} else if (this.deleted[channel.id + data.id]) {
message = this.deleted[channel.id + data.id];
}
return {
@@ -46,6 +38,6 @@ class MessageDeleteAction extends Action {
this.client.options.rest_ws_bridge_timeout)
);
}
};
}
module.exports = MessageDeleteAction;

View File

@@ -1,31 +1,23 @@
'use strict';
const Action = require('./Action');
const Constants = require('../../util/Constants');
const CloneObject = require('../../util/CloneObject');
const Message = require('../../structures/Message');
const cloneObject = require('../../util/CloneObject');
class MessageUpdateAction extends Action {
constructor(client) {
super(client);
}
handle(data) {
let client = this.client;
let channel = client.store.get('channels', data.channel_id);
const client = this.client;
const channel = client.store.get('channels', data.channel_id);
if (channel) {
let message = channel.store.get('messages', data.id);
const message = channel.store.get('messages', data.id);
if (message && !message.equals(data, true)) {
let oldMessage = CloneObject(message);
const oldMessage = cloneObject(message);
message.patch(data);
client.emit(Constants.Events.MESSAGE_UPDATE, oldMessage, message);
return {
old: oldMessage,
updated: message,
};
client.emit(Constants.Events.MESSAGE_UPDATE, oldMessage, message);
}
return {
@@ -39,6 +31,6 @@ class MessageUpdateAction extends Action {
updated: null,
};
}
};
}
module.exports = MessageUpdateAction;

View File

@@ -1,19 +1,11 @@
'use strict';
const Action = require('./Action');
const Constants = require('../../util/Constants');
const CloneObject = require('../../util/CloneObject');
const Message = require('../../structures/Message');
const cloneObject = require('../../util/CloneObject');
class UserUpdateAction extends Action {
constructor(client) {
super(client);
}
handle(data) {
let client = this.client;
const client = this.client;
if (client.store.user) {
if (client.store.user.equals(data)) {
@@ -23,7 +15,7 @@ class UserUpdateAction extends Action {
};
}
let oldUser = CloneObject(client.store.user);
const oldUser = cloneObject(client.store.user);
client.store.user.setup(data);
client.emit(Constants.Events.USER_UPDATE, oldUser, client.store.user);
@@ -39,6 +31,6 @@ class UserUpdateAction extends Action {
updated: null,
};
}
};
}
module.exports = UserUpdateAction;

View File

@@ -1,5 +1,3 @@
'use strict';
const request = require('superagent');
const Constants = require('../../util/Constants');
const UserAgentManager = require('./UserAgentManager');
@@ -16,19 +14,25 @@ class RESTManager{
}
addRequestToQueue(method, url, auth, data, file, resolve, reject) {
let endpoint = url.replace(/\/[0-9]+/g, '/:id');
const endpoint = url.replace(/\/[0-9]+/g, '/:id');
let rateLimitedEndpoint = this.rateLimitedEndpoints[endpoint];
const rateLimitedEndpoint = this.rateLimitedEndpoints[endpoint];
rateLimitedEndpoint.queue = rateLimitedEndpoint.queue || [];
rateLimitedEndpoint.queue.push({
method, url, auth, data, file, resolve, reject,
method,
url,
auth,
data,
file,
resolve,
reject,
});
}
processQueue(endpoint) {
let rateLimitedEndpoint = this.rateLimitedEndpoints[endpoint];
const rateLimitedEndpoint = this.rateLimitedEndpoints[endpoint];
// prevent multiple queue processes
if (!rateLimitedEndpoint.timeout) {
@@ -39,7 +43,7 @@ class RESTManager{
clearTimeout(rateLimitedEndpoint.timeout);
rateLimitedEndpoint.timeout = null;
for (let item of rateLimitedEndpoint.queue) {
for (const item of rateLimitedEndpoint.queue) {
this.makeRequest(item.method, item.url, item.auth, item.data, item.file)
.then(item.resolve)
.catch(item.reject);
@@ -48,13 +52,14 @@ class RESTManager{
rateLimitedEndpoint.queue = [];
}
makeRequest(method, url, auth, data, file, fromQueue) {
makeRequest(method, url, auth, data, file) {
/*
file is {file, name}
*/
let apiRequest = request[method](url);
console.log(url);
const apiRequest = request[method](url);
let endpoint = url.replace(/\/[0-9]+/g, '/:id');
const endpoint = url.replace(/\/[0-9]+/g, '/:id');
if (this.rateLimitedEndpoints[endpoint] && this.rateLimitedEndpoints[endpoint].timeout) {
return new Promise((resolve, reject) => {
@@ -83,7 +88,7 @@ class RESTManager{
return new Promise((resolve, reject) => {
apiRequest.end((err, res) => {
if (err) {
let retry = res.headers['retry-after'] || res.headers['Retry-After'];
const retry = res.headers['retry-after'] || res.headers['Retry-After'];
if (retry) {
this.rateLimitedEndpoints[endpoint] = {};
this.addRequestToQueue(method, url, auth, data, file, resolve, reject);
@@ -100,6 +105,6 @@ class RESTManager{
});
});
}
};
}
module.exports = RESTManager;

View File

@@ -1,50 +1,55 @@
'use strict';
const Constants = require('../../util/Constants');
const Structure = name => require('../../structures/' + name);
const User = Structure('User');
const GuildMember = Structure('GuildMember');
const Message = Structure('Message');
const getStructure = name => require(`../../structures/${name}`);
const User = getStructure('User');
const GuildMember = getStructure('GuildMember');
class RESTMethods {
constructor(restManager) {
this.rest = restManager;
}
LoginEmailPassword(email, password) {
loginEmailPassword(email, password) {
return new Promise((resolve, reject) => {
this.rest.client.store.email = email;
this.rest.client.store.password = password;
this.rest.makeRequest('post', Constants.Endpoints.LOGIN, false, { email, password })
this.rest.makeRequest('post', Constants.Endpoints.login, false, { email, password })
.then(data => {
this.rest.client.manager.connectToWebSocket(data.token, resolve, reject);
})
.catch(reject);
});
}
LoginToken(token) {
loginToken(token) {
return new Promise((resolve, reject) => {
this.rest.client.manager.connectToWebSocket(token, resolve, reject);
});
}
GetGateway() {
getGateway() {
return new Promise((resolve, reject) => {
this.rest.makeRequest('get', Constants.Endpoints.GATEWAY, true)
this.rest.makeRequest('get', Constants.Endpoints.gateway, true)
.then(res => resolve(res.url))
.catch(reject);
});
}
SendMessage(channel, content, tts, nonce) {
sendMessage($channel, content, tts, nonce) {
return new Promise((resolve, reject) => {
const $this = this;
let channel = $channel;
var _this = this;
function req() {
$this.rest.makeRequest('post', Constants.Endpoints.channelMessages(channel.id), true, {
content, tts, nonce,
})
.then(data => resolve($this.rest.client.actions.MessageCreate.handle(data).m))
.catch(reject);
}
if (channel instanceof User || channel instanceof GuildMember) {
this.CreateDM(channel).then(chan => {
this.createDM(channel).then(chan => {
channel = chan;
req();
})
@@ -52,21 +57,13 @@ class RESTMethods{
} else {
req();
}
function req() {
_this.rest.makeRequest('post', Constants.Endpoints.CHANNEL_MESSAGES(channel.id), true, {
content, tts, nonce,
})
.then(data => resolve(_this.rest.client.actions.MessageCreate.handle(data).m))
.catch(reject);
}
});
}
DeleteMessage(message) {
deleteMessage(message) {
return new Promise((resolve, reject) => {
this.rest.makeRequest('del', Constants.Endpoints.CHANNEL_MESSAGE(message.channel.id, message.id), true)
.then(data => {
this.rest.makeRequest('del', Constants.Endpoints.channelMessage(message.channel.id, message.id), true)
.then(() => {
resolve(this.rest.client.actions.MessageDelete.handle({
id: message.id,
channel_id: message.channel.id,
@@ -76,9 +73,9 @@ class RESTMethods{
});
}
UpdateMessage(message, content) {
updateMessage(message, content) {
return new Promise((resolve, reject) => {
this.rest.makeRequest('patch', Constants.Endpoints.CHANNEL_MESSAGE(message.channel.id, message.id), true, {
this.rest.makeRequest('patch', Constants.Endpoints.channelMessage(message.channel.id, message.id), true, {
content,
})
.then(data => {
@@ -88,9 +85,9 @@ class RESTMethods{
});
}
CreateChannel(guild, channelName, channelType) {
createChannel(guild, channelName, channelType) {
return new Promise((resolve, reject) => {
this.rest.makeRequest('post', Constants.Endpoints.GUILD_CHANNELS(guild.id), true, {
this.rest.makeRequest('post', Constants.Endpoints.guildChannels(guild.id), true, {
name: channelName,
type: channelType,
})
@@ -101,24 +98,23 @@ class RESTMethods{
});
}
GetExistingDM(recipient) {
let dmChannel = this.rest.client.store.getAsArray('channels')
getExistingDM(recipient) {
const dmChannel = this.rest.client.store.getAsArray('channels')
.filter(channel => channel.recipient)
.filter(channel => channel.recipient.id === recipient.id);
return dmChannel[0];
}
CreateDM(recipient) {
createDM(recipient) {
return new Promise((resolve, reject) => {
let dmChannel = this.GetExistingDM(recipient);
const dmChannel = this.getExistingDM(recipient);
if (dmChannel) {
return resolve(dmChannel);
}
this.rest.makeRequest('post', Constants.Endpoints.USER_CHANNELS(this.rest.client.store.user.id), true, {
return this.rest.makeRequest('post', Constants.Endpoints.userChannels(this.rest.client.store.user.id), true, {
recipient_id: recipient.id,
})
.then(data => resolve(this.rest.client.actions.ChannelCreate.handle(data).channel))
@@ -126,14 +122,16 @@ class RESTMethods{
});
}
DeleteChannel(channel) {
deleteChannel($channel) {
let channel = $channel;
return new Promise((resolve, reject) => {
if (channel instanceof User || channel instanceof GuildMember) {
channel = this.GetExistingDM(channel);
channel = this.getExistingDM(channel);
}
this.rest.makeRequest('del', Constants.Endpoints.CHANNEL(channel.id), true)
.then(data => {
this.rest.makeRequest('del', Constants.Endpoints.channel(channel.id), true)
.then($data => {
const data = $data;
data.id = channel.id;
resolve(this.rest.client.actions.ChannelDelete.handle(data).channel);
})
@@ -141,24 +139,25 @@ class RESTMethods{
});
}
UpdateChannel(channel, data) {
updateChannel(channel, $data) {
const data = $data;
return new Promise((resolve, reject) => {
data.name = (data.name || channel.name).trim();
data.topic = data.topic || channel.topic;
data.position = data.position || channel.position;
data.bitrate = data.bitrate || channel.bitrate;
this.rest.makeRequest('patch', Constants.Endpoints.CHANNEL(channel.id), true, data)
.then(data => {
resolve(this.rest.client.actions.ChannelUpdate.handle(data).updated);
this.rest.makeRequest('patch', Constants.Endpoints.channel(channel.id), true, data)
.then(newData => {
resolve(this.rest.client.actions.ChannelUpdate.handle(newData).updated);
})
.catch(reject);
});
}
LeaveGuild(guild) {
leaveGuild(guild) {
return new Promise((resolve, reject) => {
this.rest.makeRequest('del', Constants.Endpoints.ME_GUILD(guild.id), true)
this.rest.makeRequest('del', Constants.Endpoints.meGuild(guild.id), true)
.then(() => {
resolve(this.rest.client.actions.GuildDelete.handle({ id: guild.id }).guild);
})
@@ -167,9 +166,9 @@ class RESTMethods{
}
// untested but probably will work
DeleteGuild(guild) {
deleteGuild(guild) {
return new Promise((resolve, reject) => {
this.rest.makeRequest('del', Constants.Endpoints.GUILD(guild.id), true)
this.rest.makeRequest('del', Constants.Endpoints.guild(guild.id), true)
.then(() => {
resolve(this.rest.client.actions.GuildDelete.handle({ id: guild.id }).guild);
})
@@ -177,33 +176,33 @@ class RESTMethods{
});
}
UpdateCurrentUser(_data) {
updateCurrentUser(_data) {
return new Promise((resolve, reject) => {
let user = this.rest.client.store.user;
let data = {};
const user = this.rest.client.store.user;
const data = {};
data.username = _data.username || user.username;
data.avatar = this.rest.client.resolver.ResolveBase64(_data.avatar) || user.avatar;
data.avatar = this.rest.client.resolver.resolveBase64(_data.avatar) || user.avatar;
if (!user.bot) {
data.password = this.rest.client.store.password;
data.email = _data.email || this.rest.client.store.email;
data.new_password = _data.newPassword;
}
this.rest.makeRequest('patch', Constants.Endpoints.ME, true, data)
.then(data => resolve(this.rest.client.actions.UserUpdate.handle(data).updated))
this.rest.makeRequest('patch', Constants.Endpoints.me, true, data)
.then(newData => resolve(this.rest.client.actions.UserUpdate.handle(newData).updated))
.catch(reject);
});
}
UpdateGuild(guild, _data) {
updateGuild(guild, _data) {
return new Promise((resolve, reject) => {
/*
can contain:
name, region, verificationLevel, afkChannel, afkTimeout, icon, owner, splash
*/
let data = {};
const data = {};
if (_data.name) {
data.name = _data.name;
@@ -218,7 +217,7 @@ class RESTMethods{
}
if (_data.afkChannel) {
data.afk_channel_id = this.rest.client.resolver.ResolveChannel(_data.afkChannel).id;
data.afk_channel_id = this.rest.client.resolver.resolveChannel(_data.afkChannel).id;
}
if (_data.afkTimeout) {
@@ -226,26 +225,26 @@ class RESTMethods{
}
if (_data.icon) {
data.icon = this.rest.client.resolver.ResolveBase64(_data.icon);
data.icon = this.rest.client.resolver.resolveBase64(_data.icon);
}
if (_data.owner) {
data.owner_id = this.rest.client.resolver.ResolveUser(_data.owner).id;
data.owner_id = this.rest.client.resolver.resolveUser(_data.owner).id;
}
if (_data.splash) {
data.splash = this.rest.client.resolver.ResolveBase64(_data.splash);
data.splash = this.rest.client.resolver.resolveBase64(_data.splash);
}
this.rest.makeRequest('patch', Constants.Endpoints.GUILD(guild.id), true, data)
.then(data => resolve(this.rest.client.actions.GuildUpdate.handle(data).updated))
this.rest.makeRequest('patch', Constants.Endpoints.guild(guild.id), true, data)
.then(newData => resolve(this.rest.client.actions.GuildUpdate.handle(newData).updated))
.catch(reject);
});
}
KickGuildMember(guild, member) {
kickGuildMember(guild, member) {
return new Promise((resolve, reject) => {
this.rest.makeRequest('del', Constants.Endpoints.GUILD_MEMBER(guild.id, member.id), true)
this.rest.makeRequest('del', Constants.Endpoints.guildMember(guild.id, member.id), true)
.then(() => {
resolve(this.rest.client.actions.GuildMemberRemove.handle({
guild_id: guild.id,
@@ -256,9 +255,9 @@ class RESTMethods{
});
}
CreateGuildRole(guild) {
createGuildRole(guild) {
return new Promise((resolve, reject) => {
this.rest.makeRequest('post', Constants.Endpoints.GUILD_ROLES(guild.id), true)
this.rest.makeRequest('post', Constants.Endpoints.guildRoles(guild.id), true)
.then(role => {
resolve(this.rest.client.actions.GuildRoleCreate.handle({
guild_id: guild.id,
@@ -269,9 +268,9 @@ class RESTMethods{
});
}
DeleteGuildRole(role) {
deleteGuildRole(role) {
return new Promise((resolve, reject) => {
this.rest.makeRequest('del', Constants.Endpoints.GUILD_ROLE(role.guild.id, role.id), true)
this.rest.makeRequest('del', Constants.Endpoints.guildRole(role.guild.id, role.id), true)
.then(() => {
resolve(this.rest.client.actions.GuildRoleDelete.handle({
guild_id: role.guild.id,
@@ -282,14 +281,14 @@ class RESTMethods{
});
}
UpdateGuildRole(role, _data) {
updateGuildRole(role, _data) {
return new Promise((resolve, reject) => {
/*
can contain:
name, position, permissions, color, hoist
*/
let data = {};
const data = {};
data.name = _data.name || role.name;
data.position = _data.position || role.position;
@@ -313,8 +312,8 @@ class RESTMethods{
} else {
data.permissions = role.permissions;
}
console.log(data);
this.rest.makeRequest('patch', Constants.Endpoints.GUILD_ROLE(role.guild.id, role.id), true, data)
this.rest.makeRequest('patch', Constants.Endpoints.guildRole(role.guild.id, role.id), true, data)
.then(_role => {
resolve(this.rest.client.actions.GuildRoleUpdate.handle({
role: _role,

View File

@@ -1,5 +1,3 @@
'use strict';
const Constants = require('../../util/Constants');
class UserAgentManager {

View File

@@ -1,5 +1,3 @@
'use strict';
const WebSocket = require('ws');
const Constants = require('../../util/Constants');
const zlib = require('zlib');
@@ -18,13 +16,12 @@ class WebSocketManager {
connect(gateway) {
this.status = Constants.Status.CONNECTING;
this.store.gateway = gateway;
gateway += `/?v=${this.client.options.protocol_version}`;
this.store.gateway = `${gateway}/?v=${this.client.options.protocol_version}`;
this.ws = new WebSocket(gateway);
this.ws.onopen = () => this.EventOpen();
this.ws.onclose = () => this.EventClose();
this.ws.onmessage = (e) => this.EventMessage(e);
this.ws.onerror = (e) => this.EventError(e);
this.ws.onopen = () => this.eventOpen();
this.ws.onclose = () => this.eventClose();
this.ws.onmessage = (e) => this.eventMessage(e);
this.ws.onerror = (e) => this.eventError(e);
}
send(data) {
@@ -33,7 +30,7 @@ class WebSocketManager {
}
}
EventOpen() {
eventOpen() {
if (this.reconnecting) {
this._sendResume();
} else {
@@ -42,7 +39,7 @@ class WebSocketManager {
}
_sendResume() {
let payload = {
const payload = {
token: this.client.store.token,
session_id: this.store.sessionID,
seq: this.store.sequence,
@@ -56,7 +53,7 @@ class WebSocketManager {
_sendNewIdentify() {
this.reconnecting = false;
let payload = this.client.options.ws;
const payload = this.client.options.ws;
payload.token = this.client.store.token;
this.send({
@@ -65,14 +62,15 @@ class WebSocketManager {
});
}
EventClose() {
eventClose() {
if (!this.reconnecting) {
this.tryReconnect();
}
}
EventMessage(event) {
eventMessage($event) {
let packet;
const event = $event;
try {
if (event.binary) {
event.data = zlib.inflateSync(event.data).toString();
@@ -80,13 +78,13 @@ class WebSocketManager {
packet = JSON.parse(event.data);
} catch (e) {
return this.EventError(Constants.Errors.BAD_WS_MESSAGE);
return this.eventError(Constants.Errors.BAD_WS_MESSAGE);
}
this.packetManager.handle(packet);
return this.packetManager.handle(packet);
}
EventError(e) {
EventError() {
this.tryReconnect();
}
@@ -94,7 +92,7 @@ class WebSocketManager {
if (this.status !== Constants.Status.READY) {
let unavailableCount = 0;
for (let guildID in this.client.store.data.guilds) {
for (const guildID in this.client.store.data.guilds) {
unavailableCount += this.client.store.data.guilds[guildID].available ? 0 : 1;
}

View File

@@ -1,5 +1,3 @@
'use strict';
const Constants = require('../../../util/Constants');
const BeforeReadyWhitelist = [
@@ -45,15 +43,15 @@ class WebSocketPacketManager {
}
register(event, handle) {
let Handler = require(`./handlers/${handle}`);
const Handler = require(`./handlers/${handle}`);
this.handlers[event] = new Handler(this);
}
handleQueue() {
for (let packetIndex in this.queue) {
this.handle(this.queue[packetIndex]);
this.queue.splice(packetIndex, 1);
}
this.queue.forEach((element, index) => {
this.handle(this.queue[index]);
this.queue.splice(index, 1);
});
}
setSequence(s) {
@@ -63,16 +61,15 @@ class WebSocketPacketManager {
}
handle(packet) {
if (packet.op === Constants.OPCodes.RECONNECT) {
this.setSequence(packet.s);
this.ws.tryReconnect();
return;
return false;
}
if (packet.op === Constants.OPCodes.INVALID_SESSION) {
this.ws._sendNewIdentify();
return;
return false;
}
if (this.ws.reconnecting) {
@@ -85,7 +82,7 @@ class WebSocketPacketManager {
if (this.ws.status !== Constants.Status.READY) {
if (BeforeReadyWhitelist.indexOf(packet.t) === -1) {
this.queue.push(packet);
return;
return false;
}
}

View File

@@ -1,5 +1,3 @@
'use strict';
class AbstractHandler {
constructor(packetManager) {
@@ -7,7 +5,7 @@ class AbstractHandler {
}
handle(packet) {
return packet;
}
}

View File

@@ -1,32 +1,20 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const ClientUser = Structure('ClientUser');
const Guild = Structure('Guild');
const DMChannel = Structure('DMChannel');
const Constants = require('../../../../util/Constants');
class ChannelCreateHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
let response = client.actions.ChannelCreate.handle(data);
const response = client.actions.ChannelCreate.handle(data);
if (response.channel) {
client.emit(Constants.Events.CHANNEL_CREATE, response.channel);
}
}
}
};
module.exports = ChannelCreateHandler;

View File

@@ -1,31 +1,20 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const ClientUser = Structure('ClientUser');
const Guild = Structure('Guild');
const ServerChannel = Structure('ServerChannel');
const Constants = require('../../../../util/Constants');
class ChannelDeleteHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
let response = client.actions.ChannelDelete.handle(data);
const response = client.actions.ChannelDelete.handle(data);
if (response.channel) {
client.emit(Constants.Events.CHANNEL_DELETE, response.channel);
}
}
};
}
module.exports = ChannelDeleteHandler;

View File

@@ -1,28 +1,14 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const ClientUser = Structure('ClientUser');
const Guild = Structure('Guild');
const ServerChannel = Structure('ServerChannel');
const Constants = require('../../../../util/Constants');
const CloneObject = require('../../../../util/CloneObject');
class ChannelUpdateHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
client.actions.ChannelUpdate.handle(data);
}
};
}
module.exports = ChannelUpdateHandler;

View File

@@ -1,33 +1,22 @@
'use strict';
// ##untested handler##
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const ClientUser = Structure('ClientUser');
const Guild = Structure('Guild');
const Constants = require('../../../../util/Constants');
class GuildBanAddHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
let guild = client.store.get('guilds', data.guild_id);
let user = client.store.get('users', data.user.id);
const guild = client.store.get('guilds', data.guild_id);
const user = client.store.get('users', data.user.id);
if (guild && user) {
client.emit(Constants.Events.GUILD_BAN_ADD, guild, user);
}
}
};
}
module.exports = GuildBanAddHandler;

View File

@@ -1,33 +1,23 @@
'use strict';
// ##untested handler##
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const ClientUser = Structure('ClientUser');
const Guild = Structure('Guild');
const Constants = require('../../../../util/Constants');
class GuildBanRemoveHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
let guild = client.store.get('guilds', data.guild_id);
let user = client.store.get('users', data.user.id);
const guild = client.store.get('guilds', data.guild_id);
const user = client.store.get('users', data.user.id);
if (guild && user) {
client.emit(Constants.Events.GUILD_BAN_REMOVE, guild, user);
}
}
};
}
module.exports = GuildBanRemoveHandler;

View File

@@ -1,24 +1,12 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const ClientUser = Structure('ClientUser');
const Guild = Structure('Guild');
const Constants = require('../../../../util/Constants');
class GuildCreateHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
let guild = client.store.get('guilds', data.id);
const guild = client.store.get('guilds', data.id);
if (guild) {
if (!guild.available && !data.unavailable) {
@@ -28,11 +16,10 @@ class GuildCreateHandler extends AbstractHandler {
}
} else {
// a new guild
client.store.NewGuild(data);
client.store.newGuild(data);
}
}
}
};
module.exports = GuildCreateHandler;

View File

@@ -1,31 +1,19 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const ClientUser = Structure('ClientUser');
const Guild = Structure('Guild');
const Constants = require('../../../../util/Constants');
class GuildDeleteHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
let response = client.actions.GuildDelete.handle(data);
const response = client.actions.GuildDelete.handle(data);
if (response.guild) {
client.emit(Constants.Events.GUILD_DELETE, response.guild);
}
}
}
};
module.exports = GuildDeleteHandler;

View File

@@ -1,32 +1,20 @@
'use strict';
// ##untested handler##
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const ClientUser = Structure('ClientUser');
const Guild = Structure('Guild');
const Constants = require('../../../../util/Constants');
class GuildMemberAddHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
let guild = client.store.get('guilds', data.guild_id);
const guild = client.store.get('guilds', data.guild_id);
if (guild) {
guild._addMember(data);
}
}
};
}
module.exports = GuildMemberAddHandler;

View File

@@ -1,28 +1,16 @@
'use strict';
// ##untested handler##
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const ClientUser = Structure('ClientUser');
const Guild = Structure('Guild');
const Constants = require('../../../../util/Constants');
class GuildMemberRemoveHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
let response = client.actions.GuildMemberRemove.handle(data);
client.actions.GuildMemberRemove.handle(data);
}
};
}
module.exports = GuildMemberRemoveHandler;

View File

@@ -1,35 +1,23 @@
'use strict';
// ##untested handler##
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const ClientUser = Structure('ClientUser');
const Guild = Structure('Guild');
const Constants = require('../../../../util/Constants');
class GuildMemberUpdateHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
let guild = client.store.get('guilds', data.guild_id);
const guild = client.store.get('guilds', data.guild_id);
if (guild) {
let member = guild.store.get('members', data.user.id);
const member = guild.store.get('members', data.user.id);
if (member) {
guild._updateMember(member, data);
}
}
}
};
}
module.exports = GuildMemberUpdateHandler;

View File

@@ -1,26 +1,18 @@
'use strict';
// ##untested##
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const Constants = require('../../../../util/Constants');
const CloneObject = require('../../../../util/CloneObject');
class GuildMembersChunkHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
let guild = client.store.get('guilds', data.guild_id);
const data = packet.d;
const client = this.packetManager.client;
const guild = client.store.get('guilds', data.guild_id);
let members = [];
const members = [];
if (guild) {
for (let member of guild.members) {
for (const member of guild.members) {
members.push(guild._addMember(member, true));
}
}
@@ -28,6 +20,6 @@ class GuildMembersChunkHandler extends AbstractHandler {
client.emit(Constants.Events.GUILD_MEMBERS_CHUNK, guild, members);
}
};
}
module.exports = GuildMembersChunkHandler;

View File

@@ -1,25 +1,14 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const Constants = require('../../../../util/Constants');
const Role = Structure('Role');
const Guild = Structure('Guild');
class GuildRoleCreateHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
let response = client.actions.GuildRoleCreate.handle(data);
client.actions.GuildRoleCreate.handle(data);
}
};
}
module.exports = GuildRoleCreateHandler;

View File

@@ -1,25 +1,14 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const Constants = require('../../../../util/Constants');
const Role = Structure('Role');
const Guild = Structure('Guild');
class GuildRoleDeleteHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
let response = client.actions.GuildRoleDelete.handle(data);
client.actions.GuildRoleDelete.handle(data);
}
};
}
module.exports = GuildRoleDeleteHandler;

View File

@@ -1,26 +1,14 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const Constants = require('../../../../util/Constants');
const CloneObject = require('../../../../util/CloneObject');
const Role = Structure('Role');
const Guild = Structure('Guild');
class GuildRoleUpdateHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
let response = client.actions.GuildRoleUpdate.handle(data);
client.actions.GuildRoleUpdate.handle(data);
}
};
}
module.exports = GuildRoleUpdateHandler;

View File

@@ -1,28 +1,14 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const ClientUser = Structure('ClientUser');
const Guild = Structure('Guild');
const Constants = require('../../../../util/Constants');
const CloneObject = require('../../../../util/CloneObject');
class GuildUpdateHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
let response = client.actions.GuildUpdate.handle(data);
const data = packet.d;
const client = this.packetManager.client;
client.actions.GuildUpdate.handle(data);
}
};
}
module.exports = GuildUpdateHandler;

View File

@@ -1,29 +1,19 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const Constants = require('../../../../util/Constants');
const Message = Structure('Message');
const Guild = Structure('Guild');
class MessageCreateHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
let response = client.actions.MessageCreate.handle(data);
const response = client.actions.MessageCreate.handle(data);
if (response.m) {
client.emit(Constants.Events.MESSAGE_CREATE, response.m);
}
}
};
}
module.exports = MessageCreateHandler;

View File

@@ -1,29 +1,19 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const Constants = require('../../../../util/Constants');
const Message = Structure('Message');
const Guild = Structure('Guild');
class MessageDeleteHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
let response = client.actions.MessageDelete.handle(data);
const response = client.actions.MessageDelete.handle(data);
if (response.m) {
client.emit(Constants.Events.MESSAGE_DELETE, response.m);
}
}
};
}
module.exports = MessageDeleteHandler;

View File

@@ -1,27 +1,14 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const Constants = require('../../../../util/Constants');
const CloneObject = require('../../../../util/CloneObject');
const Message = Structure('Message');
const Guild = Structure('Guild');
class MessageUpdateHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
let response = client.actions.MessageUpdate.handle(data);
const data = packet.d;
const client = this.packetManager.client;
client.actions.MessageUpdate.handle(data);
}
};
}
module.exports = MessageUpdateHandler;

View File

@@ -1,26 +1,17 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const Constants = require('../../../../util/Constants');
const CloneObject = require('../../../../util/CloneObject');
const Role = Structure('User');
const cloneObject = require('../../../../util/CloneObject');
class PresenceUpdateHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
let user = client.store.get('users', data.user.id);
let guild = client.store.get('guilds', data.guild_id);
const guild = client.store.get('guilds', data.guild_id);
function makeUser(user) {
return client.store.NewUser(user);
function makeUser(newUser) {
return client.store.newUser(newUser);
}
// step 1
@@ -33,9 +24,9 @@ class PresenceUpdateHandler extends AbstractHandler {
}
if (guild) {
let memberInGuild = guild.store.get('members', user.id);
const memberInGuild = guild.store.get('members', user.id);
if (!memberInGuild) {
let member = guild._addMember({
const member = guild._addMember({
user,
roles: data.roles,
deaf: false,
@@ -54,7 +45,7 @@ class PresenceUpdateHandler extends AbstractHandler {
data.user.status = data.status || user.status;
data.user.game = data.game;
let same = (
const same = (
data.user.username === user.username &&
data.user.id === user.id &&
data.user.discriminator === user.discriminator &&
@@ -64,12 +55,12 @@ class PresenceUpdateHandler extends AbstractHandler {
);
if (!same) {
let oldUser = CloneObject(user);
const oldUser = cloneObject(user);
user.setup(data.user);
client.emit(Constants.Events.PRESENCE_UPDATE, oldUser, user);
}
}
};
}
module.exports = PresenceUpdateHandler;

View File

@@ -1,39 +1,30 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const ClientUser = Structure('ClientUser');
const Guild = Structure('Guild');
const DMChannel = Structure('DMChannel');
const getStructure = name => require(`../../../../structures/${name}`);
const ClientUser = getStructure('ClientUser');
class ReadyHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
const data = packet.d;
const client = this.packetManager.client;
client.manager.setupKeepAlive(data.heartbeat_interval);
client.store.user = client.store.add('users', new ClientUser(client, data.user));
for (let guild of data.guilds) {
client.store.NewGuild(guild);
for (const guild of data.guilds) {
client.store.newGuild(guild);
}
for (let privateDM of data.private_channels) {
client.store.NewChannel(privateDM);
for (const privateDM of data.private_channels) {
client.store.newChannel(privateDM);
}
this.packetManager.ws.store.sessionID = data.session_id;
this.packetManager.ws.checkIfReady();
}
}
};
module.exports = ReadyHandler;

View File

@@ -1,9 +1,5 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const Constants = require('../../../../util/Constants');
const CloneObject = require('../../../../util/CloneObject');
class TypingData {
constructor(since, lastTimestamp, _timeout) {
@@ -24,28 +20,12 @@ class TypingData {
class TypingStartHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
let channel = client.store.get('channels', data.channel_id);
let user = client.store.get('users', data.user_id);
let timestamp = new Date(data.timestamp * 1000);
if (channel && user) {
if (channel.typingMap[user.id]) {
// already typing, renew
let mapping = channel.typingMap[user.id];
mapping.lastTimestamp = timestamp;
mapping.resetTimeout(tooLate());
} else {
channel.typingMap[user.id] = new TypingData(timestamp, timestamp, tooLate());
client.emit(Constants.Events.TYPING_START, channel, user);
}
}
const data = packet.d;
const client = this.packetManager.client;
const channel = client.store.get('channels', data.channel_id);
const user = client.store.get('users', data.user_id);
const timestamp = new Date(data.timestamp * 1000);
function tooLate() {
return setTimeout(() => {
@@ -53,8 +33,20 @@ class TypingStartHandler extends AbstractHandler {
delete channel.typingMap[user.id];
}, 6000);
}
if (channel && user) {
if (channel.typingMap[user.id]) {
// already typing, renew
const mapping = channel.typingMap[user.id];
mapping.lastTimestamp = timestamp;
mapping.resetTimeout(tooLate());
} else {
channel.typingMap[user.id] = new TypingData(timestamp, timestamp, tooLate());
client.emit(Constants.Events.TYPING_START, channel, user);
}
}
}
};
}
module.exports = TypingStartHandler;

View File

@@ -1,28 +1,14 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const CloneObject = name => require(`../../../../util/CloneObject`);
const Constants = require(`../../../../util/Constants`);
const ClientUser = Structure('ClientUser');
const Guild = Structure('Guild');
const DMChannel = Structure('DMChannel');
class UserUpdateHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
let response = client.actions.UserUpdate.handle(data);
const data = packet.d;
const client = this.packetManager.client;
client.actions.UserUpdate.handle(data);
}
};
}
module.exports = UserUpdateHandler;

View File

@@ -1,28 +1,19 @@
'use strict';
const AbstractHandler = require('./AbstractHandler');
const Structure = name => require(`../../../../structures/${name}`);
const Constants = require('../../../../util/Constants');
const CloneObject = require('../../../../util/CloneObject');
const Role = Structure('User');
const Constants = require('../../../../util/Constants');
const cloneObject = require('../../../../util/CloneObject');
class VoiceStateUpdateHandler extends AbstractHandler {
constructor(packetManager) {
super(packetManager);
}
handle(packet) {
let data = packet.d;
let client = this.packetManager.client;
let guild = client.store.get('guilds', data.guild_id);
const data = packet.d;
const client = this.packetManager.client;
const guild = client.store.get('guilds', data.guild_id);
if (guild) {
let member = guild.store.get('members', data.user_id);
let channel = guild.store.get('channels', data.channel_id);
const member = guild.store.get('members', data.user_id);
if (member) {
let oldVoiceChannelMember = CloneObject(member);
const oldVoiceChannelMember = cloneObject(member);
if (member.voiceChannel && member.voiceChannel.id !== data.channel_id) {
member.voiceChannel.store.remove('members', oldVoiceChannelMember);
}
@@ -38,6 +29,6 @@ class VoiceStateUpdateHandler extends AbstractHandler {
}
}
};
}
module.exports = VoiceStateUpdateHandler;

View File

@@ -1,5 +1,3 @@
'use strict';
const values = require('object.values');
const Client = require('./client/Client');

View File

@@ -1,5 +1,3 @@
'use strict';
class Channel {
constructor(client, data, guild) {
this.client = client;
@@ -19,7 +17,7 @@ class Channel {
}
delete() {
return this.client.rest.methods.DeleteChannel(this);
return this.client.rest.methods.deleteChannel(this);
}
}

View File

@@ -1,12 +1,6 @@
'use strict';
const User = require('./User');
class ClientUser extends User {
constructor(client, data) {
super(client, data);
}
setup(data) {
super.setup(data);
this.verified = data.verified;
@@ -14,23 +8,23 @@ class ClientUser extends User {
}
setUsername(username) {
return this.client.rest.methods.UpdateCurrentUser({ username, });
return this.client.rest.methods.updateCurrentUser({ username });
}
setEmail(email) {
return this.client.rest.methods.UpdateCurrentUser({ email, });
return this.client.rest.methods.updateCurrentUser({ email });
}
setPassword(password) {
return this.client.rest.methods.UpdateCurrentUser({ password, });
return this.client.rest.methods.updateCurrentUser({ password });
}
setAvatar(avatar) {
return this.client.rest.methods.UpdateCurrentUser({ avatar, });
return this.client.rest.methods.updateCurrentUser({ avatar });
}
edit(data) {
return this.client.rest.methods.UpdateCurrentUser(data);
return this.client.rest.methods.updateCurrentUser(data);
}
}

View File

@@ -1,5 +1,3 @@
'use strict';
const Channel = require('./Channel');
const TextBasedChannel = require('./interface/TextBasedChannel');
const User = require('./User');
@@ -12,13 +10,13 @@ class DMChannel extends Channel{
}
_cacheMessage(message) {
let maxSize = this.client.options.max_message_cache;
const maxSize = this.client.options.max_message_cache;
if (maxSize === 0) {
// saves on performance
return;
}
let storeKeys = Object.keys(this.store);
const storeKeys = Object.keys(this.store);
if (storeKeys.length >= maxSize) {
this.store.remove(storeKeys[0]);
}

View File

@@ -1,6 +1,4 @@
'use strict';
const Constants = require('../Util/Constants');
const Constants = require('../util/Constants');
class EvaluatedPermissions {
constructor(member, permissions) {
@@ -9,8 +7,8 @@ class EvaluatedPermissions {
}
serialize() {
let serializedPermissions = {};
for (let permissionName in Constants.PermissionFlags) {
const serializedPermissions = {};
for (const permissionName in Constants.PermissionFlags) {
serializedPermissions[permissionName] = this.hasPermission(permissionName);
}

View File

@@ -1,20 +1,16 @@
'use strict';
const User = require('./User');
const GuildMember = require('./GuildMember');
const GuildDataStore = require('./datastore/GuildDataStore');
const TextChannel = require('./TextChannel');
const VoiceChannel = require('./VoiceChannel');
const Constants = require('../Util/Constants');
const Constants = require('../util/Constants');
const Role = require('./Role');
function arraysEqual(a, b) {
if (a === b) return true;
if (a.length !== b.length) return false;
for (let itemInd in a) {
let item = a[itemInd];
let ind = b.indexOf(item);
for (const itemInd in a) {
const item = a[itemInd];
const ind = b.indexOf(item);
if (ind) {
b.splice(ind, 1);
}
@@ -43,11 +39,11 @@ class Guild {
_addMember(guildUser, noEvent) {
if (!(guildUser.user instanceof User)) {
guildUser.user = this.client.store.NewUser(guildUser.user);
guildUser.user = this.client.store.newUser(guildUser.user);
}
guildUser.joined_at = guildUser.joined_at || 0;
let member = this.store.add('members', new GuildMember(this, guildUser));
const member = this.store.add('members', new GuildMember(this, guildUser));
if (this.client.ws.status === Constants.Status.READY && !noEvent) {
this.client.emit(Constants.Events.GUILD_MEMBER_ADD, this, member);
}
@@ -56,7 +52,7 @@ class Guild {
}
_updateMember(member, data) {
let oldRoles = member.roles;
const oldRoles = member.roles;
member._roles = data.roles;
if (this.client.ws.status === Constants.Status.READY) {
@@ -77,7 +73,7 @@ class Guild {
}
member(user) {
return this.client.resolver.ResolveGuildMember(this, user);
return this.client.resolver.resolveGuildMember(this, user);
}
equals(data) {
@@ -128,7 +124,7 @@ class Guild {
if (data.members) {
this.store.clear('members');
for (let guildUser of data.members) {
for (const guildUser of data.members) {
this._addMember(guildUser);
}
}
@@ -137,8 +133,8 @@ class Guild {
if (data.channels) {
this.store.clear('channels');
for (let channel of data.channels) {
this.client.store.NewChannel(channel, this);
for (const channel of data.channels) {
this.client.store.newChannel(channel, this);
}
}
@@ -146,14 +142,14 @@ class Guild {
if (data.roles) {
this.store.clear('roles');
for (let role of data.roles) {
for (const role of data.roles) {
this.store.add('roles', new Role(this, role));
}
}
if (data.presences) {
for (let presence of data.presences) {
let user = this.client.store.get('users', presence.user.id);
for (const presence of data.presences) {
const user = this.client.store.get('users', presence.user.id);
if (user) {
user.status = presence.status;
user.game = presence.game;
@@ -162,8 +158,8 @@ class Guild {
}
if (data.voice_states) {
for (let voiceState of data.voice_states) {
let member = this.store.get('members', voiceState.user_id);
for (const voiceState of data.voice_states) {
const member = this.store.get('members', voiceState.user_id);
if (member) {
member.serverMute = voiceState.mute;
member.serverDeaf = voiceState.deaf;
@@ -177,55 +173,55 @@ class Guild {
}
createChannel(name, type) {
return this.client.rest.methods.CreateChannel(this, name, type);
return this.client.rest.methods.createChannel(this, name, type);
}
createRole() {
return this.client.rest.methods.CreateGuildRole(this);
return this.client.rest.methods.createGuildRole(this);
}
leave() {
return this.client.rest.methods.LeaveGuild(this);
return this.client.rest.methods.leaveGuild(this);
}
delete() {
return this.client.rest.methods.DeleteGuild(this);
return this.client.rest.methods.deleteGuild(this);
}
edit(data) {
return this.client.rest.methods.UpdateGuild(this, data);
return this.client.rest.methods.updateGuild(this, data);
}
setName(name) {
return this.edit({ name, });
return this.edit({ name });
}
setRegion(region) {
return this.edit({ region, });
return this.edit({ region });
}
setVerificationLevel(verificationLevel) {
return this.edit({ verificationLevel, });
return this.edit({ verificationLevel });
}
setAFKChannel(afkchannel) {
return this.edit({ afkChannel, });
setAFKChannel(afkChannel) {
return this.edit({ afkChannel });
}
setAFKTimeout(afkTimeout) {
return this.edit({ afkTimeout, });
return this.edit({ afkTimeout });
}
setIcon(icon) {
return this.edit({ icon, });
return this.edit({ icon });
}
setOwner(owner) {
return this.edit({ owner, });
return this.edit({ owner });
}
setSplash(splash) {
return this.edit({ splash, });
return this.edit({ splash });
}
get channels() { return this.store.getAsArray('channels'); }

View File

@@ -1,5 +1,3 @@
'use strict';
const TextBasedChannel = require('./interface/TextBasedChannel');
class GuildMember {
@@ -26,15 +24,15 @@ class GuildMember {
}
get roles() {
let list = [];
let everyoneRole = this.guild.store.get('roles', this.guild.id);
const list = [];
const everyoneRole = this.guild.store.get('roles', this.guild.id);
if (everyoneRole) {
list.push(everyoneRole);
}
for (let roleID of this._roles) {
let role = this.guild.store.get('roles', roleID);
for (const roleID of this._roles) {
const role = this.guild.store.get('roles', roleID);
if (role) {
list.push(role);
}
@@ -60,11 +58,11 @@ class GuildMember {
}
deleteDM() {
return this.client.rest.methods.DeleteChannel(this);
return this.client.rest.methods.deleteChannel(this);
}
kick() {
return this.client.rest.methods.KickGuildMember(this.guild, this);
return this.client.rest.methods.kickGuildMember(this.guild, this);
}
}

View File

@@ -1,5 +1,3 @@
'use strict';
class Message {
constructor(channel, data, client) {
this.channel = channel;
@@ -15,7 +13,7 @@ class Message {
}
setup(data) {
this.author = this.client.store.NewUser(data.author);
this.author = this.client.store.newUser(data.author);
this.content = data.content;
this.timestamp = new Date(data.timestamp);
this.editedTimestamp = data.edited_timestamp ? new Date(data.edited_timestamp) : null;
@@ -26,61 +24,70 @@ class Message {
this.attachments = data.attachments;
this.mentions = [];
this.id = data.id;
for (let mention of data.mentions) {
for (const mention of data.mentions) {
let user = this.client.store.get('users', mention.id);
if (user) {
this.mentions.push(user);
} else {
user = this.client.store.NewUser(mention);
user = this.client.store.newUser(mention);
this.mentions.push(user);
}
}
}
patch(data) {
if (data.author)
if (data.author) {
this.author = this.client.store.get('users', data.author.id);
if (data.content)
}
if (data.content) {
this.content = data.content;
if (data.timestamp)
}
if (data.timestamp) {
this.timestamp = new Date(data.timestamp);
if (data.edited_timestamp)
}
if (data.edited_timestamp) {
this.editedTimestamp = data.edited_timestamp ? new Date(data.edited_timestamp) : null;
if (data.tts)
}
if (data.tts) {
this.tts = data.tts;
if (data.mention_everyone)
}
if (data.mention_everyone) {
this.mentionEveryone = data.mention_everyone;
if (data.nonce)
}
if (data.nonce) {
this.nonce = data.nonce;
if (data.embeds)
}
if (data.embeds) {
this.embeds = data.embeds;
if (data.attachments)
}
if (data.attachments) {
this.attachments = data.attachments;
}
if (data.mentions) {
for (let mention of data.mentions) {
for (const mention of data.mentions) {
let user = this.client.store.get('users', mention.id);
if (user) {
this.mentions.push(user);
} else {
user = this.client.store.NewUser(mention);
user = this.client.store.newUser(mention);
this.mentions.push(user);
}
}
}
if (data.id)
if (data.id) {
this.id = data.id;
}
}
equals(message, rawData) {
let embedUpdate = !message.author && !message.attachments;
const embedUpdate = !message.author && !message.attachments;
if (embedUpdate) {
let base = this.id === message.id &&
const base = this.id === message.id &&
this.embeds.length === message.embeds.length;
return base;
} else {
}
let base = this.id === message.id &&
this.author.id === message.author.id &&
this.content === message.content &&
@@ -91,20 +98,19 @@ class Message {
if (base && rawData) {
base = this.mentionEveryone === message.mentionEveryone &&
this.timestamp.getTime() === new Date(data.timestamp).getTime() &&
this.editedTimestamp === new Date(data.edited_timestamp).getTime();
this.timestamp.getTime() === new Date(rawData.timestamp).getTime() &&
this.editedTimestamp === new Date(rawData.edited_timestamp).getTime();
}
return base;
}
}
delete() {
return this.client.rest.methods.DeleteMessage(this);
return this.client.rest.methods.deleteMessage(this);
}
edit(content) {
return this.client.rest.methods.UpdateMessage(this, content);
return this.client.rest.methods.updateMessage(this, content);
}
}

View File

@@ -1,5 +1,3 @@
'use strict';
class PermissionOverwrites {
constructor(serverChannel, data) {
this.channel = serverChannel;

View File

@@ -1,6 +1,4 @@
'use strict';
const Constants = require('../Util/Constants');
const Constants = require('../util/Constants');
class Role {
constructor(guild, data) {
@@ -34,36 +32,36 @@ class Role {
}
delete() {
return this.client.rest.methods.DeleteGuildRole(this);
return this.client.rest.methods.deleteGuildRole(this);
}
edit(data) {
return this.client.rest.methods.UpdateGuildRole(this, data);
return this.client.rest.methods.updateGuildRole(this, data);
}
setName(name) {
return this.client.rest.methods.UpdateGuildRole(this, {name,});
return this.client.rest.methods.updateGuildRole(this, { name });
}
setColor(color) {
return this.client.rest.methods.UpdateGuildRole(this, {color,});
return this.client.rest.methods.updateGuildRole(this, { color });
}
setHoist(hoist) {
return this.client.rest.methods.UpdateGuildRole(this, {hoist,});
return this.client.rest.methods.updateGuildRole(this, { hoist });
}
setPosition(position) {
return this.client.rest.methods.UpdateGuildRole(this, {position,});
return this.client.rest.methods.updateGuildRole(this, { position });
}
setPermissions(permissions) {
return this.client.rest.methods.UpdateGuildRole(this, {permissions,});
return this.client.rest.methods.updateGuildRole(this, { permissions });
}
serialize() {
let serializedPermissions = {};
for (let permissionName in Constants.PermissionFlags) {
const serializedPermissions = {};
for (const permissionName in Constants.PermissionFlags) {
serializedPermissions[permissionName] = this.hasPermission(permissionName);
}

View File

@@ -1,5 +1,3 @@
'use strict';
const Channel = require('./Channel');
const PermissionOverwrites = require('./PermissionOverwrites');
const EvaluatedPermissions = require('./EvaluatedPermissions');
@@ -9,9 +7,9 @@ function arraysEqual(a, b) {
if (a === b) return true;
if (a.length !== b.length) return false;
for (let itemInd in a) {
let item = a[itemInd];
let ind = b.indexOf(item);
for (const itemInd in a) {
const item = a[itemInd];
const ind = b.indexOf(item);
if (ind) {
b.splice(ind, 1);
}
@@ -35,7 +33,7 @@ class ServerChannel extends Channel{
this.ow = data.permission_overwrites;
this.permissionOverwrites = [];
if (data.permission_overwrites) {
for (let overwrite of data.permission_overwrites) {
for (const overwrite of data.permission_overwrites) {
this.permissionOverwrites.push(new PermissionOverwrites(this, overwrite));
}
}
@@ -52,8 +50,8 @@ class ServerChannel extends Channel{
if (base) {
if (other.permission_overwrites) {
let thisIDSet = this.permissionOverwrites.map(overwrite => overwrite.id);
let otherIDSet = other.permission_overwrites.map(overwrite => overwrite.id);
const thisIDSet = this.permissionOverwrites.map(overwrite => overwrite.id);
const otherIDSet = other.permission_overwrites.map(overwrite => overwrite.id);
if (arraysEqual(thisIDSet, otherIDSet)) {
base = true;
} else {
@@ -68,45 +66,45 @@ class ServerChannel extends Channel{
}
permissionsFor(member) {
member = this.client.resolver.ResolveGuildMember(this.guild, member);
member = this.client.resolver.resolveGuildMember(this.guild, member);
if (member) {
if (this.guild.owner.id === member.id) {
return new EvaluatedPermissions(member, Constants.ALL_PERMISSIONS);
}
let roles = member.roles;
const roles = member.roles;
let permissions = 0;
let overwrites = this.overwritesFor(member, true);
const overwrites = this.overwritesFor(member, true);
for (let role of roles) {
for (const role of roles) {
permissions |= role.permissions;
}
for (let overwrite of overwrites.role.concat(overwrites.member)) {
permissions = permissions & ~overwrite.denyData;
permissions = permissions | overwrite.allowData;
for (const overwrite of overwrites.role.concat(overwrites.member)) {
permissions &= ~overwrite.denyData;
permissions |= overwrite.allowData;
}
if (!!(permissions & (Constants.PermissionFlags.MANAGE_ROLES))) {
const admin = Boolean(permissions & (Constants.PermissionFlags.MANAGE_ROLES));
if (admin) {
permissions = Constants.ALL_PERMISSIONS;
}
return new EvaluatedPermissions(member, permissions);
}
return null;
}
overwritesFor(member, verified) {
// for speed
if (!verified)
member = this.client.resolver.ResolveGuildMember(this.guild, member);
if (!verified) member = this.client.resolver.resolveGuildMember(this.guild, member);
if (member) {
let found = [];
let memberRoles = member._roles;
const memberRoles = member._roles;
let roleOverwrites = [];
let memberOverwrites = [];
const roleOverwrites = [];
const memberOverwrites = [];
for (let overwrite of this.permissionOverwrites) {
for (const overwrite of this.permissionOverwrites) {
if (overwrite.id === member.id) {
memberOverwrites.push(overwrite);
} else if (memberRoles.indexOf(overwrite.id) > -1) {
@@ -124,23 +122,23 @@ class ServerChannel extends Channel{
}
edit(data) {
return this.client.rest.methods.UpdateChannel(this, data);
return this.client.rest.methods.updateChannel(this, data);
}
setName(name) {
return this.client.rest.methods.UpdateChannel(this, { name, });
return this.client.rest.methods.updateChannel(this, { name });
}
setPosition(position) {
return this.rest.client.rest.methods.UpdateChannel(this, { position, });
return this.rest.client.rest.methods.updateChannel(this, { position });
}
setTopic(topic) {
return this.rest.client.rest.methods.UpdateChannel(this, { topic, });
return this.rest.client.rest.methods.updateChannel(this, { topic });
}
setBitrate() {
return this.rest.client.rest.methods.UpdateChannel(this, { bitrate, });
setBitrate(bitrate) {
return this.rest.client.rest.methods.updateChannel(this, { bitrate });
}
toString() {

View File

@@ -1,5 +1,3 @@
'use strict';
const ServerChannel = require('./ServerChannel');
const TextChannelDataStore = require('./datastore/TextChannelDataStore');
const TextBasedChannel = require('./interface/TextBasedChannel');
@@ -12,13 +10,13 @@ class TextChannel extends ServerChannel {
}
_cacheMessage(message) {
let maxSize = this.client.options.max_message_cache;
const maxSize = this.client.options.max_message_cache;
if (maxSize === 0) {
// saves on performance
return;
return null;
}
let storeKeys = Object.keys(this.store);
const storeKeys = Object.keys(this.store);
if (storeKeys.length >= maxSize) {
this.store.remove(storeKeys[0]);
}

View File

@@ -1,5 +1,3 @@
'use strict';
const TextBasedChannel = require('./interface/TextBasedChannel');
/**
@@ -60,7 +58,7 @@ class User {
* @return {Promise<DMChannel>}
*/
deleteDM() {
return this.client.rest.methods.DeleteChannel(this);
return this.client.rest.methods.deleteChannel(this);
}
equals(user) {

View File

@@ -1,5 +1,3 @@
'use strict';
const ServerChannel = require('./ServerChannel');
const VoiceChannelDataStore = require('./datastore/VoiceChannelDataStore');

View File

@@ -1,5 +1,3 @@
'use strict';
class AbstractDataStore {
constructor() {
this.data = {};
@@ -12,9 +10,9 @@ class AbstractDataStore{
add(location, object) {
if (this.data[location][object.id]) {
return this.data[location][object.id];
} else {
return this.data[location][object.id] = object;
}
this.data[location][object.id] = object;
return object;
}
clear(location) {
@@ -22,13 +20,12 @@ class AbstractDataStore{
}
remove(location, object) {
let id = (typeof object === 'string' || object instanceof String) ? object : object.id;
const id = (typeof object === 'string' || object instanceof String) ? object : object.id;
if (this.data[location][id]) {
delete this.data[location][id];
return true;
} else {
return false;
}
return false;
}
get(location, value) {

View File

@@ -1,8 +1,6 @@
'use strict';
const AbstractDataStore = require('./AbstractDataStore');
const Constants = require('../../util/Constants');
const CloneObject = require('../../util/CloneObject');
const cloneObject = require('../../util/CloneObject');
const Guild = require('../Guild');
const User = require('../User');
const DMChannel = require('../DMChannel');
@@ -30,9 +28,9 @@ class ClientDataStore extends AbstractDataStore{
return this.client.ws.status === Constants.Status.READY;
}
NewGuild(data) {
let already = this.get('guilds', data.id);
let guild = this.add('guilds', new Guild(this.client, data));
newGuild(data) {
const already = this.get('guilds', data.id);
const guild = this.add('guilds', new Guild(this.client, data));
if (this.pastReady && !already) {
this.client.emit(Constants.Events.GUILD_CREATE, guild);
}
@@ -40,12 +38,13 @@ class ClientDataStore extends AbstractDataStore{
return guild;
}
NewUser(data) {
newUser(data) {
return this.add('users', new User(this.client, data));
}
NewChannel(data, guild) {
let already = this.get('channels', data.id);
newChannel(data, $guild) {
let guild = $guild;
const already = this.get('channels', data.id);
let channel;
if (data.is_private) {
channel = new DMChannel(this.client, data);
@@ -69,37 +68,37 @@ class ClientDataStore extends AbstractDataStore{
return this.add('channels', channel);
}
return null;
}
KillGuild(guild) {
let already = this.get('guilds', guilds.id);
killGuild(guild) {
const already = this.get('guilds', guild.id);
this.remove('guilds', guild);
if (already && this.pastReady) {
this.client.emit(Constants.Events.GUILD_DELETE, guild);
}
}
KillUser(user) {
killUser(user) {
this.remove('users', user);
}
KillChannel(channel) {
killChannel(channel) {
this.remove('channels', channel);
if (channel instanceof ServerChannel) {
channel.guild.store.remove('channels', channel);
}
}
UpdateGuild(currentGuild, newData) {
let oldGuild = CloneObject(currentGuild);
updateGuild(currentGuild, newData) {
const oldGuild = cloneObject(currentGuild);
currentGuild.setup(newData);
if (this.pastReady) {
this.client.emit(Constants.Events.GUILD_UPDATE, oldGuild, currentGuild);
}
}
UpdateChannel(currentChannel, newData) {
let oldChannel = CloneObject(currentChannel);
updateChannel(currentChannel, newData) {
currentChannel.setup(newData);
}
}

View File

@@ -1,5 +1,3 @@
'use strict';
const AbstractDataStore = require('./AbstractDataStore');
class GuildDataStore extends AbstractDataStore {

View File

@@ -1,5 +1,3 @@
'use strict';
const AbstractDataStore = require('./AbstractDataStore');
class TextChannelDataStore extends AbstractDataStore {

View File

@@ -1,5 +1,3 @@
'use strict';
const AbstractDataStore = require('./AbstractDataStore');
class VoiceChannelDataStore extends AbstractDataStore {

View File

@@ -1,5 +1,3 @@
'use strict';
const AbstractDataStore = require('./AbstractDataStore');
class WebSocketManagerDataStore extends AbstractDataStore {

View File

@@ -1,15 +1,12 @@
'use strict';
function sendMessage(content, options) {
options = options || {};
return this.client.rest.methods.SendMessage(this, content, options.tts);
function sendMessage(content, options = {}) {
return this.client.rest.methods.sendMessage(this, content, options.tts);
}
function sendTTSMessage(content, options) {
options = options || {};
return this.client.rest.methods.SendMessage(this, content, true);
function sendTTSMessage(content) {
return this.client.rest.methods.sendMessage(this, content, true);
}
exports.applyToClass = structure => {
structure.prototype.sendMessage = sendMessage;
structure.prototype.sendTTSMessage = sendTTSMessage;
};

View File

@@ -1,6 +1,5 @@
'use strict';
module.exports = function CloneObject(obj) {
var cloned = Object.create(obj);
module.exports = function cloneObject(obj) {
const cloned = Object.create(obj);
Object.assign(cloned, obj);
return cloned;

View File

@@ -1,6 +1,4 @@
'use strict';
const DefaultOptions = exports.DefaultOptions = {
exports.DefaultOptions = {
ws: {
large_threshold: 250,
compress: true,
@@ -17,16 +15,16 @@ const DefaultOptions = exports.DefaultOptions = {
rest_ws_bridge_timeout: 5000,
};
const Status = exports.Status = {
exports.Status = {
READY: 0,
CONNECTING: 1,
RECONNECTING: 2,
IDLE: 3,
};
const Package = exports.Package = require('../../package.json');
exports.Package = require('../../package.json');
const Errors = exports.Errors = {
exports.Errors = {
NO_TOKEN: new Error('request to use token, but token was unavailable to the client'),
NO_BOT_ACCOUNT: new Error('you should ideally be using a bot account!'),
BAD_WS_MESSAGE: new Error('a bad message was received from the websocket - bad compression or not json'),
@@ -38,41 +36,41 @@ const API = 'https://discordapp.com/api';
const Endpoints = exports.Endpoints = {
// general endpoints
LOGIN: `${API}/auth/login`,
LOGOUT: `${API}/auth/logout`,
ME: `${API}/users/@me`,
ME_GUILD: (guildID) => `${Endpoints.ME}/guilds/${guildID}`,
GATEWAY: `${API}/gateway`,
USER_CHANNELS: (userID) => `${API}/users/${userID}/channels`,
AVATAR: (userID, avatar) => `${API}/users/${userID}/avatars/${avatar}.jpg`,
INVITE: (id) => `${API}/invite/${id}`,
login: `${API}/auth/login`,
logout: `${API}/auth/logout`,
me: `${API}/users/@me`,
meGuild: (guildID) => `${Endpoints.me}/guilds/${guildID}`,
gateway: `${API}/gateway`,
userChannels: (userID) => `${API}/users/${userID}/channels`,
avatar: (userID, avatar) => `${API}/users/${userID}/avatars/${avatar}.jpg`,
invite: (id) => `${API}/invite/${id}`,
// guilds
GUILDS: `${API}/guilds`,
GUILD: (guildID) => `${Endpoints.GUILDS}/${guildID}`,
GUILD_ICON: (guildID, hash) => `${Endpoints.GUILD(guildID)}/icons/${hash}.jpg`,
GUILD_PRUNE: (guildID) => `${Endpoints.GUILD(guildID)}/prune`,
GUILD_EMBED: (guildID) => `${Endpoints.GUILD(guildID)}/embed`,
GUILD_INVITES: (guildID) => `${Endpoints.GUILD(guildID)}/invites`,
GUILD_ROLES: (guildID) => `${Endpoints.GUILD(guildID)}/roles`,
GUILD_ROLE: (guildID, roleID) => `${Endpoints.GUILD_ROLES(guildID)}/${roleID}`,
GUILD_BANS: (guildID) => `${Endpoints.GUILD(guildID)}/bans`,
GUILD_INTEGRATIONS: (guildID) => `${Endpoints.GUILD(guildID)}/integrations`,
GUILD_MEMBERS: (guildID) => `${Endpoints.GUILD(guildID)}/members`,
GUILD_MEMBER: (guildID, memberID) => `${Endpoints.GUILD_MEMBERS(guildID)}/${memberID}`,
GUILD_CHANNELS: (guildID) => `${Endpoints.GUILD(guildID)}/channels`,
guilds: `${API}/guilds`,
guild: (guildID) => `${Endpoints.guilds}/${guildID}`,
guildIcon: (guildID, hash) => `${Endpoints.guild(guildID)}/icons/${hash}.jpg`,
guildPrune: (guildID) => `${Endpoints.guild(guildID)}/prune`,
guildEmbed: (guildID) => `${Endpoints.guild(guildID)}/embed`,
guildInvites: (guildID) => `${Endpoints.guild(guildID)}/invites`,
guildRoles: (guildID) => `${Endpoints.guild(guildID)}/roles`,
guildRole: (guildID, roleID) => `${Endpoints.guildRoles(guildID)}/${roleID}`,
guildBans: (guildID) => `${Endpoints.guild(guildID)}/bans`,
guildIntegrations: (guildID) => `${Endpoints.guild(guildID)}/integrations`,
guildMembers: (guildID) => `${Endpoints.guild(guildID)}/members`,
guildMember: (guildID, memberID) => `${Endpoints.guildMembers(guildID)}/${memberID}`,
guildChannels: (guildID) => `${Endpoints.guild(guildID)}/channels`,
// channels
CHANNELS: `${API}/channels`,
CHANNEL: (channelID) => `${Endpoints.CHANNELS}/${channelID}`,
CHANNEL_MESSAGES: (channelID) => `${Endpoints.CHANNEL(channelID)}/messages`,
CHANNEL_INVITES: (channelID) => `${Endpoints.CHANNEL(channelID)}/invites`,
CHANNEL_TYPING: (channelID) => `${Endpoints.CHANNEL(channelID)}/typing`,
CHANNEL_PERMISSIONS: (channelID) => `${Endpoints.CHANNEL(channelID)}/permissions`,
CHANNEL_MESSAGE: (channelID, messageID) => `${Endpoints.CHANNEL_MESSAGES(channelID)}/${messageID}`,
channels: `${API}/channels`,
channel: (channelID) => `${Endpoints.channels}/${channelID}`,
channelMessages: (channelID) => `${Endpoints.channel(channelID)}/messages`,
channelInvites: (channelID) => `${Endpoints.channel(channelID)}/invites`,
channelTyping: (channelID) => `${Endpoints.channel(channelID)}/typing`,
channelPermissions: (channelID) => `${Endpoints.channel(channelID)}/permissions`,
channelMessage: (channelID, messageID) => `${Endpoints.channelMessage(channelID)}/${messageID}`,
};
const OPCodes = exports.OPCodes = {
exports.OPCodes = {
DISPATCH: 0,
HEARTBEAT: 1,
IDENTIFY: 2,
@@ -85,7 +83,7 @@ const OPCodes = exports.OPCodes = {
INVALID_SESSION: 9,
};
const Events = exports.Events = {
exports.Events = {
READY: 'ready',
GUILD_CREATE: 'guildCreate',
GUILD_DELETE: 'guildDelete',
@@ -116,7 +114,7 @@ const Events = exports.Events = {
MESSAGE_UPDATE: 'messageUpdate',
};
const WSEvents = exports.WSEvents = {
exports.WSEvents = {
CHANNEL_CREATE: 'CHANNEL_CREATE',
CHANNEL_DELETE: 'CHANNEL_DELETE',
CHANNEL_UPDATE: 'CHANNEL_UPDATE',
@@ -175,10 +173,10 @@ const PermissionFlags = exports.PermissionFlags = {
let _ALL_PERMISSIONS = 0;
for (let key in PermissionFlags) {
for (const key in PermissionFlags) {
_ALL_PERMISSIONS |= PermissionFlags[key];
}
const ALL_PERMISSIONS = exports.ALL_PERMISSIONS = _ALL_PERMISSIONS;
exports.ALL_PERMISSIONS = _ALL_PERMISSIONS;
const DEFAULT_PERMISSIONS = exports.DEFAULT_PERMISSIONS = 36953089;
exports.DEFAULT_PERMISSIONS = 36953089;

View File

@@ -1,5 +1,3 @@
'use strict';
module.exports = function merge(def, given) {
if (!given) {
return def;
@@ -7,8 +5,8 @@ module.exports = function merge(def, given) {
given = given || {};
for (var key in def) {
if (!given.hasOwnProperty(key)) {
for (const key in def) {
if (!{}.hasOwnProperty.call(given, key)) {
given[key] = def[key];
} else if (given[key] === Object(given[key])) {
given[key] = merge(def[key], given[key]);

View File

@@ -3,7 +3,7 @@
const Discord = require('../');
const request = require('superagent');
let client = new Discord.Client();
const client = new Discord.Client();
client.login(require('./auth.json').token).then(token => console.log('logged in with token ' + token)).catch(console.log);
@@ -43,10 +43,10 @@ client.on('guildRoleCreate', (guild, role) => {
console.log('new role', role.name, 'in', guild.name);
role.edit({
permissions: ['DEAFEN_MEMBERS'],
name: 'deafen'
name: 'deafen',
}).then(role2 => {
console.log('role replace from ' + role.name + ' to ' + role2.name);
}).catch(console.log)
}).catch(console.log);
});
client.on('guildRoleDelete', (guild, role) => {