Clean up Actions code (#591)

This commit is contained in:
Schuyler Cebulskie
2016-09-03 17:48:51 -04:00
committed by Amish Shah
parent 432c5ccc82
commit 59a5862f2d
22 changed files with 71 additions and 98 deletions

View File

@@ -1,6 +1,5 @@
const requireAction = name => require(`./${name}`);
class ActionsManager { class ActionsManager {
constructor(client) { constructor(client) {
this.client = client; this.client = client;
@@ -24,7 +23,7 @@ class ActionsManager {
} }
register(name) { register(name) {
const Action = requireAction(name); const Action = require(`./${name}`);
this[name] = new Action(this.client); this[name] = new Action(this.client);
} }
} }

View File

@@ -5,7 +5,6 @@ class ChannelCreateAction extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
const channel = client.dataManager.newChannel(data); const channel = client.dataManager.newChannel(data);
return { return {
channel, channel,
}; };

View File

@@ -10,8 +10,8 @@ class ChannelDeleteAction extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
let channel = client.channels.get(data.id);
let channel = client.channels.get(data.id);
if (channel) { if (channel) {
client.dataManager.killChannel(channel); client.dataManager.killChannel(channel);
this.deleted[channel.id] = channel; this.deleted[channel.id] = channel;

View File

@@ -6,15 +6,12 @@ class ChannelUpdateAction extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
const channel = client.channels.get(data.id);
const channel = client.channels.get(data.id);
if (channel) { if (channel) {
const oldChannel = cloneObject(channel); const oldChannel = cloneObject(channel);
channel.setup(data); channel.setup(data);
if (!oldChannel.equals(data)) { if (!oldChannel.equals(data)) client.emit(Constants.Events.CHANNEL_UPDATE, oldChannel, channel);
client.emit(Constants.Events.CHANNEL_UPDATE, oldChannel, channel);
}
return { return {
old: oldChannel, old: oldChannel,
updated: channel, updated: channel,

View File

@@ -5,13 +5,9 @@ class GuildBanRemove extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
const guild = client.guilds.get(data.guild_id); const guild = client.guilds.get(data.guild_id);
const user = client.dataManager.newUser(data.user); const user = client.dataManager.newUser(data.user);
if (guild && user) client.emit(Constants.Events.GUILD_BAN_REMOVE, guild, user);
if (guild && user) {
client.emit(Constants.Events.GUILD_BAN_REMOVE, guild, user);
}
} }
} }

View File

@@ -10,8 +10,8 @@ class GuildDeleteAction extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
let guild = client.guilds.get(data.id);
let guild = client.guilds.get(data.id);
if (guild) { if (guild) {
if (guild.available && data.unavailable) { if (guild.available && data.unavailable) {
// guild is unavailable // guild is unavailable
@@ -24,6 +24,7 @@ class GuildDeleteAction extends Action {
guild: null, guild: null,
}; };
} }
// delete guild // delete guild
client.guilds.delete(guild.id); client.guilds.delete(guild.id);
this.deleted[guild.id] = guild; this.deleted[guild.id] = guild;

View File

@@ -10,6 +10,7 @@ class GuildMemberRemoveAction extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
const guild = client.guilds.get(data.guild_id); const guild = client.guilds.get(data.guild_id);
if (guild) { if (guild) {
let member = guild.members.get(data.user.id); let member = guild.members.get(data.user.id);
@@ -17,25 +18,21 @@ class GuildMemberRemoveAction extends Action {
guild.memberCount--; guild.memberCount--;
guild._removeMember(member); guild._removeMember(member);
this.deleted[guild.id + data.user.id] = member; this.deleted[guild.id + data.user.id] = member;
if (client.status === Constants.Status.READY) { if (client.status === Constants.Status.READY) client.emit(Constants.Events.GUILD_MEMBER_REMOVE, guild, member);
client.emit(Constants.Events.GUILD_MEMBER_REMOVE, guild, member);
}
this.scheduleForDeletion(guild.id, data.user.id); this.scheduleForDeletion(guild.id, data.user.id);
} } else {
if (!member) {
member = this.deleted[guild.id + data.user.id]; member = this.deleted[guild.id + data.user.id];
} }
return { return {
g: guild, guild,
m: member, member,
}; };
} }
return { return {
g: guild, guild,
m: null, member: null,
}; };
} }
@@ -44,7 +41,6 @@ class GuildMemberRemoveAction extends Action {
} }
} }
/** /**
* Emitted whenever a member leaves a guild, or is kicked. * Emitted whenever a member leaves a guild, or is kicked.
* *
@@ -53,5 +49,4 @@ class GuildMemberRemoveAction extends Action {
* @param {GuildMember} member the member that has left the guild. * @param {GuildMember} member the member that has left the guild.
*/ */
module.exports = GuildMemberRemoveAction; module.exports = GuildMemberRemoveAction;

View File

@@ -6,17 +6,13 @@ class GuildRoleCreate extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
const guild = client.guilds.get(data.guild_id);
const guild = client.guilds.get(data.guild_id);
if (guild) { if (guild) {
const already = guild.roles.get(data.role.id); const already = guild.roles.has(data.role.id);
const role = new Role(guild, data.role); const role = new Role(guild, data.role);
guild.roles.set(role.id, role); guild.roles.set(role.id, role);
if (!already) client.emit(Constants.Events.GUILD_ROLE_CREATE, guild, role);
if (!already) {
client.emit(Constants.Events.GUILD_ROLE_CREATE, guild, role);
}
return { return {
role, role,
}; };
@@ -28,7 +24,6 @@ class GuildRoleCreate extends Action {
} }
} }
/** /**
* Emitted whenever a guild role is created. * Emitted whenever a guild role is created.
* *
@@ -37,5 +32,4 @@ class GuildRoleCreate extends Action {
* @param {Role} role the role that was created. * @param {Role} role the role that was created.
*/ */
module.exports = GuildRoleCreate; module.exports = GuildRoleCreate;

View File

@@ -10,23 +10,21 @@ class GuildRoleDeleteAction extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
const guild = client.guilds.get(data.guild_id); const guild = client.guilds.get(data.guild_id);
if (guild) { if (guild) {
let exists = guild.roles.get(data.role_id); let role = guild.roles.get(data.role_id);
if (exists) { if (role) {
guild.roles.delete(data.role_id); guild.roles.delete(data.role_id);
this.deleted[guild.id + data.role_id] = exists; this.deleted[guild.id + data.role_id] = role;
this.scheduleForDeletion(guild.id, data.role_id); this.scheduleForDeletion(guild.id, data.role_id);
client.emit(Constants.Events.GUILD_ROLE_DELETE, guild, exists); client.emit(Constants.Events.GUILD_ROLE_DELETE, guild, role);
} } else {
role = this.deleted[guild.id + data.role_id];
if (!exists) {
exists = this.deleted[guild.id + data.role_id];
} }
return { return {
role: exists, role,
}; };
} }

View File

@@ -6,23 +6,22 @@ class GuildRoleUpdateAction extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
const guild = client.guilds.get(data.guild_id); const guild = client.guilds.get(data.guild_id);
const roleData = data.role;
if (guild) { if (guild) {
let oldRole; const roleData = data.role;
const existingRole = guild.roles.get(roleData.id); let oldRole = null;
// exists and not the same
if (existingRole && !existingRole.equals(roleData)) { const role = guild.roles.get(roleData.id);
oldRole = cloneObject(existingRole); if (role && !role.equals(roleData)) {
existingRole.setup(data.role); oldRole = cloneObject(role);
client.emit(Constants.Events.GUILD_ROLE_UPDATE, guild, oldRole, existingRole); role.setup(data.role);
client.emit(Constants.Events.GUILD_ROLE_UPDATE, guild, oldRole, role);
} }
return { return {
old: oldRole, old: oldRole,
updated: existingRole, updated: role,
}; };
} }

View File

@@ -4,11 +4,10 @@ class GuildSync extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
const guild = client.guilds.get(data.id);
const guild = client.guilds.get(data.id);
if (guild) { if (guild) {
data.presences = data.presences || []; data.presences = data.presences || [];
data.members = data.members || [];
for (const presence of data.presences) { for (const presence of data.presences) {
const user = client.users.get(presence.user.id); const user = client.users.get(presence.user.id);
if (user) { if (user) {
@@ -16,6 +15,8 @@ class GuildSync extends Action {
user.game = presence.game; user.game = presence.game;
} }
} }
data.members = data.members || [];
for (const syncMember of data.members) { for (const syncMember of data.members) {
const member = guild.members.get(syncMember.user.id); const member = guild.members.get(syncMember.user.id);
if (member) { if (member) {

View File

@@ -12,16 +12,12 @@ class GuildUpdateAction extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
const guild = client.guilds.get(data.id);
const guild = client.guilds.get(data.id);
if (guild) { if (guild) {
const oldGuild = cloneObject(guild); const oldGuild = cloneObject(guild);
guild.setup(data); guild.setup(data);
if (!oldGuild.equals(data)) client.emit(Constants.Events.GUILD_UPDATE, oldGuild, guild);
if (!oldGuild.equals(data)) {
client.emit(Constants.Events.GUILD_UPDATE, oldGuild, guild);
}
return { return {
old: oldGuild, old: oldGuild,
updated: guild, updated: guild,

View File

@@ -5,17 +5,17 @@ class MessageCreateAction extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
const channel = client.channels.get(data.channel_id);
const channel = client.channels.get(data.channel_id);
if (channel) { if (channel) {
const message = channel._cacheMessage(new Message(channel, data, client)); const message = channel._cacheMessage(new Message(channel, data, client));
return { return {
m: message, message,
}; };
} }
return { return {
m: null, message: null,
}; };
} }
} }

View File

@@ -9,6 +9,7 @@ class MessageDeleteAction extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
const channel = client.channels.get(data.channel_id); const channel = client.channels.get(data.channel_id);
if (channel) { if (channel) {
let message = channel.messages.get(data.id); let message = channel.messages.get(data.id);
@@ -22,18 +23,18 @@ class MessageDeleteAction extends Action {
} }
return { return {
m: message, message,
}; };
} }
return { return {
m: null, message: null,
}; };
} }
scheduleForDeletion(channelID, messageID) { scheduleForDeletion(channelID, messageID) {
this.client.setTimeout( this.client.setTimeout(() => delete this.deleted[channelID + messageID],
() => delete this.deleted[channelID + messageID], this.client.options.rest_ws_bridge_timeout); this.client.options.rest_ws_bridge_timeout);
} }
} }

View File

@@ -13,6 +13,7 @@ class MessageDeleteBulkAction extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
const channel = client.channels.get(data.channel_id); const channel = client.channels.get(data.channel_id);
const ids = data.ids; const ids = data.ids;
const messages = new Collection(); const messages = new Collection();
for (const id of ids) { for (const id of ids) {
@@ -21,9 +22,8 @@ class MessageDeleteBulkAction extends Action {
messages.set(message.id, message); messages.set(message.id, message);
} }
} }
if (messages.size > 0) {
client.emit(Constants.Events.MESSAGE_BULK_DELETE, messages); if (messages.size > 0) client.emit(Constants.Events.MESSAGE_BULK_DELETE, messages);
}
return { return {
messages, messages,
}; };

View File

@@ -6,8 +6,8 @@ class MessageUpdateAction extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
const channel = client.channels.get(data.channel_id);
const channel = client.channels.get(data.channel_id);
if (channel) { if (channel) {
const message = channel.messages.get(data.id); const message = channel.messages.get(data.id);
if (message && !message.equals(data, true)) { if (message && !message.equals(data, true)) {

View File

@@ -5,7 +5,6 @@ class UserGetAction extends Action {
handle(data) { handle(data) {
const client = this.client; const client = this.client;
const user = client.dataManager.newUser(data); const user = client.dataManager.newUser(data);
return { return {
user, user,
}; };

View File

@@ -17,9 +17,7 @@ class UserUpdateAction extends Action {
const oldUser = cloneObject(client.user); const oldUser = cloneObject(client.user);
client.user.setup(data); client.user.setup(data);
client.emit(Constants.Events.USER_UPDATE, oldUser, client.user); client.emit(Constants.Events.USER_UPDATE, oldUser, client.user);
return { return {
old: oldUser, old: oldUser,
updated: client.user, updated: client.user,

View File

@@ -54,7 +54,7 @@ class RESTMethods {
$this.rest.makeRequest('post', Constants.Endpoints.channelMessages(channel.id), true, { $this.rest.makeRequest('post', Constants.Endpoints.channelMessages(channel.id), true, {
content, tts, nonce, content, tts, nonce,
}, file) }, file)
.then(data => resolve($this.rest.client.actions.MessageCreate.handle(data).m)) .then(data => resolve($this.rest.client.actions.MessageCreate.handle(data).message))
.catch(reject); .catch(reject);
} }
@@ -77,7 +77,7 @@ class RESTMethods {
resolve(this.rest.client.actions.MessageDelete.handle({ resolve(this.rest.client.actions.MessageDelete.handle({
id: message.id, id: message.id,
channel_id: message.channel.id, channel_id: message.channel.id,
}).m); }).message);
}) })
.catch(reject); .catch(reject);
}); });
@@ -286,7 +286,7 @@ class RESTMethods {
resolve(this.rest.client.actions.GuildMemberRemove.handle({ resolve(this.rest.client.actions.GuildMemberRemove.handle({
guild_id: guild.id, guild_id: guild.id,
user: member.user, user: member.user,
}).m); }).member);
}) })
.catch(reject); .catch(reject);
}); });

View File

@@ -9,8 +9,8 @@ class MessageCreateHandler extends AbstractHandler {
const response = client.actions.MessageCreate.handle(data); const response = client.actions.MessageCreate.handle(data);
if (response.m) { if (response.message) {
client.emit(Constants.Events.MESSAGE_CREATE, response.m); client.emit(Constants.Events.MESSAGE_CREATE, response.message);
} }
} }

View File

@@ -9,8 +9,8 @@ class MessageDeleteHandler extends AbstractHandler {
const response = client.actions.MessageDelete.handle(data); const response = client.actions.MessageDelete.handle(data);
if (response.m) { if (response.message) {
client.emit(Constants.Events.MESSAGE_DELETE, response.m); client.emit(Constants.Events.MESSAGE_DELETE, response.message);
} }
} }