2021-06-06 23:51:32 +02:00
|
|
|
import { GuildAuditLogs } from "discord.js";
|
2020-07-27 01:53:14 +02:00
|
|
|
import diff from "lodash.difference";
|
2021-06-06 23:51:32 +02:00
|
|
|
import isEqual from "lodash.isequal";
|
2021-08-18 01:51:42 +03:00
|
|
|
import { memberToTemplateSafeMember, userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
|
2021-06-06 23:51:32 +02:00
|
|
|
import { LogType } from "../../../data/LogType";
|
2020-08-05 02:25:13 +03:00
|
|
|
import { safeFindRelevantAuditLogEntry } from "../../../utils/safeFindRelevantAuditLogEntry";
|
2021-06-06 23:51:32 +02:00
|
|
|
import { logsEvt } from "../types";
|
2021-08-18 01:51:42 +03:00
|
|
|
import { logMemberNickChange } from "../logFunctions/logMemberNickChange";
|
|
|
|
import { logMemberRoleChanges } from "../logFunctions/logMemberRoleChanges";
|
|
|
|
import { logMemberRoleAdd } from "../logFunctions/logMemberRoleAdd";
|
|
|
|
import { logMemberRoleRemove } from "../logFunctions/logMemberRoleRemove";
|
2021-06-06 23:51:32 +02:00
|
|
|
|
2020-10-01 01:43:38 +03:00
|
|
|
export const LogsGuildMemberUpdateEvt = logsEvt({
|
2020-07-27 01:53:14 +02:00
|
|
|
event: "guildMemberUpdate",
|
|
|
|
|
|
|
|
async listener(meta) {
|
|
|
|
const pluginData = meta.pluginData;
|
|
|
|
const oldMember = meta.args.oldMember;
|
2021-06-01 04:33:02 +02:00
|
|
|
const member = meta.args.newMember;
|
2020-07-27 01:53:14 +02:00
|
|
|
|
2021-08-19 02:17:16 +03:00
|
|
|
if (!oldMember || oldMember.partial) {
|
|
|
|
return;
|
|
|
|
}
|
2020-07-27 01:53:14 +02:00
|
|
|
|
2021-06-01 04:33:02 +02:00
|
|
|
if (member.nickname !== oldMember.nickname) {
|
2021-08-18 01:51:42 +03:00
|
|
|
logMemberNickChange(pluginData, {
|
|
|
|
member,
|
2021-06-01 04:33:02 +02:00
|
|
|
oldNick: oldMember.nickname != null ? oldMember.nickname : "<none>",
|
|
|
|
newNick: member.nickname != null ? member.nickname : "<none>",
|
2020-07-27 01:53:14 +02:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!isEqual(oldMember.roles, member.roles)) {
|
2021-08-04 20:45:42 +01:00
|
|
|
const addedRoles = diff([...member.roles.cache.keys()], [...oldMember.roles.cache.keys()]);
|
|
|
|
const removedRoles = diff([...oldMember.roles.cache.keys()], [...member.roles.cache.keys()]);
|
2020-07-27 01:53:14 +02:00
|
|
|
let skip = false;
|
|
|
|
|
|
|
|
if (
|
|
|
|
addedRoles.length &&
|
|
|
|
removedRoles.length &&
|
|
|
|
pluginData.state.guildLogs.isLogIgnored(LogType.MEMBER_ROLE_CHANGES, member.id)
|
|
|
|
) {
|
|
|
|
skip = true;
|
|
|
|
} else if (addedRoles.length && pluginData.state.guildLogs.isLogIgnored(LogType.MEMBER_ROLE_ADD, member.id)) {
|
|
|
|
skip = true;
|
|
|
|
} else if (
|
|
|
|
removedRoles.length &&
|
|
|
|
pluginData.state.guildLogs.isLogIgnored(LogType.MEMBER_ROLE_REMOVE, member.id)
|
|
|
|
) {
|
|
|
|
skip = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!skip) {
|
|
|
|
if (addedRoles.length && removedRoles.length) {
|
|
|
|
// Roles added *and* removed
|
2021-08-18 01:51:42 +03:00
|
|
|
logMemberRoleChanges(pluginData, {
|
|
|
|
member,
|
2021-08-19 01:59:07 +03:00
|
|
|
addedRoles: addedRoles.map(
|
|
|
|
roleId => pluginData.guild.roles.cache.get(roleId) ?? { id: roleId, name: `Unknown (${roleId})` },
|
|
|
|
),
|
|
|
|
removedRoles: removedRoles.map(
|
|
|
|
roleId => pluginData.guild.roles.cache.get(roleId) ?? { id: roleId, name: `Unknown (${roleId})` },
|
|
|
|
),
|
2021-08-18 23:25:26 +03:00
|
|
|
mod: null,
|
2021-08-18 01:51:42 +03:00
|
|
|
});
|
2020-07-27 01:53:14 +02:00
|
|
|
} else if (addedRoles.length) {
|
|
|
|
// Roles added
|
2021-08-18 01:51:42 +03:00
|
|
|
logMemberRoleAdd(pluginData, {
|
|
|
|
member,
|
2021-08-19 01:59:07 +03:00
|
|
|
roles: addedRoles.map(
|
|
|
|
roleId => pluginData.guild.roles.cache.get(roleId) ?? { id: roleId, name: `Unknown (${roleId})` },
|
|
|
|
),
|
2021-08-18 23:25:26 +03:00
|
|
|
mod: null,
|
2021-08-18 01:51:42 +03:00
|
|
|
});
|
2020-07-27 01:53:14 +02:00
|
|
|
} else if (removedRoles.length && !addedRoles.length) {
|
|
|
|
// Roles removed
|
2021-08-18 01:51:42 +03:00
|
|
|
logMemberRoleRemove(pluginData, {
|
|
|
|
member,
|
2021-08-19 01:59:07 +03:00
|
|
|
roles: removedRoles.map(
|
|
|
|
roleId => pluginData.guild.roles.cache.get(roleId) ?? { id: roleId, name: `Unknown (${roleId})` },
|
|
|
|
),
|
2021-08-18 23:25:26 +03:00
|
|
|
mod: null,
|
2021-08-18 01:51:42 +03:00
|
|
|
});
|
2020-07-27 01:53:14 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
2020-10-01 01:43:38 +03:00
|
|
|
// TODO: Reimplement USERNAME_CHANGE
|