refactor(GuildAuditLogsEntry): abstract reduce logic into a new function

This commit is contained in:
Danial Raza
2023-09-20 22:40:12 +00:00
parent f27d4fcdbd
commit b2d93dce51

View File

@@ -83,6 +83,20 @@ const Targets = {
* @typedef {string} AuditLogTargetType
*/
/**
* Contructs an object of known properties for a structure from an array of changes.
* @param {AuditLogChange[]} changes The array of changes
* @param {Object} [initialData={}] The initial data passed to the function
* @returns {Object}
* @ignore
*/
function changesReduce(changes, initialData = {}) {
return changes.reduce((accumulator, change) => {
accumulator[change.key] = change.new ?? change.old;
return accumulator;
}, initialData);
}
/**
* Audit logs entry.
*/
@@ -150,7 +164,7 @@ class GuildAuditLogsEntry {
* Specific property changes
* @type {AuditLogChange[]}
*/
this.changes = data.changes?.map(c => ({ key: c.key, old: c.old_value, new: c.new_value })) ?? [];
this.changes = data.changes?.map(cha => ({ key: cha.key, old: cha.old_value, new: cha.new_value })) ?? [];
/**
* The entry's id
@@ -268,10 +282,7 @@ class GuildAuditLogsEntry {
*/
this.target = null;
if (targetType === Targets.Unknown) {
this.target = this.changes.reduce((o, c) => {
o[c.key] = c.new ?? c.old;
return o;
}, {});
this.target = changesReduce(this.changes, {});
this.target.id = data.target_id;
// MemberDisconnect and similar types do not provide a target_id.
} else if (targetType === Targets.User && data.target_id) {
@@ -284,34 +295,16 @@ class GuildAuditLogsEntry {
this.target =
logs?.webhooks.get(data.target_id) ??
new Webhook(
guild.client,
this.changes.reduce(
(o, c) => {
o[c.key] = c.new ?? c.old;
return o;
},
{
id: data.target_id,
guild_id: guild.id,
},
),
changesReduce(this.changes, {
id: data.target_id,
guild_id: guild.id,
}),
);
} else if (targetType === Targets.Invite) {
let change = this.changes.find(c => c.key === 'code');
let change = this.changes.find(cha => cha.key === 'code');
change = change.new ?? change.old;
this.target =
guild.invites.cache.get(change) ??
new Invite(
guild.client,
this.changes.reduce(
(o, c) => {
o[c.key] = c.new ?? c.old;
return o;
},
{ guild },
),
);
this.target = guild.invites.cache.get(change) ?? new Invite(guild.client, changesReduce(this.changes, { guild }));
} else if (targetType === Targets.Message) {
// Discord sends a channel id for the MessageBulkDelete action type.
this.target =
@@ -321,70 +314,28 @@ class GuildAuditLogsEntry {
} else if (targetType === Targets.Integration) {
this.target =
logs?.integrations.get(data.target_id) ??
new Integration(
guild.client,
this.changes.reduce(
(o, c) => {
o[c.key] = c.new ?? c.old;
return o;
},
{ id: data.target_id },
),
guild,
);
new Integration(guild.client, changesReduce(this.changes, { id: data.target_id }), guild);
} else if (targetType === Targets.Channel || targetType === Targets.Thread) {
this.target =
guild.channels.cache.get(data.target_id) ??
this.changes.reduce(
(o, c) => {
o[c.key] = c.new ?? c.old;
return o;
},
{ id: data.target_id },
);
this.target = guild.channels.cache.get(data.target_id) ?? changesReduce(this.changes, { id: data.target_id });
} else if (targetType === Targets.StageInstance) {
this.target =
guild.stageInstances.cache.get(data.target_id) ??
new StageInstance(
guild.client,
this.changes.reduce(
(o, c) => {
o[c.key] = c.new ?? c.old;
return o;
},
{
id: data.target_id,
channel_id: data.options?.channel_id,
guild_id: guild.id,
},
),
changesReduce(this.changes, {
id: data.target_id,
channel_id: data.options?.channel_id,
guild_id: guild.id,
}),
);
} else if (targetType === Targets.Sticker) {
this.target =
guild.stickers.cache.get(data.target_id) ??
new Sticker(
guild.client,
this.changes.reduce(
(o, c) => {
o[c.key] = c.new ?? c.old;
return o;
},
{ id: data.target_id },
),
);
new Sticker(guild.client, changesReduce(this.changes, { id: data.target_id }));
} else if (targetType === Targets.GuildScheduledEvent) {
this.target =
guild.scheduledEvents.cache.get(data.target_id) ??
new GuildScheduledEvent(
guild.client,
this.changes.reduce(
(o, c) => {
o[c.key] = c.new ?? c.old;
return o;
},
{ id: data.target_id, guild_id: guild.id },
),
);
new GuildScheduledEvent(guild.client, changesReduce(this.changes, { id: data.target_id, guild_id: guild.id }));
} else if (targetType === Targets.ApplicationCommand) {
this.target = logs?.applicationCommands.get(data.target_id) ?? { id: data.target_id };
} else if (targetType === Targets.AutoModeration) {
@@ -392,13 +343,7 @@ class GuildAuditLogsEntry {
guild.autoModerationRules.cache.get(data.target_id) ??
new AutoModerationRule(
guild.client,
this.changes.reduce(
(o, c) => {
o[c.key] = c.new ?? c.old;
return o;
},
{ id: data.target_id, guild_id: guild.id },
),
changesReduce(this.changes, { id: data.target_id, guild_id: guild.id }),
guild,
);
} else if (data.target_id) {