export const event = 'guildMemberUpdate' export async function callback(client, before, after) { try { const { log, NucleusColors, entry, renderUser, renderDelta, getAuditLog } = after.client.logger let auditLog = await getAuditLog(after.guild, 'MEMBER_UPDATE'); let audit = auditLog.entries.filter(entry => entry.target.id === after.id).first(); if (audit.executor.id === client.user.id) return; if (before.nickname !== after.nickname) { try { await client.database.history.create( "nickname", after.guild.id, after.user, audit.executor, null, before.nickname || before.user.username, after.nickname || after.user.username) } catch {} let data = { meta: { type: 'memberUpdate', displayName: 'Nickname Changed', calculateType: 'guildMemberUpdate', color: NucleusColors.yellow, emoji: "PUNISH.NICKNAME.YELLOW", timestamp: new Date().getTime() }, list: { memberId: entry(after.id, `\`${after.id}\``), name: entry(after.user.id, renderUser(after.user)), before: entry(before.nickname, before.nickname ? before.nickname : '*None*'), after: entry(after.nickname, after.nickname ? after.nickname : '*None*'), changed: entry(new Date().getTime(), renderDelta(new Date().getTime())), changedBy: entry(audit.executor.id, renderUser(audit.executor)) }, hidden: { guild: after.guild.id } } log(data); } else if (before.communicationDisabledUntilTimestamp < new Date().getTime() && after.communicationDisabledUntil > new Date().getTime()) { try { await client.database.history.create( "mute", after.guild.id, after.user, audit.executor, audit.reason, null, null, null )} catch {} let data = { meta: { type: 'memberMute', displayName: 'Muted', calculateType: 'guildMemberPunish', color: NucleusColors.yellow, emoji: "PUNISH.MUTE.YELLOW", timestamp: new Date().getTime() }, list: { memberId: entry(after.id, `\`${after.id}\``), name: entry(after.user.id, renderUser(after.user)), mutedUntil: entry(after.communicationDisabledUntilTimestamp, renderDelta(after.communicationDisabledUntilTimestamp)), muted: entry(new Date().getTime(), renderDelta(new Date().getTime())), mutedBy: entry(audit.executor.id, renderUser(audit.executor)), reason: entry(audit.reason, audit.reason ? audit.reason : '\n> *No reason provided*') }, hidden: { guild: after.guild.id } } log(data); client.database.eventScheduler.schedule("naturalUnmute", after.communicationDisabledUntil, {guild: after.guild.id, user: after.id, expires: after.communicationDisabledUntilTimestamp} ); } else if ( after.communicationDisabledUntil === null && before.communicationDisabledUntilTimestamp !== null && new Date().getTime() >= audit.createdTimestamp ) { try { await client.database.history.create( "unmute", after.guild.id, after.user, audit.executor, null, null, null, null )} catch {} let data = { meta: { type: 'memberUnmute', displayName: 'Unmuted', calculateType: 'guildMemberPunish', color: NucleusColors.green, emoji: "PUNISH.MUTE.GREEN", timestamp: new Date().getTime() }, list: { memberId: entry(after.id, `\`${after.id}\``), name: entry(after.user.id, renderUser(after.user)), unmuted: entry(new Date().getTime(), renderDelta(new Date().getTime())), unmutedBy: entry(audit.executor.id, renderUser(audit.executor)) }, hidden: { guild: after.guild.id } } log(data); client.database.eventScheduler.cancel("naturalUnmute", {guild: after.guild.id, user: after.id, expires: before.communicationDisabledUntilTimestamp}); } } catch (e) { console.log(e) } }