diff --git a/src/data/DefaultLogMessages.json b/src/data/DefaultLogMessages.json index 27deb809..9f558a1b 100644 --- a/src/data/DefaultLogMessages.json +++ b/src/data/DefaultLogMessages.json @@ -12,8 +12,9 @@ "MEMBER_SOFTBAN": "🔨 **{member.user.username}#{member.user.discriminator}** (`{member.id}`) was softbanned by {mod.username}#{mod.discriminator}", "MEMBER_JOIN": "📥 **{member.user.username}#{member.user.discriminator}** (`{member.id}`, <@!{member.id}>) joined{new} (created {account_age} ago)", "MEMBER_LEAVE": "📤 **{member.user.username}#{member.user.discriminator}** (`{member.id}`) left the server", - "MEMBER_ROLE_ADD": "🔑 **{member.user.username}#{member.user.discriminator}** (`{member.id}`): role **{role.name}** added by {mod.username}#{mod.discriminator}", - "MEMBER_ROLE_REMOVE": "🔑 **{member.user.username}#{member.user.discriminator}** (`{member.id}`): role **{role.name}** removed by {mod.username}#{mod.discriminator}", + "MEMBER_ROLE_ADD": "🔑 **{member.user.username}#{member.user.discriminator}** (`{member.id}`): role(s) **{roles}** added by {mod.username}#{mod.discriminator}", + "MEMBER_ROLE_REMOVE": "🔑 **{member.user.username}#{member.user.discriminator}** (`{member.id}`): role(s) **{roles}** removed by {mod.username}#{mod.discriminator}", + "MEMBER_ROLE_CHANGES": "🔑 **{member.user.username}#{member.user.discriminator}** (`{member.id}`): roles changed: added **{addedRoles}**, removed **{removedRoles}** by {mod.username}#{mod.discriminator}", "MEMBER_NICK_CHANGE": "✏ **{member.user.username}#{member.user.discriminator}** (`{member.id}`): nickname changed from **{oldNick}** to **{newNick}**", "MEMBER_USERNAME_CHANGE": "✏ **{member.user.username}#{member.user.discriminator}** (`{member.id}`): username changed from **{oldName}** to **{newName}**", "MEMBER_RESTORE": "💿 **{member.user.username}#{member.user.discriminator}** (`{member.id}`) was restored", diff --git a/src/data/LogType.ts b/src/data/LogType.ts index 2eab7346..a4e3b8db 100644 --- a/src/data/LogType.ts +++ b/src/data/LogType.ts @@ -46,4 +46,6 @@ export enum LogType { MEMBER_JOIN_WITH_PRIOR_RECORDS, OTHER_SPAM_DETECTED, + + MEMBER_ROLE_CHANGES, } diff --git a/src/plugins/Logs.ts b/src/plugins/Logs.ts index 4a78e3f6..cd88b26f 100644 --- a/src/plugins/Logs.ts +++ b/src/plugins/Logs.ts @@ -253,22 +253,48 @@ export class LogsPlugin extends Plugin { ); const mod = relevantAuditLogEntry ? relevantAuditLogEntry.user : unknownUser; - if (addedRoles.length) { + if (addedRoles.length && removedRoles.length) { + // Roles added *and* removed this.guildLogs.log( - LogType.MEMBER_ROLE_ADD, + LogType.MEMBER_ROLE_CHANGES, { member, - role: this.guild.roles.get(addedRoles[0]), + addedRoles: addedRoles + .map(roleId => this.guild.roles.get(roleId)) + .map(r => r.name) + .join(", "), + removedRoles: removedRoles + .map(roleId => this.guild.roles.get(roleId)) + .map(r => r.name) + .join(", "), mod: stripObjectToScalars(mod), }, member.id, ); - } else if (removedRoles.length) { + } else if (addedRoles.length) { + // Roles added + this.guildLogs.log( + LogType.MEMBER_ROLE_ADD, + { + member, + roles: addedRoles + .map(roleId => this.guild.roles.get(roleId)) + .map(r => r.name) + .join(", "), + mod: stripObjectToScalars(mod), + }, + member.id, + ); + } else if (removedRoles.length && !addedRoles.length) { + // Roles removed this.guildLogs.log( LogType.MEMBER_ROLE_REMOVE, { member, - role: this.guild.roles.get(removedRoles[0]), + roles: removedRoles + .map(roleId => this.guild.roles.get(roleId)) + .map(r => r.name) + .join(", "), mod: stripObjectToScalars(mod), }, member.id,