| 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) } |
| } |