Migrate Logs to new Plugin structure, also dont ignore it
This commit is contained in:
parent
140ba84544
commit
aea019181c
16 changed files with 764 additions and 1 deletions
23
backend/src/plugins/Logs/events/LogsChannelModifyEvts.ts
Normal file
23
backend/src/plugins/Logs/events/LogsChannelModifyEvts.ts
Normal file
|
@ -0,0 +1,23 @@
|
|||
import { logsEvent } from "../types";
|
||||
import { stripObjectToScalars } from "src/utils";
|
||||
import { LogType } from "src/data/LogType";
|
||||
|
||||
export const LogsChannelCreateEvt = logsEvent({
|
||||
event: "channelCreate",
|
||||
|
||||
async listener(meta) {
|
||||
meta.pluginData.state.guildLogs.log(LogType.CHANNEL_CREATE, {
|
||||
channel: stripObjectToScalars(meta.args.channel),
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
export const LogsChannelDeleteEvt = logsEvent({
|
||||
event: "channelDelete",
|
||||
|
||||
async listener(meta) {
|
||||
meta.pluginData.state.guildLogs.log(LogType.CHANNEL_DELETE, {
|
||||
channel: stripObjectToScalars(meta.args.channel),
|
||||
});
|
||||
},
|
||||
});
|
54
backend/src/plugins/Logs/events/LogsGuildBanEvts.ts
Normal file
54
backend/src/plugins/Logs/events/LogsGuildBanEvts.ts
Normal file
|
@ -0,0 +1,54 @@
|
|||
import { logsEvent } from "../types";
|
||||
import { stripObjectToScalars, findRelevantAuditLogEntry, UnknownUser } from "src/utils";
|
||||
import { LogType } from "src/data/LogType";
|
||||
import { Constants as ErisConstants } from "eris";
|
||||
|
||||
export const LogsGuildBanAddEvt = logsEvent({
|
||||
event: "guildBanAdd",
|
||||
|
||||
async listener(meta) {
|
||||
const pluginData = meta.pluginData;
|
||||
const user = meta.args.user;
|
||||
|
||||
const relevantAuditLogEntry = await findRelevantAuditLogEntry(
|
||||
pluginData.guildConfig,
|
||||
ErisConstants.AuditLogActions.MEMBER_BAN_ADD,
|
||||
user.id,
|
||||
);
|
||||
const mod = relevantAuditLogEntry ? relevantAuditLogEntry.user : new UnknownUser();
|
||||
|
||||
pluginData.state.guildLogs.log(
|
||||
LogType.MEMBER_BAN,
|
||||
{
|
||||
mod: stripObjectToScalars(mod),
|
||||
user: stripObjectToScalars(user),
|
||||
},
|
||||
user.id,
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
export const LogsGuildBanRemoveEvt = logsEvent({
|
||||
event: "guildBanRemove",
|
||||
|
||||
async listener(meta) {
|
||||
const pluginData = meta.pluginData;
|
||||
const user = meta.args.user;
|
||||
|
||||
const relevantAuditLogEntry = await findRelevantAuditLogEntry(
|
||||
pluginData.guild,
|
||||
ErisConstants.AuditLogActions.MEMBER_BAN_REMOVE,
|
||||
user.id,
|
||||
);
|
||||
const mod = relevantAuditLogEntry ? relevantAuditLogEntry.user : new UnknownUser();
|
||||
|
||||
pluginData.state.guildLogs.log(
|
||||
LogType.MEMBER_UNBAN,
|
||||
{
|
||||
mod: stripObjectToScalars(mod),
|
||||
userId: user.id,
|
||||
},
|
||||
user.id,
|
||||
);
|
||||
},
|
||||
});
|
52
backend/src/plugins/Logs/events/LogsGuildMemberAddEvt.ts
Normal file
52
backend/src/plugins/Logs/events/LogsGuildMemberAddEvt.ts
Normal file
|
@ -0,0 +1,52 @@
|
|||
import { logsEvent } from "../types";
|
||||
import { stripObjectToScalars } from "src/utils";
|
||||
import { LogType } from "src/data/LogType";
|
||||
import moment from "moment-timezone";
|
||||
import humanizeDuration from "humanize-duration";
|
||||
|
||||
export const LogsGuildMemberAddEvt = logsEvent({
|
||||
event: "guildMemberAdd",
|
||||
|
||||
async listener(meta) {
|
||||
const pluginData = meta.pluginData;
|
||||
const member = meta.args.member;
|
||||
|
||||
const newThreshold = moment().valueOf() - 1000 * 60 * 60;
|
||||
const accountAge = humanizeDuration(moment().valueOf() - member.createdAt, {
|
||||
largest: 2,
|
||||
round: true,
|
||||
});
|
||||
|
||||
pluginData.state.guildLogs.log(LogType.MEMBER_JOIN, {
|
||||
member: stripObjectToScalars(member, ["user", "roles"]),
|
||||
new: member.createdAt >= newThreshold ? " :new:" : "",
|
||||
account_age: accountAge,
|
||||
});
|
||||
|
||||
const cases = (await pluginData.state.cases.with("notes").getByUserId(member.id)).filter(c => !c.is_hidden);
|
||||
cases.sort((a, b) => (a.created_at > b.created_at ? -1 : 1));
|
||||
|
||||
if (cases.length) {
|
||||
const recentCaseLines = [];
|
||||
const recentCases = cases.slice(0, 2);
|
||||
for (const theCase of recentCases) {
|
||||
recentCaseLines.push(pluginData.state.cases.getSummaryText(theCase));
|
||||
}
|
||||
|
||||
let recentCaseSummary = recentCaseLines.join("\n");
|
||||
if (recentCases.length < cases.length) {
|
||||
const remaining = cases.length - recentCases.length;
|
||||
if (remaining === 1) {
|
||||
recentCaseSummary += `\n*+${remaining} case*`;
|
||||
} else {
|
||||
recentCaseSummary += `\n*+${remaining} cases*`;
|
||||
}
|
||||
}
|
||||
|
||||
pluginData.state.guildLogs.log(LogType.MEMBER_JOIN_WITH_PRIOR_RECORDS, {
|
||||
member: stripObjectToScalars(member, ["user", "roles"]),
|
||||
recentCaseSummary,
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
13
backend/src/plugins/Logs/events/LogsGuildMemberRemoveEvt.ts
Normal file
13
backend/src/plugins/Logs/events/LogsGuildMemberRemoveEvt.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { logsEvent } from "../types";
|
||||
import { stripObjectToScalars } from "src/utils";
|
||||
import { LogType } from "src/data/LogType";
|
||||
|
||||
export const LogsGuildMemberRemoveEvt = logsEvent({
|
||||
event: "guildMemberRemove",
|
||||
|
||||
async listener(meta) {
|
||||
meta.pluginData.state.guildLogs.log(LogType.MEMBER_LEAVE, {
|
||||
member: stripObjectToScalars(meta.args.member, ["user", "roles"]),
|
||||
});
|
||||
},
|
||||
});
|
23
backend/src/plugins/Logs/events/LogsRoleModifyEvts.ts
Normal file
23
backend/src/plugins/Logs/events/LogsRoleModifyEvts.ts
Normal file
|
@ -0,0 +1,23 @@
|
|||
import { logsEvent } from "../types";
|
||||
import { stripObjectToScalars } from "src/utils";
|
||||
import { LogType } from "src/data/LogType";
|
||||
|
||||
export const LogsRoleCreateEvt = logsEvent({
|
||||
event: "guildRoleCreate",
|
||||
|
||||
async listener(meta) {
|
||||
meta.pluginData.state.guildLogs.log(LogType.ROLE_CREATE, {
|
||||
role: stripObjectToScalars(meta.args.role),
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
export const LogsRoleDeleteEvt = logsEvent({
|
||||
event: "guildRoleDelete",
|
||||
|
||||
async listener(meta) {
|
||||
meta.pluginData.state.guildLogs.log(LogType.ROLE_DELETE, {
|
||||
role: stripObjectToScalars(meta.args.role),
|
||||
});
|
||||
},
|
||||
});
|
129
backend/src/plugins/Logs/events/LogsUserUpdateEvts.ts
Normal file
129
backend/src/plugins/Logs/events/LogsUserUpdateEvts.ts
Normal file
|
@ -0,0 +1,129 @@
|
|||
import { logsEvent } from "../types";
|
||||
import { stripObjectToScalars, findRelevantAuditLogEntry, UnknownUser } from "src/utils";
|
||||
import { Constants as ErisConstants } from "eris";
|
||||
import { LogType } from "src/data/LogType";
|
||||
import isEqual from "lodash.isequal";
|
||||
import diff from "lodash.difference";
|
||||
|
||||
export const LogsGuildMemberUpdateEvt = logsEvent({
|
||||
event: "guildMemberUpdate",
|
||||
|
||||
async listener(meta) {
|
||||
const pluginData = meta.pluginData;
|
||||
const oldMember = meta.args.oldMember;
|
||||
const member = meta.args.member;
|
||||
|
||||
if (!oldMember) return;
|
||||
|
||||
const logMember = stripObjectToScalars(member, ["user", "roles"]);
|
||||
|
||||
if (member.nick !== oldMember.nick) {
|
||||
pluginData.state.guildLogs.log(LogType.MEMBER_NICK_CHANGE, {
|
||||
member: logMember,
|
||||
oldNick: oldMember.nick != null ? oldMember.nick : "<none>",
|
||||
newNick: member.nick != null ? member.nick : "<none>",
|
||||
});
|
||||
}
|
||||
|
||||
if (!isEqual(oldMember.roles, member.roles)) {
|
||||
const addedRoles = diff(member.roles, oldMember.roles);
|
||||
const removedRoles = diff(oldMember.roles, member.roles);
|
||||
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) {
|
||||
const relevantAuditLogEntry = await findRelevantAuditLogEntry(
|
||||
pluginData.guild,
|
||||
ErisConstants.AuditLogActions.MEMBER_ROLE_UPDATE,
|
||||
member.id,
|
||||
);
|
||||
const mod = relevantAuditLogEntry ? relevantAuditLogEntry.user : new UnknownUser();
|
||||
|
||||
if (addedRoles.length && removedRoles.length) {
|
||||
// Roles added *and* removed
|
||||
pluginData.state.guildLogs.log(
|
||||
LogType.MEMBER_ROLE_CHANGES,
|
||||
{
|
||||
member: logMember,
|
||||
addedRoles: addedRoles
|
||||
.map(roleId => pluginData.guild.roles.get(roleId) || { id: roleId, name: `Unknown (${roleId})` })
|
||||
.map(r => r.name)
|
||||
.join(", "),
|
||||
removedRoles: removedRoles
|
||||
.map(roleId => pluginData.guild.roles.get(roleId) || { id: roleId, name: `Unknown (${roleId})` })
|
||||
.map(r => r.name)
|
||||
.join(", "),
|
||||
mod: stripObjectToScalars(mod),
|
||||
},
|
||||
member.id,
|
||||
);
|
||||
} else if (addedRoles.length) {
|
||||
// Roles added
|
||||
pluginData.state.guildLogs.log(
|
||||
LogType.MEMBER_ROLE_ADD,
|
||||
{
|
||||
member: logMember,
|
||||
roles: addedRoles
|
||||
.map(roleId => pluginData.guild.roles.get(roleId) || { id: roleId, name: `Unknown (${roleId})` })
|
||||
.map(r => r.name)
|
||||
.join(", "),
|
||||
mod: stripObjectToScalars(mod),
|
||||
},
|
||||
member.id,
|
||||
);
|
||||
} else if (removedRoles.length && !addedRoles.length) {
|
||||
// Roles removed
|
||||
pluginData.state.guildLogs.log(
|
||||
LogType.MEMBER_ROLE_REMOVE,
|
||||
{
|
||||
member: logMember,
|
||||
roles: removedRoles
|
||||
.map(roleId => pluginData.guild.roles.get(roleId) || { id: roleId, name: `Unknown (${roleId})` })
|
||||
.map(r => r.name)
|
||||
.join(", "),
|
||||
mod: stripObjectToScalars(mod),
|
||||
},
|
||||
member.id,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const LogsUserUpdateEvt = logsEvent({
|
||||
event: "userUpdate",
|
||||
allowSelf: true,
|
||||
|
||||
async listener(meta) {
|
||||
const pluginData = meta.pluginData;
|
||||
const oldUser = meta.args.oldUser;
|
||||
const user = meta.args.user;
|
||||
|
||||
if (!oldUser) return;
|
||||
|
||||
if (!pluginData.guild.members.has(user.id)) return;
|
||||
|
||||
if (user.username !== oldUser.username || user.discriminator !== oldUser.discriminator) {
|
||||
pluginData.state.guildLogs.log(LogType.MEMBER_USERNAME_CHANGE, {
|
||||
user: stripObjectToScalars(user),
|
||||
oldName: `${oldUser.username}#${oldUser.discriminator}`,
|
||||
newName: `${user.username}#${user.discriminator}`,
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
37
backend/src/plugins/Logs/events/LogsVoiceChannelEvts.ts
Normal file
37
backend/src/plugins/Logs/events/LogsVoiceChannelEvts.ts
Normal file
|
@ -0,0 +1,37 @@
|
|||
import { logsEvent } from "../types";
|
||||
import { stripObjectToScalars } from "src/utils";
|
||||
import { LogType } from "src/data/LogType";
|
||||
|
||||
export const LogsVoiceJoinEvt = logsEvent({
|
||||
event: "voiceChannelJoin",
|
||||
|
||||
async listener(meta) {
|
||||
meta.pluginData.state.guildLogs.log(LogType.VOICE_CHANNEL_JOIN, {
|
||||
member: stripObjectToScalars(meta.args.member, ["user", "roles"]),
|
||||
channel: stripObjectToScalars(meta.args.newChannel),
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
export const LogsVoiceLeaveEvt = logsEvent({
|
||||
event: "voiceChannelLeave",
|
||||
|
||||
async listener(meta) {
|
||||
meta.pluginData.state.guildLogs.log(LogType.VOICE_CHANNEL_LEAVE, {
|
||||
member: stripObjectToScalars(meta.args.member, ["user", "roles"]),
|
||||
channel: stripObjectToScalars(meta.args.oldChannel),
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
export const LogsVoiceSwitchEvt = logsEvent({
|
||||
event: "voiceChannelSwitch",
|
||||
|
||||
async listener(meta) {
|
||||
meta.pluginData.state.guildLogs.log(LogType.VOICE_CHANNEL_MOVE, {
|
||||
member: stripObjectToScalars(meta.args.member, ["user", "roles"]),
|
||||
oldChannel: stripObjectToScalars(meta.args.oldChannel),
|
||||
newChannel: stripObjectToScalars(meta.args.newChannel),
|
||||
});
|
||||
},
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue