3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-03-19 07:20:00 +00:00
zeppelin/backend/src/plugins/Logs/events/LogsUserUpdateEvts.ts

92 lines
3.2 KiB
TypeScript
Raw Normal View History

import { GuildAuditLogs } from "discord.js";
import diff from "lodash.difference";
import isEqual from "lodash.isequal";
2021-08-18 01:51:42 +03:00
import { memberToTemplateSafeMember, userToTemplateSafeUser } from "../../../utils/templateSafeObjects";
import { LogType } from "../../../data/LogType";
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";
export const LogsGuildMemberUpdateEvt = logsEvt({
event: "guildMemberUpdate",
async listener(meta) {
const pluginData = meta.pluginData;
const oldMember = meta.args.oldMember;
const member = meta.args.newMember;
const oldRoles = [...oldMember.roles.cache.keys()];
const currentRoles = [...member.roles.cache.keys()];
2021-08-19 02:17:16 +03:00
if (!oldMember || oldMember.partial) {
return;
}
if (member.nickname !== oldMember.nickname) {
2021-08-18 01:51:42 +03:00
logMemberNickChange(pluginData, {
member,
oldNick: oldMember.nickname != null ? oldMember.nickname : "<none>",
newNick: member.nickname != null ? member.nickname : "<none>",
});
}
if (!isEqual(oldRoles, currentRoles)) {
const addedRoles = diff(currentRoles, oldRoles);
const removedRoles = diff(oldRoles, currentRoles);
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(
2021-09-11 19:06:51 +03:00
(roleId) => pluginData.guild.roles.cache.get(roleId) ?? { id: roleId, name: `Unknown (${roleId})` },
2021-08-19 01:59:07 +03:00
),
removedRoles: removedRoles.map(
2021-09-11 19:06:51 +03:00
(roleId) => pluginData.guild.roles.cache.get(roleId) ?? { id: roleId, name: `Unknown (${roleId})` },
2021-08-19 01:59:07 +03:00
),
mod: null,
2021-08-18 01:51:42 +03: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(
2021-09-11 19:06:51 +03:00
(roleId) => pluginData.guild.roles.cache.get(roleId) ?? { id: roleId, name: `Unknown (${roleId})` },
2021-08-19 01:59:07 +03:00
),
mod: null,
2021-08-18 01:51:42 +03: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(
2021-09-11 19:06:51 +03:00
(roleId) => pluginData.guild.roles.cache.get(roleId) ?? { id: roleId, name: `Unknown (${roleId})` },
2021-08-19 01:59:07 +03:00
),
mod: null,
2021-08-18 01:51:42 +03:00
});
}
}
}
},
});
// TODO: Reimplement USERNAME_CHANGE