diff --git a/src/events/emojiDelete.ts b/src/events/emojiDelete.ts index f3c58fa..c4b488e 100644 --- a/src/events/emojiDelete.ts +++ b/src/events/emojiDelete.ts @@ -6,7 +6,7 @@ export const event = "emojiDelete"; export async function callback(client: NucleusClient, emoji: GuildEmoji) { const { getAuditLog, log, isLogging, NucleusColors, entry, renderUser, renderDelta, renderEmoji } = client.logger; if (!await isLogging(emoji.guild.id, "emojiUpdate")) return; - const auditLog = (await getAuditLog(emoji.guild, AuditLogEvent.EmojiCreate)) + const auditLog = (await getAuditLog(emoji.guild, AuditLogEvent.EmojiDelete)) .filter((entry: GuildAuditLogsEntry) => (entry.target as GuildEmoji)!.id === emoji.id)[0]; if (!auditLog) return; if (auditLog.executor!.id === client.user!.id) return; diff --git a/src/events/emojiUpdate.ts b/src/events/emojiUpdate.ts index 59b4488..98ff558 100644 --- a/src/events/emojiUpdate.ts +++ b/src/events/emojiUpdate.ts @@ -7,7 +7,7 @@ export async function callback(client: NucleusClient, oldEmoji: GuildEmoji, newE const { getAuditLog, log, isLogging, NucleusColors, entry, renderUser, renderDelta, renderEmoji } = client.logger; if (!(await isLogging(newEmoji.guild.id, "emojiUpdate"))) return; - const auditLog = (await getAuditLog(newEmoji.guild, AuditLogEvent.EmojiCreate)) + const auditLog = (await getAuditLog(newEmoji.guild, AuditLogEvent.EmojiUpdate)) .filter((entry: GuildAuditLogsEntry) => (entry.target as GuildEmoji)!.id === newEmoji.id)[0]; if (!auditLog) return; if (auditLog.executor!.id === client.user!.id) return; diff --git a/src/events/guildMemberUpdate.ts b/src/events/guildMemberUpdate.ts index 81b2337..412ac96 100644 --- a/src/events/guildMemberUpdate.ts +++ b/src/events/guildMemberUpdate.ts @@ -1,15 +1,60 @@ import { AuditLogEvent, GuildAuditLogsEntry, GuildMember } from "discord.js"; import type { NucleusClient } from "../utils/client.js"; +import type { LoggerOptions } from "../utils/log.js"; export const event = "guildMemberUpdate"; export async function callback(client: NucleusClient, before: GuildMember, after: GuildMember) { - const { log, isLogging, NucleusColors, entry, renderUser, renderDelta, getAuditLog } = client.logger; - if (!await isLogging(after.guild.id, "memberUpdate")) return; - const auditLog = (await getAuditLog(after.guild, AuditLogEvent.EmojiCreate)) + const { log, NucleusColors, entry, renderUser, renderDelta, getAuditLog } = client.logger; + + const auditLog = (await getAuditLog(after.guild, AuditLogEvent.MemberUpdate)) .filter((entry: GuildAuditLogsEntry) => (entry.target as GuildMember)!.id === after.id)[0]; if (!auditLog) return; if (auditLog.executor!.id === client.user!.id) return; + if(!before.roles.cache.equals(after.roles.cache)) { + let rolesAdded = after.roles.cache.filter(role => !before.roles.cache.has(role.id)); + let rolesRemoved = before.roles.cache.filter(role => !after.roles.cache.has(role.id)); + let displayName = "Roles Removed"; + let color = NucleusColors.red; + let emoji = "GUILD.ROLES.DELETE"; + if(rolesAdded.size > 0 && rolesRemoved.size > 0) {displayName = "Roles Changed"; color = NucleusColors.yellow; emoji = "GUILD.ROLES.EDIT";} + else if(rolesAdded.size > 0) {displayName = "Roles Added"; color = NucleusColors.green; emoji = "GUILD.ROLES.CREATE";} + let removedEntry = rolesRemoved.map(role => role.id); + let addedEntry = rolesAdded.map(role => role.id); + + let list = { + memberId: entry(after.id, `\`${after.id}\``), + name: entry(after.user.id, renderUser(after.user)), + changed: entry(Date.now(), renderDelta(Date.now())), + changedBy: entry(auditLog.executor!.id, renderUser(auditLog.executor!)) + }; + + let data: LoggerOptions = { + meta: { + type: "memberUpdate", + displayName: displayName, + calculateType: "guildMemberUpdate", + color: color, + emoji: emoji, + timestamp: Date.now() + }, + list: { + + }, + hidden: { + guild: after.guild.id + } + }; + + if(rolesAdded.size > 0) { + list = Object.assign(list, {rolesAdded: entry(addedEntry, addedEntry.map(id => `<@&${id}>`).join(", "))}); + } + if(rolesRemoved.size > 0) { + list = Object.assign(list, {rolesRemoved: entry(removedEntry, removedEntry.map(id => `<@&${id}>`).join(", "))}); + } + data = Object.assign(data, {list: list}); + log(data); + } if (before.nickname !== after.nickname) { await client.database.history.create( "nickname", @@ -42,7 +87,8 @@ export async function callback(client: NucleusClient, before: GuildMember, after } }; log(data); - } else if ( + } + if ( (before.communicationDisabledUntilTimestamp ?? 0) < Date.now() && (after.communicationDisabledUntil ?? 0) > Date.now() ) { @@ -86,7 +132,8 @@ export async function callback(client: NucleusClient, before: GuildMember, after user: after.id, expires: after.communicationDisabledUntilTimestamp }); - } else if ( + } + if ( after.communicationDisabledUntil === null && before.communicationDisabledUntilTimestamp !== null && Date.now() >= auditLog.createdTimestamp diff --git a/src/events/stickerCreate.ts b/src/events/stickerCreate.ts index 0996302..767e004 100644 --- a/src/events/stickerCreate.ts +++ b/src/events/stickerCreate.ts @@ -6,7 +6,7 @@ export const event = "stickerDelete"; export async function callback(client: NucleusClient, sticker: Sticker) { const { getAuditLog, isLogging, log, NucleusColors, entry, renderUser, renderDelta } = client.logger; if (!await isLogging(sticker.guild!.id, "stickerUpdate")) return; - const auditLog = (await getAuditLog(sticker.guild!, AuditLogEvent.EmojiCreate)) + const auditLog = (await getAuditLog(sticker.guild!, AuditLogEvent.StickerCreate)) .filter((entry: GuildAuditLogsEntry) => (entry.target as Sticker)!.id === sticker.id)[0]!; if (auditLog.executor!.id === client.user!.id) return; const data = {