Add safety net for attempts to create a duplicate case for a single kick audit log entry

This commit is contained in:
Dragory 2019-04-14 17:05:07 +03:00
parent dd7ae1d4b8
commit c34532e348
2 changed files with 27 additions and 8 deletions

View file

@ -77,6 +77,16 @@ export class GuildCases extends BaseRepository {
});
}
async findByAuditLogId(auditLogId: string): Promise<Case> {
return this.cases.findOne({
relations: this.getRelations(),
where: {
guild_id: this.guildId,
audit_log_id: auditLogId,
},
});
}
async getByUserId(userId: string): Promise<Case[]> {
return this.cases.find({
relations: this.getRelations(),

View file

@ -267,14 +267,23 @@ export class ModActionsPlugin extends ZeppelinPlugin<IModActionsPluginConfig> {
);
if (kickAuditLogEntry) {
this.actions.fire("createCase", {
userId: member.id,
modId: kickAuditLogEntry.user.id,
type: CaseTypes.Kick,
auditLogId: kickAuditLogEntry.id,
reason: kickAuditLogEntry.reason,
automatic: true,
});
const existingCaseForThisEntry = await this.cases.findByAuditLogId(kickAuditLogEntry.id);
if (existingCaseForThisEntry) {
logger.warn(
`Tried to create duplicate case for audit log entry ${kickAuditLogEntry.id}, existing case id ${
existingCaseForThisEntry.id
}`,
);
} else {
this.actions.fire("createCase", {
userId: member.id,
modId: kickAuditLogEntry.user.id,
type: CaseTypes.Kick,
auditLogId: kickAuditLogEntry.id,
reason: kickAuditLogEntry.reason,
automatic: true,
});
}
this.serverLogs.log(LogType.MEMBER_KICK, {
user: stripObjectToScalars(member.user),