diff --git a/README.md b/README.md index e564c40d..ebdc6219 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,24 @@ # Overview -PaperTrail is a free and open source, self-hostable and privacy friendly Discord bot designed to deliver structured, reliable logging across all major audit and runtime events. It hooks into Discord's audit logs to cover for most of the audit log events and for events not covered by Audit Logs, it supplements them with real-time listeners to bridge gaps in native coverage (e.g. voice state, boosts, message edits and deletions, custom triggers). +PaperTrail is a free and open source, self-hostable and privacy-friendly Discord bot designed to deliver structured, reliable logging across all major audit and runtime events. It hooks into Discord's audit logs to cover for most of the audit log events and for events not covered by Audit Logs, it supplements them with real-time listeners to bridge gaps in native coverage (e.g. voice state, boosts, message edits and deletions, custom triggers). Key Features: -- ๐Ÿ” Full audit log integration (supports over 50+ event types) and generic support for unknown types -- ๐Ÿ’ฌ Encrypted Message logging (edit, delete) -- ๐Ÿ‘ค Member activity tracking (joins, leaves, kicks, bans, updates) -- ๐Ÿ”Š Voice activity logging (join/leave, move) -- ๐Ÿš€ Server boost tracking -- ๐Ÿงฑ Auto-deletion of logged messages after 30 days +- Full audit log integration (supports over 50+ event types) and generic support for unknown types +- Encrypted Message logging (edit, delete) +- Member activity tracking (joins, leaves, kicks, bans, updates) +- Voice activity logging (join/leave, move) +- Auto-deletion of logged messages after 30 days > ๐Ÿ“Ž Get it from here: https://discord.com/discovery/applications/1381658412550590475 + +> [!IMPORTANT] +> PaperTrail is currently in maintenance mode. Existing bugs will be fixed, dependency updates will be provided +> but large new features will likely not be added. + # Self-Hosting Guide > [!IMPORTANT] -> Please note that this is only for advanced users who want to self host this bot +> Please note that this is only for advanced users who want to self-host this bot > > A pre-hosted instance is already available: https://discord.com/discovery/applications/1381658412550590475 > @@ -22,6 +26,7 @@ Key Features: ## v1.2.2 Legacy Checkout the guide for hosting the legacy version [here](https://github.com/Egg-03/PaperTrailBot/blob/legacy-v1.2.2/README.md). +v1.2.2 has unresolved bugs and runs on JDA 5. It is recommended to not use that version anymore. ## V2 and above Since v2, the project has been split into two services: diff --git a/pom.xml b/pom.xml index bc16fd13..4197b3f3 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 org.egg.papertrail paper-trail-bot - 2.0.3 + 2.1.0 PaperTrail A simple bot for logging all user actions @@ -10,6 +10,7 @@ UTF-8 21 21 + 1.18.42 @@ -41,7 +42,7 @@ org.apache.commons commons-lang3 - 3.18.0 + 3.19.0 org.jasypt @@ -75,19 +76,38 @@ gson 2.13.1 + + org.projectlombok + lombok + ${lombok.version} + - + ${project.artifactId} - + org.springframework.boot spring-boot-maven-plugin - 3.5.4 + 3.5.7 org.papertrail.main.FireRun + + org.apache.maven.plugins + maven-compiler-plugin + 3.14.1 + + + + org.projectlombok + lombok + ${lombok.version} + + + + diff --git a/src/main/java/org/papertrail/cleanup/package-info.java b/src/main/java/org/papertrail/cleanup/package-info.java deleted file mode 100644 index 1d0a2b39..00000000 --- a/src/main/java/org/papertrail/cleanup/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * This package contains Classes and Methods that perform auto-cleanup when the bot is kicked from a server - */ -package org.papertrail.cleanup; \ No newline at end of file diff --git a/src/main/java/org/papertrail/sdk/client/AuditLogClient.java b/src/main/java/org/papertrail/commons/sdk/client/AuditLogClient.java similarity index 88% rename from src/main/java/org/papertrail/sdk/client/AuditLogClient.java rename to src/main/java/org/papertrail/commons/sdk/client/AuditLogClient.java index 1b168ce1..1b30ad63 100644 --- a/src/main/java/org/papertrail/sdk/client/AuditLogClient.java +++ b/src/main/java/org/papertrail/commons/sdk/client/AuditLogClient.java @@ -1,11 +1,11 @@ -package org.papertrail.sdk.client; +package org.papertrail.commons.sdk.client; import io.vavr.control.Either; import org.jetbrains.annotations.NotNull; -import org.papertrail.sdk.http.HttpServiceEngine; -import org.papertrail.sdk.model.AuditLogObject; -import org.papertrail.sdk.model.ErrorObject; -import org.papertrail.utilities.EnvConfig; +import org.papertrail.commons.sdk.http.HttpServiceEngine; +import org.papertrail.commons.sdk.model.AuditLogObject; +import org.papertrail.commons.sdk.model.ErrorObject; +import org.papertrail.commons.utilities.EnvConfig; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; diff --git a/src/main/java/org/papertrail/sdk/client/MessageContentLogClient.java b/src/main/java/org/papertrail/commons/sdk/client/MessageContentLogClient.java similarity index 88% rename from src/main/java/org/papertrail/sdk/client/MessageContentLogClient.java rename to src/main/java/org/papertrail/commons/sdk/client/MessageContentLogClient.java index 4f609f15..201d66af 100644 --- a/src/main/java/org/papertrail/sdk/client/MessageContentLogClient.java +++ b/src/main/java/org/papertrail/commons/sdk/client/MessageContentLogClient.java @@ -1,11 +1,11 @@ -package org.papertrail.sdk.client; +package org.papertrail.commons.sdk.client; import io.vavr.control.Either; import org.jetbrains.annotations.NotNull; -import org.papertrail.sdk.http.HttpServiceEngine; -import org.papertrail.sdk.model.ErrorObject; -import org.papertrail.sdk.model.MessageContentObject; -import org.papertrail.utilities.EnvConfig; +import org.papertrail.commons.sdk.http.HttpServiceEngine; +import org.papertrail.commons.sdk.model.ErrorObject; +import org.papertrail.commons.sdk.model.MessageContentObject; +import org.papertrail.commons.utilities.EnvConfig; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; diff --git a/src/main/java/org/papertrail/sdk/client/MessageLogClient.java b/src/main/java/org/papertrail/commons/sdk/client/MessageLogClient.java similarity index 88% rename from src/main/java/org/papertrail/sdk/client/MessageLogClient.java rename to src/main/java/org/papertrail/commons/sdk/client/MessageLogClient.java index 0e95224b..733e9d6a 100644 --- a/src/main/java/org/papertrail/sdk/client/MessageLogClient.java +++ b/src/main/java/org/papertrail/commons/sdk/client/MessageLogClient.java @@ -1,11 +1,11 @@ -package org.papertrail.sdk.client; +package org.papertrail.commons.sdk.client; import io.vavr.control.Either; import org.jetbrains.annotations.NotNull; -import org.papertrail.sdk.http.HttpServiceEngine; -import org.papertrail.sdk.model.ErrorObject; -import org.papertrail.sdk.model.MessageLogObject; -import org.papertrail.utilities.EnvConfig; +import org.papertrail.commons.sdk.http.HttpServiceEngine; +import org.papertrail.commons.sdk.model.ErrorObject; +import org.papertrail.commons.sdk.model.MessageLogObject; +import org.papertrail.commons.utilities.EnvConfig; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; diff --git a/src/main/java/org/papertrail/sdk/http/HttpServiceEngine.java b/src/main/java/org/papertrail/commons/sdk/http/HttpServiceEngine.java similarity index 80% rename from src/main/java/org/papertrail/sdk/http/HttpServiceEngine.java rename to src/main/java/org/papertrail/commons/sdk/http/HttpServiceEngine.java index 69dcdfb8..c7c00469 100644 --- a/src/main/java/org/papertrail/sdk/http/HttpServiceEngine.java +++ b/src/main/java/org/papertrail/commons/sdk/http/HttpServiceEngine.java @@ -1,19 +1,20 @@ -package org.papertrail.sdk.http; +package org.papertrail.commons.sdk.http; import io.vavr.control.Either; +import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; -import org.papertrail.sdk.model.ErrorObject; +import org.papertrail.commons.sdk.model.ErrorObject; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.HttpServerErrorException; import org.springframework.web.client.ResourceAccessException; import org.springframework.web.client.RestClient; -import org.tinylog.Logger; import java.net.URI; import java.time.Instant; +@Slf4j public class HttpServiceEngine { private final RestClient client; @@ -43,15 +44,15 @@ public Either makeRequest ( return Either.right(body); } catch (HttpClientErrorException e) { - Logger.trace("Client error when calling {} {}: {}", httpMethod, url, e.getMessage(), e); + log.trace("Client error when calling {} {}: {}", httpMethod, url, e.getMessage(), e); ErrorObject error = e.getResponseBodyAs(ErrorObject.class); return Either.left(error); } catch (HttpServerErrorException e) { - Logger.error("Server error when calling {} {}: {}", httpMethod, url, e.getMessage(), e); + log.error("Server error when calling {} {}: {}", httpMethod, url, e.getMessage(), e); ErrorObject error = e.getResponseBodyAs(ErrorObject.class); return Either.left(error); } catch (ResourceAccessException e) { - Logger.error("Resource access error when calling {} {}: {}", httpMethod, url, e.getMessage(), e); + log.error("Resource access error when calling {} {}: {}", httpMethod, url, e.getMessage(), e); ErrorObject error = new ErrorObject(503, "API Unreachable", e.getMessage(), Instant.now().toString(), url); return Either.left(error); } @@ -76,15 +77,15 @@ public Either makeRequestWithBody ( return Either.right(body); } catch (HttpClientErrorException e) { - Logger.trace("Client error when calling {} {}: {}", httpMethod, url, e.getMessage(), e); + log.trace("Client error when calling {} {}: {}", httpMethod, url, e.getMessage(), e); ErrorObject error = e.getResponseBodyAs(ErrorObject.class); return Either.left(error); } catch (HttpServerErrorException e) { - Logger.error("Server error when calling {} {}: {}", httpMethod, url, e.getMessage(), e); + log.error("Server error when calling {} {}: {}", httpMethod, url, e.getMessage(), e); ErrorObject error = e.getResponseBodyAs(ErrorObject.class); return Either.left(error); } catch (ResourceAccessException e) { - Logger.error("Resource access error when calling {} {}: {}", httpMethod, url, e.getMessage(), e); + log.error("Resource access error when calling {} {}: {}", httpMethod, url, e.getMessage(), e); ErrorObject error = new ErrorObject(503, "API Unreachable", e.getMessage(), Instant.now().toString(), url); return Either.left(error); } diff --git a/src/main/java/org/papertrail/sdk/model/AuditLogObject.java b/src/main/java/org/papertrail/commons/sdk/model/AuditLogObject.java similarity index 62% rename from src/main/java/org/papertrail/sdk/model/AuditLogObject.java rename to src/main/java/org/papertrail/commons/sdk/model/AuditLogObject.java index 8c4df960..2d8c8243 100644 --- a/src/main/java/org/papertrail/sdk/model/AuditLogObject.java +++ b/src/main/java/org/papertrail/commons/sdk/model/AuditLogObject.java @@ -1,4 +1,4 @@ -package org.papertrail.sdk.model; +package org.papertrail.commons.sdk.model; public record AuditLogObject(String guildId, String channelId) { diff --git a/src/main/java/org/papertrail/sdk/model/ErrorObject.java b/src/main/java/org/papertrail/commons/sdk/model/ErrorObject.java similarity index 77% rename from src/main/java/org/papertrail/sdk/model/ErrorObject.java rename to src/main/java/org/papertrail/commons/sdk/model/ErrorObject.java index a0ca5257..d5b11b73 100644 --- a/src/main/java/org/papertrail/sdk/model/ErrorObject.java +++ b/src/main/java/org/papertrail/commons/sdk/model/ErrorObject.java @@ -1,4 +1,4 @@ -package org.papertrail.sdk.model; +package org.papertrail.commons.sdk.model; public record ErrorObject( int status, diff --git a/src/main/java/org/papertrail/sdk/model/MessageContentObject.java b/src/main/java/org/papertrail/commons/sdk/model/MessageContentObject.java similarity index 70% rename from src/main/java/org/papertrail/sdk/model/MessageContentObject.java rename to src/main/java/org/papertrail/commons/sdk/model/MessageContentObject.java index 2d1cc70b..a6329ff3 100644 --- a/src/main/java/org/papertrail/sdk/model/MessageContentObject.java +++ b/src/main/java/org/papertrail/commons/sdk/model/MessageContentObject.java @@ -1,4 +1,4 @@ -package org.papertrail.sdk.model; +package org.papertrail.commons.sdk.model; public record MessageContentObject(String messageId, String messageContent, String authorId) { } diff --git a/src/main/java/org/papertrail/sdk/model/MessageLogObject.java b/src/main/java/org/papertrail/commons/sdk/model/MessageLogObject.java similarity index 62% rename from src/main/java/org/papertrail/sdk/model/MessageLogObject.java rename to src/main/java/org/papertrail/commons/sdk/model/MessageLogObject.java index f07c8a11..d4f41e40 100644 --- a/src/main/java/org/papertrail/sdk/model/MessageLogObject.java +++ b/src/main/java/org/papertrail/commons/sdk/model/MessageLogObject.java @@ -1,4 +1,4 @@ -package org.papertrail.sdk.model; +package org.papertrail.commons.sdk.model; public record MessageLogObject(String guildId, String channelId) { diff --git a/src/main/java/org/papertrail/sdk/package-info.java b/src/main/java/org/papertrail/commons/sdk/package-info.java similarity index 68% rename from src/main/java/org/papertrail/sdk/package-info.java rename to src/main/java/org/papertrail/commons/sdk/package-info.java index 62ae26be..7cbd8608 100644 --- a/src/main/java/org/papertrail/sdk/package-info.java +++ b/src/main/java/org/papertrail/commons/sdk/package-info.java @@ -1,4 +1,4 @@ /** * Embedded SDK for resolving calls to the PaperTrail PersistenceAPI */ -package org.papertrail.sdk; +package org.papertrail.commons.sdk; diff --git a/src/main/java/org/papertrail/commons/utilities/ColorFormatter.java b/src/main/java/org/papertrail/commons/utilities/ColorFormatter.java new file mode 100644 index 00000000..31c9b16b --- /dev/null +++ b/src/main/java/org/papertrail/commons/utilities/ColorFormatter.java @@ -0,0 +1,43 @@ +package org.papertrail.commons.utilities; + +import lombok.experimental.UtilityClass; + +import java.util.IllegalFormatException; +import java.util.Map; + +@UtilityClass +public class ColorFormatter { + + public static String formatToHex(Object colorValue) { + + if(String.valueOf(colorValue).equals("null")) { + return "N/A"; + } + + try { + int color = Integer.parseInt(String.valueOf(colorValue)); + return String.format("#%06X", color); + } catch (NumberFormatException e ) { + return "No Parsable Color Integer Detected"; + } catch (IllegalFormatException e) { + return "Cannot parse color to hex"; + } + } + + // gradient is returned as a hash map in the following structure + // {"primary_color" = 123456789, "secondary_color" = 123456789, "tertiary_color" = 123456789} + public static String formatGradientColorSystemToHex(Object gradientValue) { + + if(gradientValue instanceof Map colorMap){ + + String primaryColor = "Primary Color: "+ formatToHex(colorMap.get("primary_color")); + String secondaryColor = "Secondary Color: "+ formatToHex(colorMap.get("secondary_color")); + String tertiaryColor = "Tertiary Color: "+ formatToHex(colorMap.get("tertiary_color")); + + return primaryColor+System.lineSeparator()+secondaryColor+System.lineSeparator()+tertiaryColor; + } + + return "N/A"; + + } +} diff --git a/src/main/java/org/papertrail/utilities/DurationFormatter.java b/src/main/java/org/papertrail/commons/utilities/DurationFormatter.java similarity index 94% rename from src/main/java/org/papertrail/utilities/DurationFormatter.java rename to src/main/java/org/papertrail/commons/utilities/DurationFormatter.java index 8538182e..93266c4d 100644 --- a/src/main/java/org/papertrail/utilities/DurationFormatter.java +++ b/src/main/java/org/papertrail/commons/utilities/DurationFormatter.java @@ -1,16 +1,15 @@ -package org.papertrail.utilities; +package org.papertrail.commons.utilities; + +import lombok.experimental.UtilityClass; import java.time.Duration; import java.time.OffsetDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; +@UtilityClass public class DurationFormatter { - - private DurationFormatter() { - throw new IllegalStateException("Utility Class"); - } - + public static String formatSeconds(Object seconds) { if (seconds == null) { return "ERROR: Value Returned Null"; diff --git a/src/main/java/org/papertrail/utilities/EnvConfig.java b/src/main/java/org/papertrail/commons/utilities/EnvConfig.java similarity index 74% rename from src/main/java/org/papertrail/utilities/EnvConfig.java rename to src/main/java/org/papertrail/commons/utilities/EnvConfig.java index 4365f13e..4a05f636 100644 --- a/src/main/java/org/papertrail/utilities/EnvConfig.java +++ b/src/main/java/org/papertrail/commons/utilities/EnvConfig.java @@ -1,14 +1,12 @@ -package org.papertrail.utilities; +package org.papertrail.commons.utilities; import io.github.cdimascio.dotenv.Dotenv; +import lombok.experimental.UtilityClass; +@UtilityClass public class EnvConfig { private static final Dotenv dotenv = Dotenv.configure().ignoreIfMalformed().ignoreIfMissing().load(); - - private EnvConfig() { - throw new IllegalStateException("Utility Class"); - } public static String get(String key) { diff --git a/src/main/java/org/papertrail/utilities/GuildSystemChannelFlagResolver.java b/src/main/java/org/papertrail/commons/utilities/GuildSystemChannelFlagResolver.java similarity index 89% rename from src/main/java/org/papertrail/utilities/GuildSystemChannelFlagResolver.java rename to src/main/java/org/papertrail/commons/utilities/GuildSystemChannelFlagResolver.java index f79862fd..8dd7cefc 100644 --- a/src/main/java/org/papertrail/utilities/GuildSystemChannelFlagResolver.java +++ b/src/main/java/org/papertrail/commons/utilities/GuildSystemChannelFlagResolver.java @@ -1,7 +1,10 @@ -package org.papertrail.utilities; +package org.papertrail.commons.utilities; + +import lombok.experimental.UtilityClass; import java.util.Map; +@UtilityClass public class GuildSystemChannelFlagResolver { private static final Map SYSTEM_CHANNEL_FLAG_MAP = Map.ofEntries( @@ -12,11 +15,7 @@ public class GuildSystemChannelFlagResolver { Map.entry(1L << 4, "Suppress role subscription purchase and renewal notifications"), Map.entry(1L << 5, "Hide role subscription sticker reply buttons") ); - - private GuildSystemChannelFlagResolver() { - throw new IllegalStateException("Utility Class"); - } - + private static String parseFlags(long bitfield){ StringBuilder flags = new StringBuilder(); for(Map.Entry entry: SYSTEM_CHANNEL_FLAG_MAP.entrySet()) { diff --git a/src/main/java/org/papertrail/utilities/MessageEncryption.java b/src/main/java/org/papertrail/commons/utilities/MessageEncryption.java similarity index 91% rename from src/main/java/org/papertrail/utilities/MessageEncryption.java rename to src/main/java/org/papertrail/commons/utilities/MessageEncryption.java index 986db862..8252d7a4 100644 --- a/src/main/java/org/papertrail/utilities/MessageEncryption.java +++ b/src/main/java/org/papertrail/commons/utilities/MessageEncryption.java @@ -1,17 +1,15 @@ -package org.papertrail.utilities; +package org.papertrail.commons.utilities; +import lombok.experimental.UtilityClass; import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; import org.tinylog.Logger; +@UtilityClass public class MessageEncryption { private static final String SECRET = EnvConfig.get("MESSAGE_SECRET"); private static final String ALGORITHM = "PBEWITHSHA256AND256BITAES-CBC-BC"; - - private MessageEncryption() { - throw new IllegalStateException("UtilityClass"); - } - + private static StandardPBEStringEncryptor getEncryptor() { StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); encryptor.setPassword(SECRET); diff --git a/src/main/java/org/papertrail/utilities/PermissionResolver.java b/src/main/java/org/papertrail/commons/utilities/PermissionResolver.java similarity index 96% rename from src/main/java/org/papertrail/utilities/PermissionResolver.java rename to src/main/java/org/papertrail/commons/utilities/PermissionResolver.java index c198ccf3..4c25edbb 100644 --- a/src/main/java/org/papertrail/utilities/PermissionResolver.java +++ b/src/main/java/org/papertrail/commons/utilities/PermissionResolver.java @@ -1,10 +1,13 @@ -package org.papertrail.utilities; +package org.papertrail.commons.utilities; + +import lombok.experimental.UtilityClass; import java.util.Map; /** @see Discord Permissions */ +@UtilityClass public class PermissionResolver { private static final Map PERMISSION_MAP = Map.ofEntries( @@ -60,11 +63,7 @@ public class PermissionResolver { Map.entry(1L << 50, "USE_EXTERNAL_APPS"), Map.entry(1L << 51, "PIN_MESSAGES") ); - - private PermissionResolver() { - throw new IllegalStateException("Utility Class"); - } - + private static String parsePermissions(long bitfield, String emoji){ StringBuilder permissions = new StringBuilder(); for(Map.Entry entry: PERMISSION_MAP.entrySet()) { diff --git a/src/main/java/org/papertrail/commons/utilities/RoleObjectParser.java b/src/main/java/org/papertrail/commons/utilities/RoleObjectParser.java new file mode 100644 index 00000000..de82ddf4 --- /dev/null +++ b/src/main/java/org/papertrail/commons/utilities/RoleObjectParser.java @@ -0,0 +1,31 @@ +package org.papertrail.commons.utilities; + +import lombok.experimental.UtilityClass; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; +import java.util.Map; + +@UtilityClass +@Slf4j +public class RoleObjectParser { + + // Parses an array list of map of role objects supplied by JDA + // roles are exposed as arraylists of maps [{name=role, id=1}, {name=role2, id=2}] + public static String parseRole(Object roleObject) { + + if (roleObject instanceof List roleList) { + StringBuilder roles = new StringBuilder(); + for (Object o : roleList) { + if (o instanceof Map roleMap) { + roles.append("Name: ").append(roleMap.get("name")) + .append(" ID: ").append(roleMap.get("id")) + .append(System.lineSeparator()); + } + } + return roles.toString(); + } + + return "N/A"; + } +} diff --git a/src/main/java/org/papertrail/utilities/TypeResolver.java b/src/main/java/org/papertrail/commons/utilities/TypeResolver.java similarity index 97% rename from src/main/java/org/papertrail/utilities/TypeResolver.java rename to src/main/java/org/papertrail/commons/utilities/TypeResolver.java index 5a086e02..0c371a1f 100644 --- a/src/main/java/org/papertrail/utilities/TypeResolver.java +++ b/src/main/java/org/papertrail/commons/utilities/TypeResolver.java @@ -1,15 +1,14 @@ -package org.papertrail.utilities; +package org.papertrail.commons.utilities; + +import lombok.experimental.UtilityClass; /* - * Resolves Object sub-types from their given IDs + * Resolves Object subtypes from their given IDs * @see Discord Channel Types */ +@UtilityClass public class TypeResolver { - private TypeResolver() { - throw new IllegalStateException("Utility Class"); - } - public static String channelTypeResolver(Object channelTypeId) { if (channelTypeId == null) { return "ERROR: Value Returned Null"; diff --git a/src/main/java/org/papertrail/commons/version/ProjectInfo.java b/src/main/java/org/papertrail/commons/version/ProjectInfo.java new file mode 100644 index 00000000..4f84057a --- /dev/null +++ b/src/main/java/org/papertrail/commons/version/ProjectInfo.java @@ -0,0 +1,12 @@ +package org.papertrail.commons.version; + +public class ProjectInfo { + + private ProjectInfo() { + throw new IllegalStateException("Utility Class"); + } + + public static final String APPNAME = "PaperTrail"; + public static final String VERSION = "v2.1.0"; + public static final String PROJECT_ISSUE_LINK="https://github.com/eggy03/PaperTrailBot/issues"; +} diff --git a/src/main/java/org/papertrail/listeners/audit/event/AuditLogListener.java b/src/main/java/org/papertrail/listeners/audit/event/AuditLogListener.java new file mode 100644 index 00000000..0e275d0e --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/event/AuditLogListener.java @@ -0,0 +1,189 @@ +package org.papertrail.listeners.audit.event; + +import io.vavr.control.Either; +import lombok.extern.slf4j.Slf4j; +import net.dv8tion.jda.api.audit.ActionType; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import net.dv8tion.jda.api.hooks.ListenerAdapter; +import org.jetbrains.annotations.NotNull; +import org.papertrail.commons.sdk.client.AuditLogClient; +import org.papertrail.commons.sdk.model.AuditLogObject; +import org.papertrail.commons.sdk.model.ErrorObject; +import org.papertrail.listeners.audit.helper.AutoModerationFlagToChannelEventHelper; +import org.papertrail.listeners.audit.helper.AutoModerationMemberTimeoutEventHelper; +import org.papertrail.listeners.audit.helper.AutoModerationRuleBlockMessageEventHelper; +import org.papertrail.listeners.audit.helper.AutoModerationRuleCreateEventHelper; +import org.papertrail.listeners.audit.helper.AutoModerationRuleDeleteEventHelper; +import org.papertrail.listeners.audit.helper.AutoModerationRuleUpdateEventHelper; +import org.papertrail.listeners.audit.helper.BanEventHelper; +import org.papertrail.listeners.audit.helper.BotAddEventHelper; +import org.papertrail.listeners.audit.helper.ChannelCreateEventHelper; +import org.papertrail.listeners.audit.helper.ChannelDeleteEventHelper; +import org.papertrail.listeners.audit.helper.ChannelOverrideCreateEventHelper; +import org.papertrail.listeners.audit.helper.ChannelOverrideDeleteEventHelper; +import org.papertrail.listeners.audit.helper.ChannelOverrideUpdateEventHelper; +import org.papertrail.listeners.audit.helper.ChannelUpdateEventHelper; +import org.papertrail.listeners.audit.helper.EmojiCreateEventHelper; +import org.papertrail.listeners.audit.helper.EmojiDeleteEventHelper; +import org.papertrail.listeners.audit.helper.EmojiUpdateEventHelper; +import org.papertrail.listeners.audit.helper.GenericAuditLogEventHelper; +import org.papertrail.listeners.audit.helper.GuildUpdateEventHelper; +import org.papertrail.listeners.audit.helper.IntegrationCreateEventHelper; +import org.papertrail.listeners.audit.helper.IntegrationDeleteEventHelper; +import org.papertrail.listeners.audit.helper.InviteCreateEventHelper; +import org.papertrail.listeners.audit.helper.InviteDeleteEventHelper; +import org.papertrail.listeners.audit.helper.KickEventHelper; +import org.papertrail.listeners.audit.helper.MemberRoleUpdateEventHelper; +import org.papertrail.listeners.audit.helper.MemberUpdateEventHelper; +import org.papertrail.listeners.audit.helper.MemberVoiceKickEventHelper; +import org.papertrail.listeners.audit.helper.MemberVoiceMoveEventHelper; +import org.papertrail.listeners.audit.helper.MessagePinEventHelper; +import org.papertrail.listeners.audit.helper.MessageUnpinEventHelper; +import org.papertrail.listeners.audit.helper.RoleCreateEventHelper; +import org.papertrail.listeners.audit.helper.RoleDeleteEventHelper; +import org.papertrail.listeners.audit.helper.RoleUpdateEventHelper; +import org.papertrail.listeners.audit.helper.ScheduledEventCreateEventHelper; +import org.papertrail.listeners.audit.helper.ScheduledEventDeleteEventHelper; +import org.papertrail.listeners.audit.helper.ScheduledEventUpdateEventHelper; +import org.papertrail.listeners.audit.helper.StageInstanceCreateEventHelper; +import org.papertrail.listeners.audit.helper.StageInstanceDeleteEventHelper; +import org.papertrail.listeners.audit.helper.StageInstanceUpdateEventHelper; +import org.papertrail.listeners.audit.helper.StickerCreateEventHelper; +import org.papertrail.listeners.audit.helper.StickerDeleteEventHelper; +import org.papertrail.listeners.audit.helper.StickerUpdateEventHelper; +import org.papertrail.listeners.audit.helper.ThreadCreateEventHelper; +import org.papertrail.listeners.audit.helper.ThreadDeleteEventHelper; +import org.papertrail.listeners.audit.helper.ThreadUpdateEventHelper; +import org.papertrail.listeners.audit.helper.UnbanEventHelper; +import org.papertrail.listeners.audit.helper.VoiceChannelStatusDeleteEventHelper; +import org.papertrail.listeners.audit.helper.VoiceChannelStatusUpdateEventHelper; +import org.papertrail.listeners.audit.helper.WebhookCreateEventHelper; +import org.papertrail.listeners.audit.helper.WebhookRemoveEventHelper; +import org.papertrail.listeners.audit.helper.WebhookUpdateEventHelper; + +import java.util.Objects; +import java.util.concurrent.Executor; + +@Slf4j +public class AuditLogListener extends ListenerAdapter { + + private final Executor vThreadPool; + + public AuditLogListener(Executor vThreadPool) { + this.vThreadPool = vThreadPool; + } + + @Override + public void onGuildAuditLogEntryCreate(@NotNull GuildAuditLogEntryCreateEvent event) { + vThreadPool.execute(() -> { + // Call the API and see if the event came from a registered Guild + Either response = AuditLogClient.getRegisteredGuild(event.getGuild().getId()); + response.peek(success -> { + AuditLogEntry ale = event.getEntry(); + auditLogParser(event, ale, success.channelId()); + }); + }); + } + + private void auditLogParser(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + ActionType action = ale.getType(); + switch (action) { + + case AUTO_MODERATION_FLAG_TO_CHANNEL -> + AutoModerationFlagToChannelEventHelper.format(event, ale, channelIdToSendTo); + case AUTO_MODERATION_MEMBER_TIMEOUT -> + AutoModerationMemberTimeoutEventHelper.format(event, ale, channelIdToSendTo); + case AUTO_MODERATION_RULE_BLOCK_MESSAGE -> + AutoModerationRuleBlockMessageEventHelper.format(event, ale, channelIdToSendTo); + case AUTO_MODERATION_RULE_CREATE -> + AutoModerationRuleCreateEventHelper.format(event, ale, channelIdToSendTo); + case AUTO_MODERATION_RULE_UPDATE -> + AutoModerationRuleUpdateEventHelper.format(event, ale, channelIdToSendTo); + case AUTO_MODERATION_RULE_DELETE -> + AutoModerationRuleDeleteEventHelper.format(event, ale, channelIdToSendTo); + + case KICK -> KickEventHelper.format(event, ale, channelIdToSendTo); + case BAN -> BanEventHelper.format(event, ale, channelIdToSendTo); + case UNBAN -> UnbanEventHelper.format(event, ale, channelIdToSendTo); + case BOT_ADD -> BotAddEventHelper.format(event, ale, channelIdToSendTo); + // PRUNE has generic formatting + + case CHANNEL_CREATE -> ChannelCreateEventHelper.format(event, ale, channelIdToSendTo); + case CHANNEL_UPDATE -> ChannelUpdateEventHelper.format(event, ale, channelIdToSendTo); + case CHANNEL_DELETE -> ChannelDeleteEventHelper.format(event, ale, channelIdToSendTo); + case CHANNEL_OVERRIDE_CREATE -> ChannelOverrideCreateEventHelper.format(event, ale, channelIdToSendTo); + case CHANNEL_OVERRIDE_UPDATE -> ChannelOverrideUpdateEventHelper.format(event, ale, channelIdToSendTo); + case CHANNEL_OVERRIDE_DELETE -> ChannelOverrideDeleteEventHelper.format(event, ale, channelIdToSendTo); + + case ROLE_CREATE -> RoleCreateEventHelper.format(event, ale, channelIdToSendTo); + case ROLE_UPDATE -> RoleUpdateEventHelper.format(event, ale, channelIdToSendTo); + case ROLE_DELETE -> RoleDeleteEventHelper.format(event, ale, channelIdToSendTo); + + case EMOJI_CREATE -> EmojiCreateEventHelper.format(event, ale, channelIdToSendTo); + case EMOJI_UPDATE -> EmojiUpdateEventHelper.format(event, ale, channelIdToSendTo); + case EMOJI_DELETE -> EmojiDeleteEventHelper.format(event, ale, channelIdToSendTo); + + case STICKER_CREATE -> StickerCreateEventHelper.format(event, ale, channelIdToSendTo); + case STICKER_UPDATE -> StickerUpdateEventHelper.format(event, ale, channelIdToSendTo); + case STICKER_DELETE -> StickerDeleteEventHelper.format(event, ale, channelIdToSendTo); + + case GUILD_UPDATE -> GuildUpdateEventHelper.format(event, ale, channelIdToSendTo); + + case INTEGRATION_CREATE -> IntegrationCreateEventHelper.format(event, ale, channelIdToSendTo); + case INTEGRATION_DELETE -> IntegrationDeleteEventHelper.format(event, ale, channelIdToSendTo); + // INTEGRATION_UPDATE has generic formatting + + case INVITE_CREATE -> InviteCreateEventHelper.format(event, ale, channelIdToSendTo); + case INVITE_DELETE -> InviteDeleteEventHelper.format(event, ale, channelIdToSendTo); + // INVITE_UPDATE has generic formatting + + case MEMBER_ROLE_UPDATE -> MemberRoleUpdateEventHelper.format(event, ale, channelIdToSendTo); + case MEMBER_UPDATE -> MemberUpdateEventHelper.format(event, ale, channelIdToSendTo); + + case MEMBER_VOICE_KICK -> MemberVoiceKickEventHelper.format(event, ale, channelIdToSendTo); + case MEMBER_VOICE_MOVE -> MemberVoiceMoveEventHelper.format(event, ale, channelIdToSendTo); + + case MESSAGE_PIN -> MessagePinEventHelper.format(event, ale, channelIdToSendTo); + case MESSAGE_UNPIN -> MessageUnpinEventHelper.format(event, ale, channelIdToSendTo); + + case SCHEDULED_EVENT_CREATE -> ScheduledEventCreateEventHelper.format(event, ale, channelIdToSendTo); + case SCHEDULED_EVENT_UPDATE -> ScheduledEventUpdateEventHelper.format(event, ale, channelIdToSendTo); + case SCHEDULED_EVENT_DELETE -> ScheduledEventDeleteEventHelper.format(event, ale, channelIdToSendTo); + + case STAGE_INSTANCE_CREATE -> StageInstanceCreateEventHelper.format(event, ale, channelIdToSendTo); + case STAGE_INSTANCE_UPDATE -> StageInstanceUpdateEventHelper.format(event, ale, channelIdToSendTo); + case STAGE_INSTANCE_DELETE -> StageInstanceDeleteEventHelper.format(event, ale, channelIdToSendTo); + + case THREAD_CREATE -> ThreadCreateEventHelper.format(event, ale, channelIdToSendTo); + case THREAD_UPDATE -> ThreadUpdateEventHelper.format(event, ale, channelIdToSendTo); + case THREAD_DELETE -> ThreadDeleteEventHelper.format(event, ale, channelIdToSendTo); + + case VOICE_CHANNEL_STATUS_DELETE -> + VoiceChannelStatusDeleteEventHelper.format(event, ale, channelIdToSendTo); + case VOICE_CHANNEL_STATUS_UPDATE -> + VoiceChannelStatusUpdateEventHelper.format(event, ale, channelIdToSendTo); + + case WEBHOOK_CREATE -> WebhookCreateEventHelper.format(event, ale, channelIdToSendTo); + case WEBHOOK_UPDATE -> WebhookUpdateEventHelper.format(event, ale, channelIdToSendTo); + case WEBHOOK_REMOVE -> WebhookRemoveEventHelper.format(event, ale, channelIdToSendTo); + + case APPLICATION_COMMAND_PRIVILEGES_UPDATE, + PRUNE, + INTEGRATION_UPDATE, + INVITE_UPDATE, + UNKNOWN -> GenericAuditLogEventHelper.format(event, ale, channelIdToSendTo); + + // these seemingly don't trigger properly, or are unreliable + case MESSAGE_BULK_DELETE, + MESSAGE_CREATE, + MESSAGE_DELETE, + MESSAGE_UPDATE -> GenericAuditLogEventHelper.format(event, ale, channelIdToSendTo); + + default -> { + GenericAuditLogEventHelper.format(event, ale, channelIdToSendTo); + log.warn("The following event has no enum value defined in JDA and is not covered by the UNKNOWN type {}", Objects.requireNonNull(event.getRawData()).toPrettyString()); + } + } + } +} diff --git a/src/main/java/org/papertrail/listeners/memberlisteners/GuildMemberJoinAndLeaveListener.java b/src/main/java/org/papertrail/listeners/audit/event/GuildMemberJoinAndLeaveListener.java similarity index 90% rename from src/main/java/org/papertrail/listeners/memberlisteners/GuildMemberJoinAndLeaveListener.java rename to src/main/java/org/papertrail/listeners/audit/event/GuildMemberJoinAndLeaveListener.java index 21e4afba..8ac2c9e9 100644 --- a/src/main/java/org/papertrail/listeners/memberlisteners/GuildMemberJoinAndLeaveListener.java +++ b/src/main/java/org/papertrail/listeners/audit/event/GuildMemberJoinAndLeaveListener.java @@ -1,4 +1,4 @@ -package org.papertrail.listeners.memberlisteners; +package org.papertrail.listeners.audit.event; import io.vavr.control.Either; import net.dv8tion.jda.api.EmbedBuilder; @@ -10,16 +10,18 @@ import net.dv8tion.jda.api.events.guild.member.GuildMemberRemoveEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import org.jetbrains.annotations.NotNull; -import org.papertrail.sdk.client.AuditLogClient; -import org.papertrail.sdk.model.AuditLogObject; -import org.papertrail.sdk.model.ErrorObject; -import org.papertrail.utilities.DurationFormatter; +import org.papertrail.commons.sdk.client.AuditLogClient; +import org.papertrail.commons.sdk.model.AuditLogObject; +import org.papertrail.commons.sdk.model.ErrorObject; +import org.papertrail.commons.utilities.DurationFormatter; import java.awt.Color; import java.time.Instant; import java.util.Objects; import java.util.concurrent.Executor; +// this event is not properly logged in the audit logs, hence the usage of JDA's listener is preferred +// this event is logged in the same channel where the audit log events are logged public class GuildMemberJoinAndLeaveListener extends ListenerAdapter { private final Executor vThreadPool; diff --git a/src/main/java/org/papertrail/listeners/voicelisteners/GuildVoiceListener.java b/src/main/java/org/papertrail/listeners/audit/event/GuildVoiceListener.java similarity index 88% rename from src/main/java/org/papertrail/listeners/voicelisteners/GuildVoiceListener.java rename to src/main/java/org/papertrail/listeners/audit/event/GuildVoiceListener.java index e9ee04d3..13b4df52 100644 --- a/src/main/java/org/papertrail/listeners/voicelisteners/GuildVoiceListener.java +++ b/src/main/java/org/papertrail/listeners/audit/event/GuildVoiceListener.java @@ -1,4 +1,4 @@ -package org.papertrail.listeners.voicelisteners; +package org.papertrail.listeners.audit.event; import java.awt.Color; import java.time.Instant; @@ -13,10 +13,12 @@ import net.dv8tion.jda.api.entities.channel.middleman.AudioChannel; import net.dv8tion.jda.api.events.guild.voice.GuildVoiceUpdateEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; -import org.papertrail.sdk.client.AuditLogClient; -import org.papertrail.sdk.model.AuditLogObject; -import org.papertrail.sdk.model.ErrorObject; +import org.papertrail.commons.sdk.client.AuditLogClient; +import org.papertrail.commons.sdk.model.AuditLogObject; +import org.papertrail.commons.sdk.model.ErrorObject; +// this event is not properly logged in the audit logs, hence the usage of JDA's listener is preferred +// this event is logged in the same channel where the audit log events are logged public class GuildVoiceListener extends ListenerAdapter { private final Executor vThreadPool; diff --git a/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationFlagToChannelEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationFlagToChannelEventHelper.java new file mode 100644 index 00000000..b5e8a6bb --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationFlagToChannelEventHelper.java @@ -0,0 +1,35 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Objects; + +@UtilityClass +public class AutoModerationFlagToChannelEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Automod Event"); + + User targetUser = ale.getJDA().getUserById(ale.getTargetId()); + String mentionableTargetUser = (targetUser != null ? targetUser.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ›ˆ Automod has flagged a message sent by: "+mentionableTargetUser); + eb.setColor(Color.YELLOW); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationMemberTimeoutEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationMemberTimeoutEventHelper.java new file mode 100644 index 00000000..cd097011 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationMemberTimeoutEventHelper.java @@ -0,0 +1,35 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Objects; + +@UtilityClass +public class AutoModerationMemberTimeoutEventHelper { + + public static void format (GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Automod Event"); + + User targetUser = ale.getJDA().getUserById(ale.getTargetId()); + String mentionableTargetUser = (targetUser != null ? targetUser.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ›ˆ Automod has timed out"+mentionableTargetUser+" for a defined rule violation"); + eb.setColor(Color.MAGENTA); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationRuleBlockMessageEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationRuleBlockMessageEventHelper.java new file mode 100644 index 00000000..0e462aff --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationRuleBlockMessageEventHelper.java @@ -0,0 +1,35 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Objects; + +@UtilityClass +public class AutoModerationRuleBlockMessageEventHelper { + + public static void format (GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Automod Event"); + + User targetUser = ale.getJDA().getUserById(ale.getTargetId()); + String mentionableTargetUser = (targetUser != null ? targetUser.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ›ˆ Automod has blocked a message sent by: "+mentionableTargetUser); + eb.setColor(Color.ORANGE); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationRuleCreateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationRuleCreateEventHelper.java new file mode 100644 index 00000000..2f64925d --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationRuleCreateEventHelper.java @@ -0,0 +1,104 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.Role; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.apache.commons.lang3.StringUtils; +import org.papertrail.commons.utilities.TypeResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class AutoModerationRuleCreateEventHelper { + + public static void format (GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | AutoMod Rule Create"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following AutoMod rule was created"); + eb.setColor(Color.GREEN); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "exempt_roles": + String roleIds = String.valueOf(newValue); + String cleanedRoleIds = StringUtils.strip(roleIds, "[]"); + String[] roleIdList = StringUtils.split(cleanedRoleIds, ","); + StringBuilder mentionableRoles = new StringBuilder(); + for(String roleId : roleIdList) { + Role r = ale.getGuild().getRoleById(roleId.strip()); + mentionableRoles.append(r!=null ? r.getAsMention() : roleId.strip()).append(", "); + } + eb.addField("โœ”๏ธ Exempt Roles: ", "โ•ฐโ”ˆโžค"+ mentionableRoles, false); + break; + + case "enabled": + eb.addField("โ” Enabled", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); + break; + + case "trigger_type": + eb.addField("โšก Trigger Type", "โ•ฐโ”ˆโžค"+ TypeResolver.automodTriggerTypeResolver(newValue), false); + break; + + case "actions": + eb.addField("โšก Actions", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "exempt_channels": + String channelIds = String.valueOf(newValue); + String cleanedChannelIds = StringUtils.strip(channelIds, "[]"); + String[] channelIdList = StringUtils.split(cleanedChannelIds, ","); + StringBuilder mentionableChannels = new StringBuilder(); + for(String channelId : channelIdList) { + GuildChannel r = ale.getGuild().getGuildChannelById(channelId.strip()); + mentionableChannels.append(r!=null ? r.getAsMention() : channelId.strip()).append(", "); + } + eb.addField("โœ”๏ธ Exempt Channels: ", "โ•ฐโ”ˆโžค"+ mentionableChannels, false); + break; + + case "event_type": + eb.addField("๐Ÿงญ Event Type", "โ•ฐโ”ˆโžค"+TypeResolver.automodEventTypeResolver(newValue), false); + break; + + case "trigger_metadata": + eb.addField("๐Ÿ“Š Trigger Metadata", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "name": + eb.addField("๐Ÿท๏ธ AutoMod Rule Name ", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationRuleDeleteEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationRuleDeleteEventHelper.java new file mode 100644 index 00000000..769e5606 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationRuleDeleteEventHelper.java @@ -0,0 +1,59 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class AutoModerationRuleDeleteEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | AutoMod Rule Delete"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following AutoMod rule was deleted"); + eb.setColor(Color.RED); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "exempt_roles", "enabled", "trigger_type", "actions", "exempt_channels", "event_type", "trigger_metadata": + break; + + case "name": + eb.addField("๐Ÿท๏ธ AutoMod Rule Name ", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationRuleUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationRuleUpdateEventHelper.java new file mode 100644 index 00000000..7bee35ae --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationRuleUpdateEventHelper.java @@ -0,0 +1,94 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.Role; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.automod.AutoModRule; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.apache.commons.lang3.StringUtils; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class AutoModerationRuleUpdateEventHelper { + + public static void format (GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | AutoMod Rule Update"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following AutoMod rule was updated"); + eb.setColor(Color.YELLOW); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "exempt_roles": + String roleIds = String.valueOf(newValue); + String cleanedRoleIds = StringUtils.strip(roleIds, "[]"); + String[] roleIdList = StringUtils.split(cleanedRoleIds, ","); + StringBuilder mentionableRoles = new StringBuilder(); + for(String roleId : roleIdList) { + Role r = ale.getGuild().getRoleById(roleId.strip()); + mentionableRoles.append(r!=null ? r.getAsMention() : roleId.strip()).append(", "); + } + eb.addField("โœ”๏ธ New Exempt Roles: ", "โ•ฐโ”ˆโžค"+ mentionableRoles, false); + break; + + + case "actions": + eb.addField("โšก New Actions", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "exempt_channels": + String channelIds = String.valueOf(newValue); + String cleanedChannelIds = StringUtils.strip(channelIds, "[]"); + String[] channelIdList = StringUtils.split(cleanedChannelIds, ","); + StringBuilder mentionableChannels = new StringBuilder(); + for(String channelId : channelIdList) { + GuildChannel r = ale.getGuild().getGuildChannelById(channelId.strip()); + mentionableChannels.append(r!=null ? r.getAsMention() : channelId.strip()).append(", "); + } + eb.addField("โœ”๏ธ New Exempt Channels: ", "โ•ฐโ”ˆโžค"+ mentionableChannels, false); + break; + + + case "trigger_metadata": + eb.addField("๐Ÿ“Š New Trigger Metadata", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + // add name of the rule which got updated + AutoModRule rule = ale.getGuild().retrieveAutoModRuleById(ale.getTargetId()).complete(); + eb.addField("๐Ÿท๏ธ AutoMod Rule Name ", "โ•ฐโ”ˆโžค"+rule.getName(), false); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/BanEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/BanEventHelper.java new file mode 100644 index 00000000..e4814a62 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/BanEventHelper.java @@ -0,0 +1,46 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Objects; + +@UtilityClass +public class BanEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Ban Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following user was banned"); + eb.setColor(Color.RED); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + String moderatorId = ale.getUserId(); + String targetId = ale.getTargetId(); + String reason = ale.getReason(); + + event.getJDA().retrieveUserById(moderatorId).queue(moderator-> + event.getJDA().retrieveUserById(targetId).queue(target->{ + // if user objects are null we cannot use their mention so we instead use their IDs instead since they will never be null + eb.addField("๐Ÿšซ A member has been banned", "โ•ฐโ”ˆโžค"+(moderator!=null ? moderator.getAsMention() : moderatorId)+" has banned "+(target!=null ? target.getAsMention() : targetId), false); + eb.addField("๐Ÿ“ With Reason", "โ•ฐโ”ˆโžค"+(reason!=null ? reason : "No Reason Provided"), false); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + }) + ); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/BotAddEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/BotAddEventHelper.java new file mode 100644 index 00000000..5d1f7194 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/BotAddEventHelper.java @@ -0,0 +1,41 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Objects; + +@UtilityClass +public class BotAddEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Bot Add Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + User target = ale.getJDA().getUserById(ale.getTargetIdLong()); + + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + String mentionableTarget = (target !=null ? target.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A bot was added"); + eb.setColor(Color.CYAN); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + eb.addField("๐Ÿค– Added a bot: ", "โ•ฐโ”ˆโžค"+mentionableTarget, false); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/ChannelCreateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/ChannelCreateEventHelper.java new file mode 100644 index 00000000..33d76812 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/ChannelCreateEventHelper.java @@ -0,0 +1,87 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.DurationFormatter; +import org.papertrail.commons.utilities.TypeResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class ChannelCreateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Channel Create Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + GuildChannel targetChannel = ale.getGuild().getGuildChannelById(ale.getTargetId()); + + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : ale.getTargetId()); + + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following channel was created"); + eb.setColor(Color.GREEN); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "user_limit": + eb.addField("๐Ÿ‘ฅ User Limit", "โ•ฐโ”ˆโžค"+ TypeResolver.formatNumberOrUnlimited(newValue), false); + break; + + case "rate_limit_per_user": + eb.addField("๐Ÿ•“ Slowmode", "โ•ฐโ”ˆโžค"+ DurationFormatter.formatSeconds(newValue), false); + break; + + case "type": + eb.addField("๐Ÿ—จ๏ธ Channel Type", "โ•ฐโ”ˆโžค"+TypeResolver.channelTypeResolver(newValue), false); + break; + + case "nsfw": + eb.addField("๐Ÿ”ž NSFW", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); + break; + + case "permission_overwrites", "flags": + break; + + case "name": + eb.addField("๐Ÿท๏ธ Channel Name", "โ•ฐโ”ˆโžค"+newValue, false); + // provide a channel link next to its name. This mentionable channel can be obtained via the target ID of ALE + eb.addField("๐Ÿ”— Channel Link", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, true); + break; + + case "bitrate": + eb.addField("๐ŸŽš๏ธ Voice Channel Bitrate", "โ•ฐโ”ˆโžค"+TypeResolver.voiceChannelBitrateResolver(newValue), false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/ChannelDeleteEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/ChannelDeleteEventHelper.java new file mode 100644 index 00000000..91352876 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/ChannelDeleteEventHelper.java @@ -0,0 +1,69 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.TypeResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class ChannelDeleteEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Channel Delete Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + GuildChannel targetChannel = ale.getJDA().getGuildChannelById(ale.getTargetIdLong()); + + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : ale.getTargetId()); // this will return only the ID cause the channel with the ID has been deleted + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following channel was deleted"); + eb.setColor(Color.RED); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "name": + eb.addField("๐Ÿท๏ธ Name", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + case "type": + eb.addField("๐Ÿ—จ๏ธ Type", "โ•ฐโ”ˆโžค"+ TypeResolver.channelTypeResolver(oldValue), false); + break; + + case "user_limit", "rate_limit_per_user", "nsfw", "permission_overwrites", "video_quality_mode", "flags", "bitrate", "rtc_region": + break; // they're null during channel delete events + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.addField("๐Ÿ†” Deleted Channel ID", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/ChannelOverrideCreateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/ChannelOverrideCreateEventHelper.java new file mode 100644 index 00000000..0c560609 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/ChannelOverrideCreateEventHelper.java @@ -0,0 +1,95 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.Role; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.PermissionResolver; +import org.papertrail.commons.utilities.TypeResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class ChannelOverrideCreateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Channel Override Create"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + GuildChannel targetChannel = event.getGuild().getGuildChannelById(ale.getTargetId()); + + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following channel overrides were created"); + eb.setColor(Color.GREEN); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "type": + eb.addField("๐Ÿงฉ Override Type", "โ•ฐโ”ˆโžค"+ TypeResolver.channelOverrideTypeResolver(newValue), false); + break; + + case "deny": + // the oldValue will return null if a new channel is over-riden for the first time but we're not concerned with oldValue + // the new value contains the list of denied permissions the moderator sets when creating overrides for the first time + eb.addField("Denied Permissions", PermissionResolver.getParsedPermissions(newValue, "โŒ"), false); + break; + + case "allow": + // the oldValue will return null if a new channel is over-riden for the first time but we're not concerned with oldValue + // the new value contains the list of allowed permissions the moderator sets when creating overrides for the first time + eb.addField("Allowed Permissions", PermissionResolver.getParsedPermissions(newValue, "โœ…"), false); + break; + + case "id": + // id exposes the member/role id which for which the channel permissions are over-riden + // only one member/role permissions can be over-riden at a time + Member mb = event.getGuild().getMemberById(String.valueOf(newValue)); + Role r = event.getGuild().getRoleById(String.valueOf(newValue)); + + String mentionableRoleOrMember = ""; + if(mb!=null) { + mentionableRoleOrMember = mb.getAsMention(); + } else if (r!=null) { + mentionableRoleOrMember = r.getAsMention(); + } + eb.addField("๐ŸŽญ Target", "โ•ฐโ”ˆโžค"+mentionableRoleOrMember, false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + // add the target channel whose permissions were overridden + // exposed via ALE's TargetID + eb.addField("๐Ÿ—จ๏ธ Target Channel", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/ChannelOverrideDeleteEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/ChannelOverrideDeleteEventHelper.java new file mode 100644 index 00000000..ea813acb --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/ChannelOverrideDeleteEventHelper.java @@ -0,0 +1,94 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.Role; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.PermissionResolver; +import org.papertrail.commons.utilities.TypeResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class ChannelOverrideDeleteEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Channel Override Delete"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + GuildChannel targetChannel = event.getGuild().getGuildChannelById(ale.getTargetId()); + + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following channel overrides were deleted"); + eb.setColor(Color.RED); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "type": + eb.addField("๐Ÿงฉ Override Type", "โ•ฐโ”ˆโžค"+ TypeResolver.channelOverrideTypeResolver(oldValue), false); + break; + + case "deny": + // the newValue will return null if an over-ride is deleted but we're not concerned with newValue + // the oldValue returns the permissions the channel was previously denied + eb.addField("Previously Denied Permissions", PermissionResolver.getParsedPermissions(oldValue, "โŒ"), false); + break; + + case "allow": + // the newValue will return null if an over-ride is deleted but we're not concerned with newValue + // the oldValue returns the permissions the channel was previously allowed + eb.addField("Previously Allowed Permissions", PermissionResolver.getParsedPermissions(oldValue, "โœ…"), false); + break; + + case "id": + // id exposes the member/role id which for which the channel permissions are over-riden + Member mb = event.getGuild().getMemberById(String.valueOf(oldValue)); + Role r = event.getGuild().getRoleById(String.valueOf(oldValue)); + + String mentionableRoleOrMember = ""; + if(mb!=null) { + mentionableRoleOrMember = mb.getAsMention(); + } else if (r!=null) { + mentionableRoleOrMember = r.getAsMention(); + } + eb.addField("๐ŸŽญ Deleted Target", "โ•ฐโ”ˆโžค"+mentionableRoleOrMember, false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + // add the target channel whose permissions were over-riden + // can be retrieved via ALE's TargetID + eb.addField("๐Ÿ—จ๏ธ Target Channel", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/ChannelOverrideUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/ChannelOverrideUpdateEventHelper.java new file mode 100644 index 00000000..e8f0ab79 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/ChannelOverrideUpdateEventHelper.java @@ -0,0 +1,96 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.Role; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.PermissionResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class ChannelOverrideUpdateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Channel Override Update"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + GuildChannel targetChannel = event.getGuild().getGuildChannelById(ale.getTargetId()); + + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following channel overrides were updated"); + eb.setColor(Color.YELLOW); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + // changes do not expose the id and type keys in case of override updates + String overriddenId = ale.getOptionByName("id"); + String overriddenType = ale.getOptionByName("type"); + + String mentionableOverrideTarget = overriddenId; + if ("0".equals(overriddenType)) { + // Itโ€™s a role + Role role = event.getGuild().getRoleById(Objects.requireNonNull(overriddenId)); + if (role != null) { + mentionableOverrideTarget = role.getAsMention(); + } + } else if ("1".equals(overriddenType)) { + // Itโ€™s a member + Member member = event.getGuild().getMemberById(Objects.requireNonNull(overriddenId)); + if (member != null) { + mentionableOverrideTarget = member.getAsMention(); + } + } + + eb.addField("๐ŸŽญ Permissions Overridden For", "โ•ฐโ”ˆโžค"+mentionableOverrideTarget, false); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "deny": + String deniedPerms = PermissionResolver.getParsedPermissions(newValue, "โŒ"); + // if a channel is synchronized with it's category, the permission list will be blank and the StringBuilder will return a blank string + eb.addField("Denied Permissions", (deniedPerms.isBlank() ? "Permissions Synced With Category" : deniedPerms), false); + break; + + case "allow": + String allowedPerms = PermissionResolver.getParsedPermissions(newValue, "โœ…"); + // if a channel is synchronized with it's category, the permission list will be blank and the StringBuilder will return a blank string + eb.addField("Allowed Permissions", (allowedPerms.isBlank() ? "Permissions Synced With Category" : allowedPerms), false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + // add the target channel whose permissions were overridden + // can be retrieved via ALE's TargetID + eb.addField("๐Ÿ—จ๏ธ Target Channel", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/ChannelUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/ChannelUpdateEventHelper.java new file mode 100644 index 00000000..6dd11d2b --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/ChannelUpdateEventHelper.java @@ -0,0 +1,114 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.DurationFormatter; +import org.papertrail.commons.utilities.TypeResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class ChannelUpdateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Channel Update Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + GuildChannel targetChannel = event.getGuild().getGuildChannelById(ale.getTargetId()); + + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following channel was updated"); + eb.setColor(Color.YELLOW); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + eb.addBlankField(true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "user_limit": + eb.addField("๐Ÿ‘ฅ Old User Limit", "โ•ฐโ”ˆโžค"+ TypeResolver.formatNumberOrUnlimited(oldValue), true); + eb.addField("๐Ÿ‘ฅ New User Limit", "โ•ฐโ”ˆโžค"+TypeResolver.formatNumberOrUnlimited(newValue), true); + eb.addBlankField(true); + break; + + case "rate_limit_per_user": + eb.addField("๐Ÿ•“ Old Slowmode Value", "โ•ฐโ”ˆโžค"+ DurationFormatter.formatSeconds(oldValue), true); + eb.addField("๐Ÿ•“ New Slowmode Value", "โ•ฐโ”ˆโžค"+DurationFormatter.formatSeconds(newValue), true); + eb.addBlankField(true); + break; + + case "nsfw": + eb.addField("๐Ÿ”ž Old NSFW Settings", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), true); + eb.addField("๐Ÿ”ž New NSFW Settings", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), true); + eb.addBlankField(true); + break; + + case "video_quality_mode": + eb.addField("๐ŸŽฅ Old Video Quality Mode", "โ•ฐโ”ˆโžค"+TypeResolver.videoQualityModeResolver(oldValue), true); + eb.addField("๐ŸŽฅ New Video Quality Mode", "โ•ฐโ”ˆโžค"+TypeResolver.videoQualityModeResolver(newValue), true); + eb.addBlankField(true); + break; + + case "name": + eb.addField("๐Ÿท๏ธ Old Channel Name", "โ•ฐโ”ˆโžค"+oldValue, true); + eb.addField("๐Ÿท๏ธ New Channel Name", "โ•ฐโ”ˆโžค"+newValue, true); + eb.addBlankField(true); + break; + + case "bitrate": + eb.addField("๐ŸŽš๏ธ Old Voice Channel Bitrate", "โ•ฐโ”ˆโžค"+TypeResolver.voiceChannelBitrateResolver(oldValue), true); + eb.addField("๐ŸŽš๏ธ New Voice Channel Bitrate", "โ•ฐโ”ˆโžค"+TypeResolver.voiceChannelBitrateResolver(newValue), true); + eb.addBlankField(true); + break; + + case "rtc_region": + eb.addField("๐ŸŒ Old Region", "โ•ฐโ”ˆโžค"+oldValue, true); + eb.addField("๐ŸŒ New Region", "โ•ฐโ”ˆโžค"+newValue, true); + eb.addBlankField(true); + break; + + case "topic": + eb.addField("๐Ÿ—’๏ธ Old Topic", "โ•ฐโ”ˆโžค"+oldValue, true); + eb.addField("๐Ÿ—’๏ธ New topic", "โ•ฐโ”ˆโžค"+newValue, true); + eb.addBlankField(true); + break; + + case "default_auto_archive_duration": + eb.addField("๐Ÿ•’ Old Hide After Inactivity Timer", "โ•ฐโ”ˆโžค"+DurationFormatter.formatMinutes(oldValue), true); + eb.addField("๐Ÿ•’ New Hide After Inactivity Timer", "โ•ฐโ”ˆโžค"+DurationFormatter.formatMinutes(newValue), true); + eb.addBlankField(true); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + // mention the channel that got updated, id can be exposed via ALE's TargetID + eb.addField("๐Ÿ’ฌ Target Channel", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/EmojiCreateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/EmojiCreateEventHelper.java new file mode 100644 index 00000000..d10bdb71 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/EmojiCreateEventHelper.java @@ -0,0 +1,57 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class EmojiCreateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Emoji Create Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following emoji was created"); + eb.setColor(Color.GREEN); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "name": + eb.addField("๐Ÿท๏ธ Emoji Name", "โ•ฐโ”ˆโžค"+newValue, false); + eb.addField("โ„น๏ธ Emoji", "โ•ฐโ”ˆโžค"+"<:"+newValue+":"+ale.getTargetId()+">", false); // ale's TargetID retrieves the ID of the created emoji + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/EmojiDeleteEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/EmojiDeleteEventHelper.java new file mode 100644 index 00000000..8ae2dcde --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/EmojiDeleteEventHelper.java @@ -0,0 +1,56 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class EmojiDeleteEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Emoji Delete Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following emoji was deleted"); + eb.setColor(Color.RED); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "name": + eb.addField("โ™ป๏ธ Deleted Emoji", "โ•ฐโ”ˆโžค "+":"+oldValue+":", false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.addField("โ™ป๏ธ Deleted Emoji ID", "โ•ฐโ”ˆโžค"+ale.getTargetId(), false); + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/EmojiUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/EmojiUpdateEventHelper.java new file mode 100644 index 00000000..7aba9984 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/EmojiUpdateEventHelper.java @@ -0,0 +1,56 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class EmojiUpdateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Emoji Update Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following emoji was updated"); + eb.setColor(Color.YELLOW); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "name": + eb.addField("๐Ÿท๏ธ Emoji Name Updated", "โ•ฐโ”ˆโžค"+"From "+oldValue+" to "+newValue, false); + eb.addField("โ„น๏ธ Target Emoji", "โ•ฐโ”ˆโžค"+"<:"+newValue+":"+ale.getTargetId()+">", false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/GenericAuditLogEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/GenericAuditLogEventHelper.java new file mode 100644 index 00000000..5f8b28dd --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/GenericAuditLogEventHelper.java @@ -0,0 +1,44 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +// for events not defined by JDA yet +@UtilityClass +public class GenericAuditLogEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Generic Event"); + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + + eb.setDescription((executor != null ? executor.getAsMention() : ale.getUserId())+" has executed the following action:"); + eb.setColor(Color.LIGHT_GRAY); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/GuildUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/GuildUpdateEventHelper.java new file mode 100644 index 00000000..c8bc8766 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/GuildUpdateEventHelper.java @@ -0,0 +1,126 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.GuildSystemChannelFlagResolver; +import org.papertrail.commons.utilities.TypeResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class GuildUpdateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Guild Update Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following guild updates were recorded"); + eb.setColor(Color.MAGENTA); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "description": + eb.addField("Description Change", "from `"+oldValue+"` to `"+newValue+"`", false); + break; + + case "icon_hash": + eb.addField("Icon Hash Change", "from `"+oldValue+"` to `"+newValue+"`", false); + break; + + case "name": + eb.addField("Guild Name Change", "from `"+oldValue+"` to `"+newValue+"`", false); + break; + + case "afk_channel_id": + eb.addField("AFK Channel Changed To", "`"+newValue+"`", false); + break; + + case "default_message_notifications": + eb.addField("Default Message Notifications Update", "`"+newValue+"`", false); + break; + + case "afk_timeout": + eb.addField("AFK Channel Timeout Change", "`"+newValue+"s`", false); + break; + + case "system_channel_id": + eb.addField("Community Updates Channel Changed To", "`"+newValue+"`", false); + break; + + case "widget_enabled": + eb.addField("Widget Enabled", "`"+newValue+"`", false); + break; + + case "widget_channel_id": + eb.addField("Widget Channel Changed To", "`"+newValue+"`", false); + break; + + case "premium_progress_bar_enabled": + eb.addField("Server Boost Progress Bar Enabled", "`"+newValue+"`", false); + break; + + case "mfa_level": + eb.addField("MFA Requirement", "`"+newValue+"`", false); + break; + + case "verification_level": + eb.addField("Verification Level", "`"+ TypeResolver.guildVerificationLevelResolver(newValue)+"`", false); + break; + + case "owner_id": + User oldOwner = ale.getJDA().getUserById(String.valueOf(oldValue)); + User newOwner = ale.getJDA().getUserById(String.valueOf(newValue)); + String mentionableOldOwner = (oldOwner!=null ? oldOwner.getAsMention() : String.valueOf(oldValue)); + String mentionableNewOwner = (newOwner!=null ? newOwner.getAsMention() : String.valueOf(newValue)); + eb.addField("Ownership Change", "from "+mentionableOldOwner+" to "+mentionableNewOwner, false); + break; + + case "public_updates_channel_id": + eb.addField("Announcements Channel Changed To", "`"+newValue+"`", false); + break; + + case "rules_channel_id": + eb.addField("Rules Channel Changed To", "`"+newValue+"`", false); + break; + + + case "system_channel_flags": + eb.addField("System Channel Flags", GuildSystemChannelFlagResolver.getParsedFlags(newValue), false); + break; + + case "explicit_content_filter": + eb.addField("Explicit Content Filter", TypeResolver.explicitFilterTypeResolver(newValue), false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/IntegrationCreateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/IntegrationCreateEventHelper.java new file mode 100644 index 00000000..068dec7a --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/IntegrationCreateEventHelper.java @@ -0,0 +1,59 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class IntegrationCreateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Integration Create Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following integration was created"); + eb.setColor(Color.PINK); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "type": + eb.addField("Integration Type","โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "name": + eb.addField("Integration Name", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/IntegrationDeleteEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/IntegrationDeleteEventHelper.java new file mode 100644 index 00000000..dd202d2a --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/IntegrationDeleteEventHelper.java @@ -0,0 +1,59 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class IntegrationDeleteEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Integration Delete Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following integration was deleted"); + eb.setColor(Color.RED); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "type": + eb.addField("โš™๏ธ Integration Type", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + case "name": + eb.addField("๐Ÿท๏ธ Integration Name", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/InviteCreateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/InviteCreateEventHelper.java new file mode 100644 index 00000000..a1ea94aa --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/InviteCreateEventHelper.java @@ -0,0 +1,81 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.DurationFormatter; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class InviteCreateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale , String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Invite Create Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following invite was created"); + eb.setColor(Color.CYAN); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "code": + eb.addField("๐Ÿ”— Invite Code", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "inviter_id": + User inviter = ale.getJDA().getUserById(String.valueOf(newValue)); + eb.addField("๐Ÿ‘ค Invite Created By", "โ•ฐโ”ˆโžค"+(inviter != null ? inviter.getAsMention() : ale.getUserId()), false); + break; + + case "temporary": + eb.addField("๐Ÿ•’ Temporary Invite", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); + break; + + case "max_uses": + int maxUses = Integer.parseInt(String.valueOf(newValue)); + eb.addField("๐Ÿ”ข Max Uses", "โ•ฐโ”ˆโžค"+(maxUses == 0 ? "Unlimited" : String.valueOf(maxUses)), false); + break; + case "uses", "flags": + break; + + case "max_age": + eb.addField("โณ Expires After", "โ•ฐโ”ˆโžค"+ DurationFormatter.formatSeconds(newValue), false); + break; + case "channel_id": + GuildChannel channel = ale.getGuild().getGuildChannelById(String.valueOf(newValue)); + eb.addField("๐Ÿ’ฌ Invite Channel", "โ•ฐโ”ˆโžค"+(channel != null ? channel.getAsMention() : "`"+newValue+"`"), false); + break; + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/InviteDeleteEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/InviteDeleteEventHelper.java new file mode 100644 index 00000000..efb147e4 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/InviteDeleteEventHelper.java @@ -0,0 +1,74 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.Channel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class InviteDeleteEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Invite Delete Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following invite has been deleted"); + eb.setColor(Color.BLUE); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "code": + eb.addField("๐Ÿ”— Deleted Invite Code", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + case "inviter_id": + User inviter = ale.getJDA().getUserById(String.valueOf(oldValue)); + eb.addField("๐Ÿ‘ค Invite Originally Created By", "โ•ฐโ”ˆโžค"+(inviter != null ? inviter.getAsMention() : "`Unknown`"), false); + break; + + case "temporary": + eb.addField("๐Ÿ•’ Temporary Invite", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), false); + break; + + case "max_uses", "flags", "max_age": + break; + case "uses": + eb.addField("๐Ÿ”ข Number of times the invite was used", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + case "channel_id": + Channel channel = ale.getGuild().getGuildChannelById(String.valueOf(oldValue)); + eb.addField("๐Ÿ’ฌ Invite Channel", "โ•ฐโ”ˆโžค"+(channel != null ? channel.getAsMention() : "`"+oldValue+"`"), false); + break; + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/KickEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/KickEventHelper.java new file mode 100644 index 00000000..42800a55 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/KickEventHelper.java @@ -0,0 +1,47 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Objects; + +@UtilityClass +public class KickEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Kick Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following member was kicked"); + eb.setColor(Color.ORANGE); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + String moderatorId = ale.getUserId(); + String targetId = ale.getTargetId(); + String reason = ale.getReason(); + + // A REST Action is required here because kicked members are not cached + event.getJDA().retrieveUserById(moderatorId).queue(moderator-> + event.getJDA().retrieveUserById(targetId).queue(target->{ + // if user objects are null we cannot use their mention so we instead use their IDs instead since they will never be null + eb.addField("๐Ÿ‘ข A member/application has been kicked", "โ•ฐโ”ˆโžค"+(moderator!=null ? moderator.getAsMention() : moderatorId)+" has kicked "+(target!=null ? target.getAsMention() : targetId), false); + eb.addField("๐Ÿ“ With Reason", "โ•ฐโ”ˆโžค"+(reason!=null ? reason : "No Reason Provided"), false); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + }) + ); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/MemberRoleUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/MemberRoleUpdateEventHelper.java new file mode 100644 index 00000000..ee0bdb6b --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/MemberRoleUpdateEventHelper.java @@ -0,0 +1,66 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.RoleObjectParser; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class MemberRoleUpdateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Member Role Update"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + User target = ale.getJDA().getUserById(ale.getTargetIdLong()); + + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + String mentionableTarget = (target !=null ? target.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following member role was updated"); + eb.setThumbnail(Objects.requireNonNull(event.getGuild().getMemberById(ale.getTargetIdLong())).getEffectiveAvatarUrl()); + eb.setColor(Color.YELLOW); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "$add": + eb.addField("Target Member", "โ•ฐโ”ˆโžค"+mentionableTarget, false); + eb.addField("Role(s) Added", "โ•ฐโ”ˆโžค"+RoleObjectParser.parseRole(newValue), false); + break; + + case "$remove": + eb.addField("Target Member", "โ•ฐโ”ˆโžค"+mentionableTarget, false); + eb.addField("Role(s) Removed", "โ•ฐโ”ˆโžค"+RoleObjectParser.parseRole(newValue), false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/MemberUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/MemberUpdateEventHelper.java new file mode 100644 index 00000000..1323991f --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/MemberUpdateEventHelper.java @@ -0,0 +1,91 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.DurationFormatter; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class MemberUpdateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Member Update Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + User target = ale.getJDA().getUserById(ale.getTargetIdLong()); + + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + String mentionableTarget = (target !=null ? target.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following member was updated"); + eb.setThumbnail(Objects.requireNonNull(event.getGuild().getMemberById(ale.getTargetId())).getEffectiveAvatarUrl()); + eb.setColor(Color.CYAN); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "communication_disabled_until": + if(newValue==null) { + eb.setColor(Color.GREEN); + eb.addField("๐ŸŸข Timeout Lifted", "โ•ฐโ”ˆโžค Timeout for "+mentionableTarget+ " has been removed", false); + } else { + eb.setColor(Color.YELLOW); + eb.addField("โ›” Timeout Received", "โ•ฐโ”ˆโžค"+mentionableTarget+ " has received a timeout", false); + eb.addField("โฑ๏ธ Till", "โ•ฐโ”ˆโžค"+ DurationFormatter.isoToLocalTimeCounter(newValue), false); + eb.addField("๐Ÿ“ Reason", "โ•ฐโ”ˆโžค"+(ale.getReason()!=null ? ale.getReason() : "No Reason Provided"), false); + } + + break; + + case "nick": + if(oldValue!=null && newValue==null) { // resetting to default nickname + eb.addField("๐Ÿท๏ธ Nickname Update", "โ•ฐโ”ˆโžค"+"Reset "+mentionableTarget+"'s name", false); + } else if(oldValue != null) { // changing from one nickname to another + eb.addField("๐Ÿท๏ธ Nickname Update", "โ•ฐโ”ˆโžค"+"Updated "+mentionableTarget+"'s name from "+oldValue+ " to "+ newValue, false); + } else if(newValue != null) { // changing from default nickname to a new nickname + eb.addField("๐Ÿท๏ธ Nickname Update", "โ•ฐโ”ˆโžค"+"Set "+mentionableTarget+"'s name as "+ newValue, false); + } + break; + + case "mute": + eb.addField("๐ŸŽ™๏ธ Is Muted", "โ•ฐโ”ˆโžคSet "+mentionableTarget+"'s Mute Status as "+ ((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); + break; + + case "deaf": + eb.addField("๐Ÿ”‡ Is Deafened", "โ•ฐโ”ˆโžคSet "+mentionableTarget+"'s Deafened Status as "+ ((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); + break; + + case "bypasses_verification": + eb.addField("๐Ÿ›ก๏ธ Bypass Verification", "โ•ฐโ”ˆโžคSet "+mentionableTarget+"'s verification bypass status as "+ ((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/MemberVoiceKickEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/MemberVoiceKickEventHelper.java new file mode 100644 index 00000000..940c1e8b --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/MemberVoiceKickEventHelper.java @@ -0,0 +1,37 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Objects; + +@UtilityClass +public class MemberVoiceKickEventHelper { + + // the audit log does not expose much information regarding member vc move and kick events + // therefore GuildVoiceListener has been created to know about channels the target has been moved or kicked from + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Member Voice Kick Event"); + + User executor = ale.getJDA().getUserById(ale.getUserId()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A voice kick event was detected"); + eb.setColor(Color.RED); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/MemberVoiceMoveEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/MemberVoiceMoveEventHelper.java new file mode 100644 index 00000000..24ea43dd --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/MemberVoiceMoveEventHelper.java @@ -0,0 +1,37 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Objects; + +@UtilityClass +public class MemberVoiceMoveEventHelper { + + // the audit log does not expose much information regarding member vc move and kick events + // therefore GuildVoiceListener has been created to know about channels the target has been moved or kicked from + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Member Voice Move Event"); + + User executor = ale.getJDA().getUserById(ale.getUserId()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A voice move event was detected"); + eb.setColor(Color.YELLOW); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/MessagePinEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/MessagePinEventHelper.java new file mode 100644 index 00000000..570dd6ae --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/MessagePinEventHelper.java @@ -0,0 +1,37 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Objects; + +@UtilityClass +public class MessagePinEventHelper { + + // this audit log event does not expose anything other than the executor of the event + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Message Pin Event"); + + User executor = ale.getJDA().getUserById(ale.getTargetId()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **A message from **: "+mentionableExecutor+" was pinned"); + eb.setColor(Color.PINK); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } + +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/MessageUnpinEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/MessageUnpinEventHelper.java new file mode 100644 index 00000000..9ef58ce3 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/MessageUnpinEventHelper.java @@ -0,0 +1,36 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Objects; + +@UtilityClass +public class MessageUnpinEventHelper { + + // this audit log event does not expose anything other than the executor of the event + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Message Unpin Event"); + + User executor = ale.getJDA().getUserById(ale.getTargetId()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **A message from **: "+mentionableExecutor+" un-pinned"); + eb.setColor(Color.MAGENTA); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/RoleCreateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/RoleCreateEventHelper.java new file mode 100644 index 00000000..18022fed --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/RoleCreateEventHelper.java @@ -0,0 +1,68 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.Role; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class RoleCreateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Role Create Event"); + + User executor = ale.getJDA().getUserById(ale.getUserId()); + Role targetRole = ale.getJDA().getRoleById(ale.getTargetId()); + + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + String mentionableTargetRole = (targetRole !=null ? targetRole.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\n The following role was created"); + eb.setColor(Color.GREEN); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + eb.addField("Target Role", mentionableTargetRole, false); + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "name": + eb.addField("๐Ÿท๏ธ Role Name", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + /* + * discord for some reason shows the following to be default/null even + * when you set them during the creation of the role itself + * and delegates them to ROLE_UPDATE event + */ + case "colors", "hoist", "color", "permissions", "mentionable": + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/RoleDeleteEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/RoleDeleteEventHelper.java new file mode 100644 index 00000000..f4619933 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/RoleDeleteEventHelper.java @@ -0,0 +1,81 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.Role; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.ColorFormatter; +import org.papertrail.commons.utilities.PermissionResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class RoleDeleteEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Role Delete Event"); + + User executor = ale.getJDA().getUserById(ale.getUserId()); + Role targetRole = ale.getJDA().getRoleById(ale.getTargetId()); + + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + String mentionableTargetRole = (targetRole !=null ? targetRole.getAsMention() : ale.getTargetId()); // this will always return the ID only + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following role was deleted"); + eb.setColor(Color.RED); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "name": + eb.addField("๐Ÿท๏ธ Role Name", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + case "hoist": + eb.addField("๐Ÿ“‚ Display Seperately", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), false); + break; + + case "color": + eb.addField("๐ŸŽจ Color", "โ•ฐโ”ˆโžค"+ ColorFormatter.formatToHex(oldValue), false); + break; + + case "permissions": + eb.addField("Role Permissions", PermissionResolver.getParsedPermissions(oldValue, "โœ…"), false); + break; + + case "mentionable": + eb.addField("๐Ÿ”— Mentionable", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), false); + break; + + case "colors": + eb.addField("๐ŸŒˆ Gradient Color System", "โ•ฐโ”ˆโžค"+ColorFormatter.formatGradientColorSystemToHex(oldValue), false); + break; + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.addField("๐Ÿ†” Deleted Role ID", "โ•ฐโ”ˆโžค"+mentionableTargetRole, false); + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/RoleUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/RoleUpdateEventHelper.java new file mode 100644 index 00000000..8298cd07 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/RoleUpdateEventHelper.java @@ -0,0 +1,94 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.Role; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.ColorFormatter; +import org.papertrail.commons.utilities.PermissionResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class RoleUpdateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Role Update Event"); + + User executor = ale.getJDA().getUserById(ale.getUserId()); + Role targetRole = ale.getJDA().getRoleById(ale.getTargetId()); + + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + String mentionableTargetRole = (targetRole !=null ? targetRole.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following member role was updated"); + eb.setColor(Color.YELLOW); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + eb.addField("Target Role", mentionableTargetRole, false); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "name": + eb.addField("๐Ÿท๏ธ Old Role Name", "โ•ฐโ”ˆโžค"+oldValue, true); + eb.addField("๐Ÿท๏ธ New Role Name", "โ•ฐโ”ˆโžค"+newValue, true); + eb.addBlankField(true); + break; + + case "hoist": + eb.addField("๐Ÿ“‚ Old Display Seperately", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), true); + eb.addField("๐Ÿ“‚ New Display Seperately", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), true); + eb.addBlankField(true); + break; + + case "color": + eb.addField("๐ŸŽจ Old Color", "โ•ฐโ”ˆโžค"+ ColorFormatter.formatToHex(oldValue), true); + eb.addField("๐ŸŽจ New Color", "โ•ฐโ”ˆโžค"+ColorFormatter.formatToHex(newValue), true); + eb.addBlankField(true); + break; + + case "permissions": + eb.addField("Old Role Permissions", PermissionResolver.getParsedPermissions(oldValue, "โœ…"), true); + eb.addField("New Role Permissions", PermissionResolver.getParsedPermissions(newValue, "โœ…"), true); + eb.addBlankField(true); + break; + + case "mentionable": + eb.addField("๐Ÿ”— Old Mentionable", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), true); + eb.addField("๐Ÿ”— New Mentionable", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), true); + eb.addBlankField(true); + break; + + case "colors": + eb.addField("๐ŸŒˆ Old Gradient Color System", "โ•ฐโ”ˆโžค"+ColorFormatter.formatGradientColorSystemToHex(oldValue), true); + eb.addField("๐ŸŒˆ New Gradient Color System", "โ•ฐโ”ˆโžค"+ColorFormatter.formatGradientColorSystemToHex(newValue), true); + eb.addBlankField(true); + break; + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/ScheduledEventCreateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/ScheduledEventCreateEventHelper.java new file mode 100644 index 00000000..9fce208c --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/ScheduledEventCreateEventHelper.java @@ -0,0 +1,79 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.TypeResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class ScheduledEventCreateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Scheduled Event Create Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A scheduled event was created"); + eb.setColor(Color.GREEN); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "entity_type": + eb.addField("๐Ÿ“‚ Event Type", "โ•ฐโ”ˆโžค"+ TypeResolver.scheduleEventTypeResolver(newValue), false); + break; + + case "privacy_level", "image_hash": + break; + + case "description": + eb.addField("๐Ÿ“ Event Description", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "status": + eb.addField("๐Ÿ“Š Event Status", "โ•ฐโ”ˆโžค"+TypeResolver.scheduleEventStatusTypeResolver(newValue), false); + break; + + case "location": + eb.addField("๐Ÿ“ Event Location", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "name": + eb.addField("๐Ÿท๏ธ Event Name", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "channel_id": + GuildChannel eventChannel = event.getGuild().getGuildChannelById(String.valueOf(newValue)); + eb.addField("๐Ÿ’ฌ Event Channel", "โ•ฐโ”ˆโžค"+(eventChannel!=null ? eventChannel.getAsMention() : String.valueOf(newValue)), false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/ScheduledEventDeleteEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/ScheduledEventDeleteEventHelper.java new file mode 100644 index 00000000..a979b7e4 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/ScheduledEventDeleteEventHelper.java @@ -0,0 +1,79 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.TypeResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class ScheduledEventDeleteEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Scheduled Event Delete Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A scheduled event has been deleted"); + eb.setColor(Color.RED); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "entity_type": + eb.addField("๐Ÿ“‚ Event Type", "โ•ฐโ”ˆโžค"+ TypeResolver.scheduleEventTypeResolver(oldValue), false); + break; + + case "privacy_level", "image_hash": + break; + + case "description": + eb.addField("๐Ÿ“ Event Description", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "status": + eb.addField("๐Ÿ“Š Event Status", "โ•ฐโ”ˆโžค"+TypeResolver.scheduleEventStatusTypeResolver(oldValue), false); + break; + + case "location": + eb.addField("๐Ÿ“ Event Location", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + case "name": + eb.addField("๐Ÿท๏ธ Event Name", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + case "channel_id": + GuildChannel eventChannel = event.getGuild().getGuildChannelById(String.valueOf(oldValue)); + eb.addField("๐Ÿ’ฌ Event Channel", "โ•ฐโ”ˆโžค"+(eventChannel!=null ? eventChannel.getAsMention() : String.valueOf(oldValue)), false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/ScheduledEventUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/ScheduledEventUpdateEventHelper.java new file mode 100644 index 00000000..71f17087 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/ScheduledEventUpdateEventHelper.java @@ -0,0 +1,88 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.ScheduledEvent; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.TypeResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class ScheduledEventUpdateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Scheduled Event Update Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + ScheduledEvent targetEvent = event.getGuild().getScheduledEventById(ale.getTargetId()); + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following scheduled event was updated: "+ Objects.requireNonNull(targetEvent).getName()); + eb.setColor(Color.YELLOW); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "entity_type": + eb.addField("๐Ÿ“‚ Old Event Type", "โ•ฐโ”ˆโžค"+ TypeResolver.scheduleEventTypeResolver(oldValue), false); + eb.addField("๐Ÿ“‚ New Event Type", "โ•ฐโ”ˆโžค"+TypeResolver.scheduleEventTypeResolver(newValue), false); + break; + + case "privacy_level", "image_hash": + break; + + case "description": + eb.addField("๐Ÿ“ Old Event Description", "โ•ฐโ”ˆโžค"+oldValue, false); + eb.addField("๐Ÿ“ New Event Description", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "status": + eb.addField("๐Ÿ“Š Old Event Status", "โ•ฐโ”ˆโžค"+TypeResolver.scheduleEventStatusTypeResolver(oldValue), false); + eb.addField("๐Ÿ“Š New Event Status", "โ•ฐโ”ˆโžค"+TypeResolver.scheduleEventStatusTypeResolver(newValue), false); + break; + + case "location": + eb.addField("๐Ÿ“ Event Location", "โ•ฐโ”ˆโžค"+oldValue, false); + eb.addField("๐Ÿ“ Event Location", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "name": + eb.addField("๐Ÿท๏ธ Old Event Name", "โ•ฐโ”ˆโžค"+oldValue, false); + eb.addField("๐Ÿท๏ธ New Event Name","โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "channel_id": + GuildChannel eventChannel = event.getGuild().getGuildChannelById(String.valueOf(oldValue)); + eb.addField("๐Ÿ’ฌ Old Event Channel", "โ•ฐโ”ˆโžค"+(eventChannel!=null ? eventChannel.getAsMention() : String.valueOf(oldValue)), false); + eventChannel = event.getGuild().getGuildChannelById(String.valueOf(newValue)); + eb.addField("๐Ÿ’ฌ New Event Channel", "โ•ฐโ”ˆโžค"+(eventChannel!=null ? eventChannel.getAsMention() : String.valueOf(newValue)), false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/StageInstanceCreateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/StageInstanceCreateEventHelper.java new file mode 100644 index 00000000..fe9058c0 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/StageInstanceCreateEventHelper.java @@ -0,0 +1,58 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class StageInstanceCreateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Stage Instance Create Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A stage instance was created"); + eb.setColor(Color.GREEN); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "topic": + eb.addField("๐Ÿ“ Stage Topic", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "privacy_level": + eb.addField("๐ŸŒ Stage Privacy", "โ•ฐโ”ˆโžค"+newValue, false); + eb.addField("Stage Privacy Result Inference", "-# A value of 1 means PUBLIC (deprecated) and 2 means GUILD_ONLY", false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/StageInstanceDeleteEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/StageInstanceDeleteEventHelper.java new file mode 100644 index 00000000..cca0caf1 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/StageInstanceDeleteEventHelper.java @@ -0,0 +1,58 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class StageInstanceDeleteEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Stage Instance Delete Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A stage instance was deleted"); + eb.setColor(Color.RED); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "topic": + eb.addField("๐Ÿ“ Deleted Stage Topic", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + case "privacy_level": + eb.addField("๐ŸŒ Deleted Stage Privacy", "โ•ฐโ”ˆโžค"+oldValue, false); + eb.addField("Stage Privacy Result Inference", "-# A value of 1 means PUBLIC (deprecated) and 2 means GUILD_ONLY", false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/StageInstanceUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/StageInstanceUpdateEventHelper.java new file mode 100644 index 00000000..2112701b --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/StageInstanceUpdateEventHelper.java @@ -0,0 +1,60 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class StageInstanceUpdateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Stage Instance Update Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A stage instance was updated"); + eb.setColor(Color.YELLOW); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "topic": + eb.addField("๐Ÿ“ OldStage Topic", "โ•ฐโ”ˆโžค"+oldValue, false); + eb.addField("๐Ÿ“ New Stage Topic", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "privacy_level": + eb.addField("๐ŸŒ Old Stage Privacy","โ•ฐโ”ˆโžค"+oldValue, false); + eb.addField("๐ŸŒ New Stage Privacy", "โ•ฐโ”ˆโžค"+newValue, false); + eb.addField("Stage Privacy Result Inference", "-# A value of 1 means PUBLIC (deprecated) and 2 means GUILD_ONLY", false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/StickerCreateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/StickerCreateEventHelper.java new file mode 100644 index 00000000..25e52272 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/StickerCreateEventHelper.java @@ -0,0 +1,73 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.sticker.GuildSticker; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class StickerCreateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Sticker Create Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following sticker was created"); + eb.setColor(Color.GREEN); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "format_type", "type", "asset", "available", "guild_id": + break; + + case "id": + eb.addField("๐Ÿ†” Sticker ID", "โ•ฐโ”ˆโžค"+newValue, false); + GuildSticker sticker = event.getGuild().getStickerById(String.valueOf(newValue)); + eb.addField("๐Ÿ”— Sticker Link", "โ•ฐโ”ˆโžค"+(sticker!=null ? sticker.getIconUrl() : "N/A"), false); + break; + + case "tags": + eb.addField("โ„น๏ธ Related Emoji", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "description": + eb.addField("๐Ÿ“ Description", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "name": + eb.addField("๐Ÿท๏ธ Sticker Name", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/StickerDeleteEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/StickerDeleteEventHelper.java new file mode 100644 index 00000000..636aa04b --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/StickerDeleteEventHelper.java @@ -0,0 +1,70 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class StickerDeleteEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Sticker Delete Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following sticker was deleted"); + eb.setColor(Color.RED); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "format_type", "type", "asset", "available", "guild_id": + break; + + case "id": + eb.addField("๐Ÿ†” Sticker ID", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + case "tags": + eb.addField("โ„น๏ธ Related Emoji", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + case "description": + eb.addField("๐Ÿ“ Description", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + case "name": + eb.addField("๐Ÿท๏ธ Sticker Name", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/StickerUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/StickerUpdateEventHelper.java new file mode 100644 index 00000000..df3c55a0 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/StickerUpdateEventHelper.java @@ -0,0 +1,72 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.sticker.GuildSticker; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class StickerUpdateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Sticker Update Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + GuildSticker targetSticker = event.getGuild().getStickerById(ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following sticker was updated"); + eb.setColor(Color.YELLOW); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + eb.addField("๐Ÿท๏ธ Target Sticker Name", Objects.requireNonNull(targetSticker).getName(), false); + eb.addField("๐Ÿ”— Target Sticker Url", targetSticker.getIconUrl(), false); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + + case "format_type", "type", "asset", "available", "guild_id", "id": + break; + + case "tags": + eb.addField("โ„น๏ธ Related Emoji", "โ•ฐโ”ˆโžค"+"from "+oldValue+" to "+newValue, false); + break; + + case "description": + eb.addField("๐Ÿ“ Description", "โ•ฐโ”ˆโžค"+"from `"+oldValue+"` to `"+newValue+"`", false); + break; + + case "name": + eb.addField("๐Ÿท๏ธ Sticker Name", "โ•ฐโ”ˆโžค"+"from `"+oldValue+"` to `"+newValue+"`", false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + } + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/ThreadCreateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/ThreadCreateEventHelper.java new file mode 100644 index 00000000..461e9048 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/ThreadCreateEventHelper.java @@ -0,0 +1,83 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.DurationFormatter; +import org.papertrail.commons.utilities.TypeResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class ThreadCreateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Thread Create Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + ThreadChannel targetThread = event.getGuild().getThreadChannelById(ale.getTargetId()); + String mentionableTargetThread = (targetThread !=null ? targetThread.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A thread has been created"); + eb.setColor(Color.GREEN); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "locked": + eb.addField("๐Ÿ”’ Locked", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); + break; + + case "auto_archive_duration": + eb.addField("๐Ÿ•’ Auto Archive Duration", "โ•ฐโ”ˆโžค"+ DurationFormatter.formatMinutes(newValue), false); + break; + + case "rate_limit_per_user": + eb.addField("๐ŸŒ Slowmode Limit", "โ•ฐโ”ˆโžค"+DurationFormatter.formatSeconds(newValue), false); + break; + + case "type": + eb.addField("๐Ÿ“ Thread Type", "โ•ฐโ”ˆโžค"+ TypeResolver.channelTypeResolver(newValue), false); + break; + + case "archived": + eb.addField("๐Ÿ—„๏ธ Archived", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); + break; + + case "flags": + eb.addField("๐Ÿšฉ Flags", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "name": + eb.addField("๐Ÿท๏ธ Thread Name", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + + } + eb.addField("๐Ÿงต Target Thread", "โ•ฐโ”ˆโžค"+mentionableTargetThread, false); + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/ThreadDeleteEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/ThreadDeleteEventHelper.java new file mode 100644 index 00000000..117a2149 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/ThreadDeleteEventHelper.java @@ -0,0 +1,78 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.DurationFormatter; +import org.papertrail.commons.utilities.TypeResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class ThreadDeleteEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Thread Delete Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A thread has been deleted"); + eb.setColor(Color.RED); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "๐Ÿ”’ locked": + eb.addField("Locked", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), false); + break; + + case "๐Ÿ•’ auto_archive_duration": + eb.addField("Auto Archive Duration", "โ•ฐโ”ˆโžค"+ DurationFormatter.formatMinutes(oldValue), false); + break; + + case "rate_limit_per_user": + eb.addField("๐ŸŒ Slowmode Limit", "โ•ฐโ”ˆโžค"+DurationFormatter.formatSeconds(oldValue), false); + break; + + case "type": + eb.addField("๐Ÿ“ Thread Type", "โ•ฐโ”ˆโžค"+ TypeResolver.channelTypeResolver(oldValue), false); + break; + + case "archived": + eb.addField("๐Ÿ—„๏ธ Archived", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), false); + break; + + case "flags": + eb.addField("๐Ÿšฉ Flags", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + case "name": + eb.addField("๐Ÿท๏ธ Thread Name", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + + } + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/ThreadUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/ThreadUpdateEventHelper.java new file mode 100644 index 00000000..8c8e5400 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/ThreadUpdateEventHelper.java @@ -0,0 +1,98 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; +import org.papertrail.commons.utilities.DurationFormatter; +import org.papertrail.commons.utilities.TypeResolver; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class ThreadUpdateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Thread Update Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + ThreadChannel targetThread = event.getGuild().getThreadChannelById(ale.getTargetId()); + String mentionableTargetThread = (targetThread !=null ? targetThread.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A thread has been updated"); + eb.setColor(Color.YELLOW); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + eb.addBlankField(true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "locked": + eb.addField("๐Ÿ”’ Old Lock Status", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), true); + eb.addField("๐Ÿ”’ New Lock Status", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), true); + eb.addBlankField(true); + break; + + case "auto_archive_duration": + eb.addField("๐Ÿ•’ Old Auto Archive Duration", "โ•ฐโ”ˆโžค"+ DurationFormatter.formatMinutes(oldValue), true); + eb.addField("๐Ÿ•’ New Auto Archive Duration", "โ•ฐโ”ˆโžค"+DurationFormatter.formatMinutes(newValue), true); + eb.addBlankField(true); + break; + + case "rate_limit_per_user": + eb.addField("๐ŸŒ Old Slowmode Limit", "โ•ฐโ”ˆโžค"+DurationFormatter.formatSeconds(oldValue), true); + eb.addField("๐ŸŒ New Slowmode Limit", "โ•ฐโ”ˆโžค"+DurationFormatter.formatSeconds(newValue), true); + eb.addBlankField(true); + break; + + case "type": + eb.addField("๐Ÿ“ Old Thread Type", "โ•ฐโ”ˆโžค"+ TypeResolver.channelTypeResolver(oldValue), true); + eb.addField("๐Ÿ“ New Thread Type", "โ•ฐโ”ˆโžค"+TypeResolver.channelTypeResolver(newValue), true); + eb.addBlankField(true); + break; + + case "archived": + eb.addField("๐Ÿ—„๏ธ Old Archive Status", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), true); + eb.addField("๐Ÿ—„๏ธ New Archive Status", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), true); + eb.addBlankField(true); + break; + + case "flags": + eb.addField("๐Ÿšฉ Old Flag Value", "โ•ฐโ”ˆโžค"+oldValue, true); + eb.addField("๐Ÿšฉ New Flag Value", "โ•ฐโ”ˆโžค"+newValue, true); + eb.addBlankField(true); + break; + + case "name": + eb.addField("๐Ÿท๏ธ Old Thread Name", "โ•ฐโ”ˆโžค"+oldValue, true); + eb.addField("๐Ÿท๏ธ New Thread Name", "โ•ฐโ”ˆโžค"+newValue, true); + eb.addBlankField(true); + break; + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + + } + eb.addField("๐Ÿงต Target Thread", "โ•ฐโ”ˆโžค"+mentionableTargetThread, false); + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/UnbanEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/UnbanEventHelper.java new file mode 100644 index 00000000..b446556d --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/UnbanEventHelper.java @@ -0,0 +1,44 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Objects; + +@UtilityClass +public class UnbanEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Member Unban Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following user was un-banned"); + eb.setColor(Color.GREEN); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + String moderatorId = ale.getUserId(); + String targetId = ale.getTargetId(); + + event.getJDA().retrieveUserById(moderatorId).queue(moderator-> + event.getJDA().retrieveUserById(targetId).queue(target->{ + // if user objects are null we cannot use their mention so we instead use their IDs instead since they will never be null + eb.addField("๐Ÿ”“ A member has been un-banned", "โ•ฐโ”ˆโžค"+(moderator!=null ? moderator.getAsMention() : moderatorId)+" has un-banned "+(target!=null ? target.getAsMention() : targetId), false); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + }) + ); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/VoiceChannelStatusDeleteEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/VoiceChannelStatusDeleteEventHelper.java new file mode 100644 index 00000000..265ef8ab --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/VoiceChannelStatusDeleteEventHelper.java @@ -0,0 +1,39 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Objects; + +@UtilityClass +public class VoiceChannelStatusDeleteEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Voice Channel Status Delete"); + + User executor = ale.getJDA().getUserById(ale.getUserId()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + GuildChannel targetChannel = ale.getJDA().getGuildChannelById(ale.getTargetId()); + String mentionableTargetChannel = (targetChannel != null ? targetChannel.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following voice channel's status was deleted: "+mentionableTargetChannel); + eb.setColor(Color.ORANGE); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/VoiceChannelStatusUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/VoiceChannelStatusUpdateEventHelper.java new file mode 100644 index 00000000..ea2447ed --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/VoiceChannelStatusUpdateEventHelper.java @@ -0,0 +1,39 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Objects; + +@UtilityClass +public class VoiceChannelStatusUpdateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Voice Channel Status Update"); + + User executor = ale.getJDA().getUserById(ale.getUserId()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + GuildChannel targetChannel = ale.getJDA().getGuildChannelById(ale.getTargetId()); + String mentionableTargetChannel = (targetChannel != null ? targetChannel.getAsMention() : ale.getTargetId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following voice channel's status was updated: "+mentionableTargetChannel); + eb.setColor(Color.YELLOW); + + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/WebhookCreateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/WebhookCreateEventHelper.java new file mode 100644 index 00000000..0a7b3f5e --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/WebhookCreateEventHelper.java @@ -0,0 +1,69 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class WebhookCreateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Webhook Create Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A webhook has been created"); + eb.setColor(Color.GREEN); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "type": + eb.addField("Webhook Type", "โ•ฐโ”ˆโžค"+newValue, false); + eb.addField("Webhook Type Explanation", "-# 0 for PING; 1 for Event", false); + break; + + case "avatar_Hash": + eb.addField("Avatar Hash", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + case "channel_id": + GuildChannel targetChannel = event.getGuild().getGuildChannelById(String.valueOf(newValue)); + String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : String.valueOf(newValue)); + eb.addField("Channel", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); + break; + + case "name": + eb.addField("Webhook Name", "โ•ฐโ”ˆโžค"+newValue, false); + break; + + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + + } + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/WebhookRemoveEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/WebhookRemoveEventHelper.java new file mode 100644 index 00000000..d1be9357 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/WebhookRemoveEventHelper.java @@ -0,0 +1,69 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class WebhookRemoveEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Webhook Remove Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A webhook has been removed"); + eb.setColor(Color.RED); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "type": + eb.addField("๐Ÿ“ก Webhook Type", "โ•ฐโ”ˆโžค"+oldValue, false); + eb.addField("Webhook Type Legend", "-# 0 for PING; 1 for Event", false); + break; + + case "avatar_hash": + eb.addField("๐Ÿ–ผ๏ธ Avatar Hash", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + case "channel_id": + GuildChannel targetChannel = event.getGuild().getGuildChannelById(String.valueOf(oldValue)); + String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : String.valueOf(oldValue)); + eb.addField("๐Ÿ’ฌ Channel", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); + break; + + case "name": + eb.addField("๐Ÿท๏ธ Webhook Name", "โ•ฐโ”ˆโžค"+oldValue, false); + break; + + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + + } + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } +} diff --git a/src/main/java/org/papertrail/listeners/audit/helper/WebhookUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/WebhookUpdateEventHelper.java new file mode 100644 index 00000000..a7873d42 --- /dev/null +++ b/src/main/java/org/papertrail/listeners/audit/helper/WebhookUpdateEventHelper.java @@ -0,0 +1,70 @@ +package org.papertrail.listeners.audit.helper; + +import lombok.experimental.UtilityClass; +import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.audit.AuditLogChange; +import net.dv8tion.jda.api.audit.AuditLogEntry; +import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.User; +import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; +import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; + +import java.awt.Color; +import java.util.Map; +import java.util.Objects; + +@UtilityClass +public class WebhookUpdateEventHelper { + + public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("Audit Log Entry | Webhook Update Event"); + + User executor = ale.getJDA().getUserById(ale.getUserIdLong()); + String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); + + eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A webhook has been updated"); + eb.setColor(Color.YELLOW); + eb.addField("Action Type", String.valueOf(ale.getType()), true); + eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); + + for(Map.Entry changes: ale.getChanges().entrySet()) { + String change = changes.getKey(); + Object oldValue = changes.getValue().getOldValue(); + Object newValue = changes.getValue().getNewValue(); + + switch(change) { + case "type": + eb.addField("๐Ÿ“ก Webhook Type", "โ•ฐโ”ˆโžค " + newValue, false); + eb.addField("Webhook Type Legend", "-# 0 for PING; 1 for Event", false); + break; + + case "avatar_hash": + eb.addField("๐Ÿ–ผ๏ธ Avatar Hash", "โ•ฐโ”ˆโžค"+"from `"+oldValue+"` to `"+newValue+"`", false); + break; + + case "channel_id": + GuildChannel targetChannel = event.getGuild().getGuildChannelById(String.valueOf(newValue)); + String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : String.valueOf(newValue)); + eb.addField("๐Ÿ’ฌ New Channel", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); + break; + + case "name": + eb.addField("๐Ÿท๏ธ Webhook Name", "โ•ฐโ”ˆโžค"+"from "+oldValue+" to "+newValue, false); + break; + + + default: + eb.addField(change, "from "+oldValue+" to "+newValue, false); + } + + } + eb.setFooter("Audit Log Entry ID: "+ale.getId()); + eb.setTimestamp(ale.getTimeCreated()); + + MessageEmbed mb = eb.build(); + Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); + } + +} diff --git a/src/main/java/org/papertrail/listeners/commandlisteners/AuditLogSetupCommandListener.java b/src/main/java/org/papertrail/listeners/audit/setup/AuditLogSetupCommandListener.java similarity index 96% rename from src/main/java/org/papertrail/listeners/commandlisteners/AuditLogSetupCommandListener.java rename to src/main/java/org/papertrail/listeners/audit/setup/AuditLogSetupCommandListener.java index 0aeeefc6..e87f7640 100644 --- a/src/main/java/org/papertrail/listeners/commandlisteners/AuditLogSetupCommandListener.java +++ b/src/main/java/org/papertrail/listeners/audit/setup/AuditLogSetupCommandListener.java @@ -1,12 +1,12 @@ -package org.papertrail.listeners.commandlisteners; +package org.papertrail.listeners.audit.setup; import java.awt.Color; import java.util.Objects; import io.vavr.control.Either; -import org.papertrail.sdk.model.ErrorObject; -import org.papertrail.sdk.client.AuditLogClient; -import org.papertrail.sdk.model.AuditLogObject; +import org.papertrail.commons.sdk.model.ErrorObject; +import org.papertrail.commons.sdk.client.AuditLogClient; +import org.papertrail.commons.sdk.model.AuditLogObject; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.Permission; diff --git a/src/main/java/org/papertrail/listeners/commandlisteners/BotInfoCommandListener.java b/src/main/java/org/papertrail/listeners/commandlisteners/BotInfoCommandListener.java deleted file mode 100644 index 0829a6e8..00000000 --- a/src/main/java/org/papertrail/listeners/commandlisteners/BotInfoCommandListener.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.papertrail.listeners.commandlisteners; - -import java.awt.Color; -import java.time.Instant; - -import org.papertrail.version.AuthorInfo; -import org.papertrail.version.ProjectInfo; - -import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.entities.MessageEmbed; -import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; -import net.dv8tion.jda.api.hooks.ListenerAdapter; - -public class BotInfoCommandListener extends ListenerAdapter { - - @Override - public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { - - if(event.getName().equals("about")) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("๐Ÿ“Š About "+ProjectInfo.APPNAME+" ๐Ÿ“Š"); - eb.setDescription("๐Ÿ‘ค Developed By: **"+AuthorInfo.AUTHOR_NAME+"**"); - eb.setThumbnail(AuthorInfo.AUTHOR_AVATAR_URL); - eb.setColor(Color.PINK); - - eb.addField("๐Ÿท๏ธ App Name", "โ•ฐโ”ˆโžค"+ProjectInfo.APPNAME, false); - eb.addField("โš™๏ธ App Version", "โ•ฐโ”ˆโžค"+ProjectInfo.VERSION, false); - eb.addField("๐Ÿ“ƒ App Source Code", "โ•ฐโ”ˆโžค"+"[GitHub]("+ProjectInfo.PROJECT_LINK+")", false); - eb.addField("๐Ÿ” Privacy Policy", "โ•ฐโ”ˆโžค"+"[Privacy.md]("+ProjectInfo.PRIVACY+")", false); - eb.addField("๐Ÿค Terms of Use", "โ•ฐโ”ˆโžค"+"[Terms.md]("+ProjectInfo.TERMS+")", false); - - eb.setFooter(ProjectInfo.APPNAME+" "+ProjectInfo.VERSION); - eb.setTimestamp(Instant.now()); - - MessageEmbed mb = eb.build(); - event.replyEmbeds(mb).setEphemeral(false).queue(); - } - - } -} diff --git a/src/main/java/org/papertrail/listeners/commandlisteners/RequiredPermissionCheckCommandListener.java b/src/main/java/org/papertrail/listeners/commandlisteners/RequiredPermissionCheckCommandListener.java deleted file mode 100644 index 95b88a56..00000000 --- a/src/main/java/org/papertrail/listeners/commandlisteners/RequiredPermissionCheckCommandListener.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.papertrail.listeners.commandlisteners; - -import java.awt.Color; -import java.util.EnumMap; -import java.util.Map; - -import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.Permission; -import net.dv8tion.jda.api.entities.Guild; -import net.dv8tion.jda.api.entities.Member; -import net.dv8tion.jda.api.entities.MessageEmbed; -import net.dv8tion.jda.api.entities.Role; -import net.dv8tion.jda.api.entities.SelfUser; -import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; -import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; -import net.dv8tion.jda.api.hooks.ListenerAdapter; - -public class RequiredPermissionCheckCommandListener extends ListenerAdapter { - - @Override - public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { - - if (event.getName().equals("permcheck")) { - - Guild guild = event.getGuild(); - - SelfUser botAsUser = event.getJDA().getSelfUser(); - assert guild != null; - Role botIntegrationRole = guild.getRoleByBot(botAsUser); - Member botMember = guild.getMember(botAsUser); - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("PaperTrail Permissions Checker"); - eb.setDescription("Helps determine whether the required permissions are granted for PaperTrail to function properly"); - eb.setColor(Color.MAGENTA); - - assert botIntegrationRole != null; - String botRoleRequiredPermissions = (botIntegrationRole.hasPermission(Permission.VIEW_AUDIT_LOGS) ? "โœ…" : "โŒ") + - Permission.VIEW_AUDIT_LOGS.getName() + - System.lineSeparator() + - (botIntegrationRole.hasPermission(Permission.MANAGE_SERVER) ? "โœ…" : "โŒ") + - Permission.MANAGE_SERVER.getName(); - - eb.addField("Bot Integration Role Specific Permission", botRoleRequiredPermissions, false); - - // create a map of required permissions and set all their statuses to false - Map requiredPermissions = new EnumMap<>(Permission.class); - requiredPermissions.putAll(Map.of( - Permission.MESSAGE_EMBED_LINKS, false, - Permission.MESSAGE_HISTORY, false, - Permission.MESSAGE_SEND, false, - Permission.MESSAGE_SEND_IN_THREADS, false, - Permission.VIEW_CHANNEL, false)); - - - GuildChannel currentChannel = guild.getGuildChannelById(event.getChannelIdLong()); - - if(currentChannel==null || botMember == null) { - eb.addField("Channel Specific Permissions","ERROR: Could not determine bot permissions for the given channel. Channel possibly not supported", false); - } else { - botMember.getPermissions(currentChannel).forEach(permission ->{ - if(requiredPermissions.containsKey(permission)) { - requiredPermissions.replace(permission, true); - } - }); - - StringBuilder finalPermissions = new StringBuilder(); - requiredPermissions.forEach((key, value) -> { - finalPermissions.append(Boolean.TRUE.equals(value) ? "โœ…" : "โŒ"); - finalPermissions.append(key.getName()).append(System.lineSeparator()); - }); - - - eb.addField("Channel Specific Permissions: "+currentChannel.getAsMention(), finalPermissions.toString(), false); - } - - - MessageEmbed mb = eb.build(); - event.replyEmbeds(mb).queue(); - } - } -} diff --git a/src/main/java/org/papertrail/listeners/commandlisteners/package-info.java b/src/main/java/org/papertrail/listeners/commandlisteners/package-info.java deleted file mode 100644 index dd37ae86..00000000 --- a/src/main/java/org/papertrail/listeners/commandlisteners/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * This package contains classes that listen for slash commands - */ -package org.papertrail.listeners.commandlisteners; \ No newline at end of file diff --git a/src/main/java/org/papertrail/listeners/guildlisteners/ServerBoostListener.java b/src/main/java/org/papertrail/listeners/guildlisteners/ServerBoostListener.java deleted file mode 100644 index 9a9737fb..00000000 --- a/src/main/java/org/papertrail/listeners/guildlisteners/ServerBoostListener.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.papertrail.listeners.guildlisteners; - -import java.awt.Color; -import java.time.Instant; -import java.time.OffsetDateTime; -import java.util.Objects; -import java.util.concurrent.Executor; - -import io.vavr.control.Either; -import org.jetbrains.annotations.NotNull; - -import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.entities.Guild; -import net.dv8tion.jda.api.entities.Member; -import net.dv8tion.jda.api.entities.MessageEmbed; -import net.dv8tion.jda.api.events.guild.member.update.GuildMemberUpdateBoostTimeEvent; -import net.dv8tion.jda.api.hooks.ListenerAdapter; -import org.papertrail.sdk.client.AuditLogClient; -import org.papertrail.sdk.model.AuditLogObject; -import org.papertrail.sdk.model.ErrorObject; - -public class ServerBoostListener extends ListenerAdapter { - - private final Executor vThreadPool; - - public ServerBoostListener( Executor vThreadPool) { - this.vThreadPool = vThreadPool; - } - - @Override - public void onGuildMemberUpdateBoostTime(@NotNull GuildMemberUpdateBoostTimeEvent event) { - - vThreadPool.execute(()->{ - // server boost logs are mapped to audit log table - // Call the API and see if the event came from a registered Guild - Either response = AuditLogClient.getRegisteredGuild(event.getGuild().getId()); - response.peek(success -> { - String registeredChannelId= success.channelId(); - - Member member = event.getMember(); - Guild guild = event.getGuild(); - - String mentionableMember = member.getAsMention(); - - OffsetDateTime newBoostTime = event.getNewTimeBoosted(); // Will be null if the member stopped boosting - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("๐Ÿš€ Server Boost Event "); - eb.setThumbnail(guild.getIconUrl()); - - if (newBoostTime != null) { - eb.setDescription("๐ŸŽ‰ **" + guild.getName() + "** has been boosted!"); - eb.setColor(Color.PINK); - eb.addField("๐Ÿ”‹ Booster Gained", "โ•ฐโ”ˆโžค"+mentionableMember+" has started boosting your server", false); - eb.addField("๐Ÿ“ˆ Total Boosts In The Server", "โ•ฐโ”ˆโžค"+guild.getBoostCount(), false); - eb.addField("๐ŸŽ–๏ธ Current Boost Tier", "โ•ฐโ”ˆโžค"+ guild.getBoostTier(), false); - } else { - eb.setDescription("โš ๏ธ **" + guild.getName() + "** has lost a boost."); - eb.setColor(Color.GRAY); - eb.addField("๐Ÿชซ Booster Lost", "โ•ฐโ”ˆโžค"+mentionableMember+" has removed their boost from your server", false); - eb.addField("๐Ÿ“‰ Remaining Boosts In The Server", "โ•ฐโ”ˆโžค"+guild.getBoostCount(), false); - eb.addField("๐ŸŽ–๏ธ Current Boost Tier", "โ•ฐโ”ˆโžค"+ guild.getBoostTier(), false); - eb.addField("Notice", "Boosts remain active for a period even after a member stops boosting, so the server's boost count doesn't update immediately.", false); - } - - eb.setFooter("Server Boost Detection"); - eb.setTimestamp(Instant.now()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(registeredChannelId)).sendMessageEmbeds(mb).queue(); - }); - - }); - } -} diff --git a/src/main/java/org/papertrail/listeners/guildlisteners/package-info.java b/src/main/java/org/papertrail/listeners/guildlisteners/package-info.java deleted file mode 100644 index 210b11aa..00000000 --- a/src/main/java/org/papertrail/listeners/guildlisteners/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/* - * Groups listeners related to guild updates - */ -package org.papertrail.listeners.guildlisteners; \ No newline at end of file diff --git a/src/main/java/org/papertrail/listeners/loglisteners/AuditLogListener.java b/src/main/java/org/papertrail/listeners/loglisteners/AuditLogListener.java deleted file mode 100644 index 9dd2e1da..00000000 --- a/src/main/java/org/papertrail/listeners/loglisteners/AuditLogListener.java +++ /dev/null @@ -1,2676 +0,0 @@ -package org.papertrail.listeners.loglisteners; - -import java.awt.Color; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Objects; -import java.util.concurrent.Executor; - -import io.vavr.control.Either; -import org.apache.commons.lang3.StringUtils; -import org.jetbrains.annotations.NotNull; -import org.papertrail.sdk.client.AuditLogClient; -import org.papertrail.sdk.model.AuditLogObject; -import org.papertrail.sdk.model.ErrorObject; -import org.papertrail.utilities.ColorFormatter; -import org.papertrail.utilities.DurationFormatter; -import org.papertrail.utilities.GuildSystemChannelFlagResolver; -import org.papertrail.utilities.MemberRoleUpdateParser; -import org.papertrail.utilities.PermissionResolver; -import org.papertrail.utilities.TypeResolver; - -import net.dv8tion.jda.api.EmbedBuilder; -import net.dv8tion.jda.api.audit.ActionType; -import net.dv8tion.jda.api.audit.AuditLogChange; -import net.dv8tion.jda.api.audit.AuditLogEntry; -import net.dv8tion.jda.api.entities.Member; -import net.dv8tion.jda.api.entities.MessageEmbed; -import net.dv8tion.jda.api.entities.Role; -import net.dv8tion.jda.api.entities.ScheduledEvent; -import net.dv8tion.jda.api.entities.User; -import net.dv8tion.jda.api.entities.automod.AutoModRule; -import net.dv8tion.jda.api.entities.channel.Channel; -import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel; -import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; -import net.dv8tion.jda.api.entities.sticker.GuildSticker; -import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent; -import net.dv8tion.jda.api.hooks.ListenerAdapter; - -public class AuditLogListener extends ListenerAdapter{ - - private final Executor vThreadPool; - - public AuditLogListener(Executor vThreadPool) { - this.vThreadPool = vThreadPool; - } - - @Override - public void onGuildAuditLogEntryCreate(@NotNull GuildAuditLogEntryCreateEvent event) { - - vThreadPool.execute(()->{ - - // Call the API and see if the event came from a registered Guild - Either response = AuditLogClient.getRegisteredGuild(event.getGuild().getId()); - response.peek(success -> { - AuditLogEntry ale = event.getEntry(); - auditLogParser(event, ale, success.channelId()); - }); - - }); - } - - private void auditLogParser(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - ActionType action = ale.getType(); - switch(action) { - case APPLICATION_COMMAND_PRIVILEGES_UPDATE -> formatGeneric(event, ale, channelIdToSendTo); - - case AUTO_MODERATION_FLAG_TO_CHANNEL -> formatAutoModFlagToChannel(event, ale, channelIdToSendTo); - case AUTO_MODERATION_MEMBER_TIMEOUT -> formatAutoModMemberTimeout(event, ale, channelIdToSendTo); - case AUTO_MODERATION_RULE_BLOCK_MESSAGE -> formatAutoModRuleBlockMessage(event, ale, channelIdToSendTo); - case AUTO_MODERATION_RULE_CREATE -> formatAutoModRuleCreate(event, ale, channelIdToSendTo); - case AUTO_MODERATION_RULE_DELETE -> formatAutoModRuleDelete(event, ale, channelIdToSendTo); - case AUTO_MODERATION_RULE_UPDATE -> formatAutoModRuleUpdate(event, ale, channelIdToSendTo); - - case KICK -> formatKick(event, ale, channelIdToSendTo); - case PRUNE -> formatGeneric(event, ale, channelIdToSendTo); - case BAN -> formatBan(event, ale, channelIdToSendTo); - case UNBAN -> formatUnban(event, ale, channelIdToSendTo); - case BOT_ADD -> formatBotAdd(event, ale, channelIdToSendTo); - - case CHANNEL_CREATE -> formatChannelCreate(event, ale, channelIdToSendTo); - case CHANNEL_UPDATE -> formatChannelUpdate(event, ale, channelIdToSendTo); - case CHANNEL_DELETE -> formatChannelDelete(event, ale, channelIdToSendTo); - case CHANNEL_OVERRIDE_CREATE -> formatChannelOverrideCreate(event, ale, channelIdToSendTo); - case CHANNEL_OVERRIDE_DELETE -> formatChannelOverrideDelete(event, ale, channelIdToSendTo); - case CHANNEL_OVERRIDE_UPDATE -> formatChannelOverrideUpdate(event, ale, channelIdToSendTo); - - case ROLE_CREATE -> formatRoleCreate(event, ale, channelIdToSendTo); - case ROLE_UPDATE -> formatRoleUpdate(event, ale, channelIdToSendTo); - case ROLE_DELETE -> formatRoleDelete(event, ale, channelIdToSendTo); - - case EMOJI_CREATE -> formatEmojiCreate(event, ale, channelIdToSendTo); - case EMOJI_UPDATE -> formatEmojiUpdate(event, ale, channelIdToSendTo); - case EMOJI_DELETE -> formatEmojiDelete(event, ale, channelIdToSendTo); - - case STICKER_CREATE -> formatStickerCreate(event, ale, channelIdToSendTo); - case STICKER_UPDATE -> formatStickerUpdate(event, ale, channelIdToSendTo); - case STICKER_DELETE -> formatStickerDelete(event, ale, channelIdToSendTo); - - case GUILD_UPDATE -> formatGuildUpdate(event, ale, channelIdToSendTo); - - case INTEGRATION_CREATE -> formatIntegrationCreate(event, ale, channelIdToSendTo); - case INTEGRATION_UPDATE -> formatGeneric(event, ale, channelIdToSendTo); - case INTEGRATION_DELETE -> formatIntegrationDelete(event, ale, channelIdToSendTo); - - case INVITE_CREATE -> formatInviteCreate(event, ale, channelIdToSendTo); - case INVITE_UPDATE -> formatGeneric(event, ale, channelIdToSendTo); - case INVITE_DELETE -> formatInviteDelete(event, ale, channelIdToSendTo); - - case MEMBER_ROLE_UPDATE -> formatMemberRoleUpdate(event, ale, channelIdToSendTo); - case MEMBER_UPDATE -> formatMemberUpdate(event, ale, channelIdToSendTo); - - case MEMBER_VOICE_KICK -> formatMemberVoiceKick(event, ale, channelIdToSendTo); - case MEMBER_VOICE_MOVE -> formatMemberVoiceMove(event, ale, channelIdToSendTo); - - // these seemingly don't trigger properly, or are unreliable - case MESSAGE_BULK_DELETE -> formatGeneric(event, ale, channelIdToSendTo); - case MESSAGE_CREATE -> formatGeneric(event, ale, channelIdToSendTo); - case MESSAGE_DELETE -> formatGeneric(event, ale, channelIdToSendTo); - case MESSAGE_UPDATE -> formatGeneric(event, ale, channelIdToSendTo); - - case MESSAGE_PIN -> formatMessagePin(event, ale, channelIdToSendTo); - case MESSAGE_UNPIN -> formatMessageUnpin(event, ale, channelIdToSendTo); - - case SCHEDULED_EVENT_CREATE -> formatScheduledEventCreate(event, ale, channelIdToSendTo); - case SCHEDULED_EVENT_UPDATE -> formatScheduledEventUpdate(event, ale, channelIdToSendTo); - case SCHEDULED_EVENT_DELETE -> formatScheduledEventDelete(event, ale, channelIdToSendTo); - - case STAGE_INSTANCE_CREATE -> formatStageInstanceCreate(event, ale, channelIdToSendTo); - case STAGE_INSTANCE_UPDATE -> formatStageInstanceUpdate(event, ale, channelIdToSendTo); - case STAGE_INSTANCE_DELETE -> formatStageInstanceDelete(event, ale, channelIdToSendTo); - - case THREAD_CREATE -> formatThreadCreate(event, ale, channelIdToSendTo); - case THREAD_UPDATE -> formatThreadUpdate(event, ale, channelIdToSendTo); - case THREAD_DELETE -> formatThreadDelete(event, ale, channelIdToSendTo); - - case VOICE_CHANNEL_STATUS_DELETE -> formatVoiceChannelStatusDelete(event, ale, channelIdToSendTo); - case VOICE_CHANNEL_STATUS_UPDATE -> formatVoiceChannelStatusUpdate(event, ale, channelIdToSendTo); - - case WEBHOOK_CREATE -> formatWebhookCreate(event, ale, channelIdToSendTo); - case WEBHOOK_UPDATE -> formatWebhookUpdate(event, ale, channelIdToSendTo); - case WEBHOOK_REMOVE -> formatWebhookRemove(event, ale, channelIdToSendTo); - - case UNKNOWN -> formatGeneric(event, ale, channelIdToSendTo); - default -> formatGeneric(event, ale, channelIdToSendTo); - } - } - - - private void formatGeneric(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Generic Event"); - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - - eb.setDescription((executor != null ? executor.getAsMention() : ale.getUserId())+" has executed the following action:"); - eb.setColor(Color.LIGHT_GRAY); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatInviteCreate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale , String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Invite Create Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following invite was created"); - eb.setColor(Color.CYAN); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "code": - eb.addField("๐Ÿ”— Invite Code", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "inviter_id": - User inviter = ale.getJDA().getUserById(String.valueOf(newValue)); - eb.addField("๐Ÿ‘ค Invite Created By", "โ•ฐโ”ˆโžค"+(inviter != null ? inviter.getAsMention() : ale.getUserId()), false); - break; - - case "temporary": - eb.addField("๐Ÿ•’ Temporary Invite", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); - break; - - case "max_uses": - int maxUses = Integer.parseInt(String.valueOf(newValue)); - eb.addField("๐Ÿ”ข Max Uses", "โ•ฐโ”ˆโžค"+(maxUses == 0 ? "Unlimited" : String.valueOf(maxUses)), false); - break; - case "uses", "flags": - break; - - case "max_age": - eb.addField("โณ Expires After", "โ•ฐโ”ˆโžค"+DurationFormatter.formatSeconds(newValue), false); - break; - case "channel_id": - GuildChannel channel = ale.getGuild().getGuildChannelById(String.valueOf(newValue)); - eb.addField("๐Ÿ’ฌ Invite Channel", "โ•ฐโ”ˆโžค"+(channel != null ? channel.getAsMention() : "`"+newValue+"`"), false); - break; - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - - } - - private void formatInviteDelete(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Invite Delete Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following invite has been deleted"); - eb.setColor(Color.BLUE); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "code": - eb.addField("๐Ÿ”— Deleted Invite Code", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - case "inviter_id": - User inviter = ale.getJDA().getUserById(String.valueOf(oldValue)); - eb.addField("๐Ÿ‘ค Invite Originally Created By", "โ•ฐโ”ˆโžค"+(inviter != null ? inviter.getAsMention() : "`Unknown`"), false); - break; - - case "temporary": - eb.addField("๐Ÿ•’ Temporary Invite", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), false); - break; - - case "max_uses", "flags", "max_age": - break; - case "uses": - eb.addField("๐Ÿ”ข Number of times the invite was used", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - case "channel_id": - Channel channel = ale.getGuild().getGuildChannelById(String.valueOf(oldValue)); - eb.addField("๐Ÿ’ฌ Invite Channel", "โ•ฐโ”ˆโžค"+(channel != null ? channel.getAsMention() : "`"+oldValue+"`"), false); - break; - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatKick(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Kick Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following member was kicked"); - eb.setColor(Color.ORANGE); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - String moderatorId = ale.getUserId(); - String targetId = ale.getTargetId(); - String reason = ale.getReason(); - - // A REST Action is required here because kicked members are not cached - event.getJDA().retrieveUserById(moderatorId).queue(moderator->{ - event.getJDA().retrieveUserById(targetId).queue(target->{ - // if user objects are null we cannot use their mention so we instead use their IDs instead since they will never be null - eb.addField("๐Ÿ‘ข A member/application has been kicked", "โ•ฐโ”ˆโžค"+(moderator!=null ? moderator.getAsMention() : moderatorId)+" has kicked "+(target!=null ? target.getAsMention() : targetId), false); - eb.addField("๐Ÿ“ With Reason", "โ•ฐโ”ˆโžค"+(reason!=null ? reason : "No Reason Provided"), false); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - }); - }); - } - - private void formatBan(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Ban Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following user was banned"); - eb.setColor(Color.RED); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - String moderatorId = ale.getUserId(); - String targetId = ale.getTargetId(); - String reason = ale.getReason(); - - event.getJDA().retrieveUserById(moderatorId).queue(moderator->{ - event.getJDA().retrieveUserById(targetId).queue(target->{ - // if user objects are null we cannot use their mention so we instead use their IDs instead since they will never be null - eb.addField("๐Ÿšซ A member has been banned", "โ•ฐโ”ˆโžค"+(moderator!=null ? moderator.getAsMention() : moderatorId)+" has banned "+(target!=null ? target.getAsMention() : targetId), false); - eb.addField("๐Ÿ“ With Reason", "โ•ฐโ”ˆโžค"+(reason!=null ? reason : "No Reason Provided"), false); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - }); - }); - } - - private void formatUnban(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Member Unban Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following user was un-banned"); - eb.setColor(Color.GREEN); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - String moderatorId = ale.getUserId(); - String targetId = ale.getTargetId(); - - event.getJDA().retrieveUserById(moderatorId).queue(moderator->{ - event.getJDA().retrieveUserById(targetId).queue(target->{ - // if user objects are null we cannot use their mention so we instead use their IDs instead since they will never be null - eb.addField("๐Ÿ”“ A member has been un-banned", "โ•ฐโ”ˆโžค"+(moderator!=null ? moderator.getAsMention() : moderatorId)+" has un-banned "+(target!=null ? target.getAsMention() : targetId), false); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - }); - }); - } - - private void formatMemberUpdate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Member Update Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - User target = ale.getJDA().getUserById(ale.getTargetIdLong()); - - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - String mentionableTarget = (target !=null ? target.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following member was updated"); - eb.setThumbnail(Objects.requireNonNull(event.getGuild().getMemberById(ale.getTargetId())).getEffectiveAvatarUrl()); - eb.setColor(Color.CYAN); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "communication_disabled_until": - if(newValue==null) { - eb.setColor(Color.GREEN); - eb.addField("๐ŸŸข Timeout Lifted", "โ•ฐโ”ˆโžค Timeout for "+mentionableTarget+ " has been removed", false); - } else { - eb.setColor(Color.YELLOW); - eb.addField("โ›” Timeout Received", "โ•ฐโ”ˆโžค"+mentionableTarget+ " has received a timeout", false); - eb.addField("โฑ๏ธ Till", "โ•ฐโ”ˆโžค"+DurationFormatter.isoToLocalTimeCounter(newValue), false); - eb.addField("๐Ÿ“ Reason", "โ•ฐโ”ˆโžค"+(ale.getReason()!=null ? ale.getReason() : "No Reason Provided"), false); - } - - break; - - case "nick": - if(oldValue!=null && newValue==null) { // resetting to default nickname - eb.addField("๐Ÿท๏ธ Nickname Update", "โ•ฐโ”ˆโžค"+"Reset "+mentionableTarget+"'s name", false); - } else if(oldValue != null) { // changing from one nickname to another - eb.addField("๐Ÿท๏ธ Nickname Update", "โ•ฐโ”ˆโžค"+"Updated "+mentionableTarget+"'s name from "+oldValue+ " to "+ newValue, false); - } else if(newValue != null) { // changing from default nickname to a new nickname - eb.addField("๐Ÿท๏ธ Nickname Update", "โ•ฐโ”ˆโžค"+"Set "+mentionableTarget+"'s name as "+ newValue, false); - } - break; - - case "mute": - eb.addField("๐ŸŽ™๏ธ Is Muted", "โ•ฐโ”ˆโžคSet "+mentionableTarget+"'s Mute Status as "+ ((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); - break; - - case "deaf": - eb.addField("๐Ÿ”‡ Is Deafened", "โ•ฐโ”ˆโžคSet "+mentionableTarget+"'s Deafened Status as "+ ((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); - break; - - case "bypasses_verification": - eb.addField("๐Ÿ›ก๏ธ Bypass Verification", "โ•ฐโ”ˆโžคSet "+mentionableTarget+"'s verification bypass status as "+ ((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatBotAdd(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Bot Add Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - User target = ale.getJDA().getUserById(ale.getTargetIdLong()); - - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - String mentionableTarget = (target !=null ? target.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A bot was added"); - eb.setColor(Color.CYAN); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - eb.addField("๐Ÿค– Added a bot: ", "โ•ฐโ”ˆโžค"+mentionableTarget, false); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatIntegrationCreate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Integration Create Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following integration was created"); - eb.setColor(Color.PINK); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "type": - eb.addField("Integration Type","โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "name": - eb.addField("Integration Name", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatIntegrationDelete(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Integration Delete Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following integration was deleted"); - eb.setColor(Color.RED); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "type": - eb.addField("โš™๏ธ Integration Type", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - case "name": - eb.addField("๐Ÿท๏ธ Integration Name", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatChannelCreate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Channel Create Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - GuildChannel targetChannel = ale.getGuild().getGuildChannelById(ale.getTargetId()); - - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : ale.getTargetId()); - - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following channel was created"); - eb.setColor(Color.GREEN); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "user_limit": - eb.addField("๐Ÿ‘ฅ User Limit", "โ•ฐโ”ˆโžค"+TypeResolver.formatNumberOrUnlimited(newValue), false); - break; - - case "rate_limit_per_user": - eb.addField("๐Ÿ•“ Slowmode", "โ•ฐโ”ˆโžค"+DurationFormatter.formatSeconds(newValue), false); - break; - - case "type": - eb.addField("๐Ÿ—จ๏ธ Channel Type", "โ•ฐโ”ˆโžค"+TypeResolver.channelTypeResolver(newValue), false); - break; - - case "nsfw": - eb.addField("๐Ÿ”ž NSFW", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); - break; - - case "permission_overwrites", "flags": - break; - - case "name": - eb.addField("๐Ÿท๏ธ Channel Name", "โ•ฐโ”ˆโžค"+newValue, false); - // provide a channel link next to its name. This mentionable channel can be obtained via the target ID of ALE - eb.addField("๐Ÿ”— Channel Link", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, true); - break; - - case "bitrate": - eb.addField("๐ŸŽš๏ธ Voice Channel Bitrate", "โ•ฐโ”ˆโžค"+TypeResolver.voiceChannelBitrateResolver(newValue), false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatChannelUpdate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Channel Update Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - GuildChannel targetChannel = event.getGuild().getGuildChannelById(ale.getTargetId()); - - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following channel was updated"); - eb.setColor(Color.YELLOW); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - eb.addBlankField(true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "user_limit": - eb.addField("๐Ÿ‘ฅ Old User Limit", "โ•ฐโ”ˆโžค"+TypeResolver.formatNumberOrUnlimited(oldValue), true); - eb.addField("๐Ÿ‘ฅ New User Limit", "โ•ฐโ”ˆโžค"+TypeResolver.formatNumberOrUnlimited(newValue), true); - eb.addBlankField(true); - break; - - case "rate_limit_per_user": - eb.addField("๐Ÿ•“ Old Slowmode Value", "โ•ฐโ”ˆโžค"+DurationFormatter.formatSeconds(oldValue), true); - eb.addField("๐Ÿ•“ New Slowmode Value", "โ•ฐโ”ˆโžค"+DurationFormatter.formatSeconds(newValue), true); - eb.addBlankField(true); - break; - - case "nsfw": - eb.addField("๐Ÿ”ž Old NSFW Settings", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), true); - eb.addField("๐Ÿ”ž New NSFW Settings", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), true); - eb.addBlankField(true); - break; - - case "video_quality_mode": - eb.addField("๐ŸŽฅ Old Video Quality Mode", "โ•ฐโ”ˆโžค"+TypeResolver.videoQualityModeResolver(oldValue), true); - eb.addField("๐ŸŽฅ New Video Quality Mode", "โ•ฐโ”ˆโžค"+TypeResolver.videoQualityModeResolver(newValue), true); - eb.addBlankField(true); - break; - - case "name": - eb.addField("๐Ÿท๏ธ Old Channel Name", "โ•ฐโ”ˆโžค"+oldValue, true); - eb.addField("๐Ÿท๏ธ New Channel Name", "โ•ฐโ”ˆโžค"+newValue, true); - eb.addBlankField(true); - break; - - case "bitrate": - eb.addField("๐ŸŽš๏ธ Old Voice Channel Bitrate", "โ•ฐโ”ˆโžค"+TypeResolver.voiceChannelBitrateResolver(oldValue), true); - eb.addField("๐ŸŽš๏ธ New Voice Channel Bitrate", "โ•ฐโ”ˆโžค"+TypeResolver.voiceChannelBitrateResolver(newValue), true); - eb.addBlankField(true); - break; - - case "rtc_region": - eb.addField("๐ŸŒ Old Region", "โ•ฐโ”ˆโžค"+oldValue, true); - eb.addField("๐ŸŒ New Region", "โ•ฐโ”ˆโžค"+newValue, true); - eb.addBlankField(true); - break; - - case "topic": - eb.addField("๐Ÿ—’๏ธ Old Topic", "โ•ฐโ”ˆโžค"+oldValue, true); - eb.addField("๐Ÿ—’๏ธ New topic", "โ•ฐโ”ˆโžค"+newValue, true); - eb.addBlankField(true); - break; - - case "default_auto_archive_duration": - eb.addField("๐Ÿ•’ Old Hide After Inactivity Timer", "โ•ฐโ”ˆโžค"+DurationFormatter.formatMinutes(oldValue), true); - eb.addField("๐Ÿ•’ New Hide After Inactivity Timer", "โ•ฐโ”ˆโžค"+DurationFormatter.formatMinutes(newValue), true); - eb.addBlankField(true); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - // mention the channel that got updated, id can be exposed via ALE's TargetID - eb.addField("๐Ÿ’ฌ Target Channel", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatChannelDelete(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Channel Delete Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - GuildChannel targetChannel = ale.getJDA().getGuildChannelById(ale.getTargetIdLong()); - - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : ale.getTargetId()); // this will return only the ID cause the channel with the ID has been deleted - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following channel was deleted"); - eb.setColor(Color.RED); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "name": - eb.addField("๐Ÿท๏ธ Name", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - case "type": - eb.addField("๐Ÿ—จ๏ธ Type", "โ•ฐโ”ˆโžค"+TypeResolver.channelTypeResolver(oldValue), false); - break; - - case "user_limit", "rate_limit_per_user", "nsfw", "permission_overwrites", "video_quality_mode", "flags", "bitrate", "rtc_region": - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.addField("๐Ÿ†” Deleted Channel ID", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatChannelOverrideCreate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Channel Override Create"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - GuildChannel targetChannel = event.getGuild().getGuildChannelById(ale.getTargetId()); - - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following channel overrides were created"); - eb.setColor(Color.GREEN); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "type": - eb.addField("๐Ÿงฉ Override Type", "โ•ฐโ”ˆโžค"+TypeResolver.channelOverrideTypeResolver(newValue), false); - break; - - case "deny": - // the oldValue will return null if a new channel is over-riden for the first time but we're not concerned with oldValue - // the new value contains the list of denied permissions the moderator sets when creating overrides for the first time - eb.addField("Denied Permissions", PermissionResolver.getParsedPermissions(newValue, "โŒ"), false); - break; - - case "allow": - // the oldValue will return null if a new channel is over-riden for the first time but we're not concerned with oldValue - // the new value contains the list of allowed permissions the moderator sets when creating overrides for the first time - eb.addField("Allowed Permissions", PermissionResolver.getParsedPermissions(newValue, "โœ…"), false); - break; - - case "id": - // id exposes the member/role id which for which the channel permissions are over-riden - // only one member/role permissions can be over-riden at a time - Member mb = event.getGuild().getMemberById(String.valueOf(newValue)); - Role r = event.getGuild().getRoleById(String.valueOf(newValue)); - - String mentionableRoleOrMember = ""; - if(mb!=null) { - mentionableRoleOrMember = mb.getAsMention(); - } else if (r!=null) { - mentionableRoleOrMember = r.getAsMention(); - } - eb.addField("๐ŸŽญ Target", "โ•ฐโ”ˆโžค"+mentionableRoleOrMember, false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - // add the target channel whose permissions were over-riden - // exposed via ALE's TargetID - eb.addField("๐Ÿ—จ๏ธ Target Channel", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatChannelOverrideUpdate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Channel Override Update"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - GuildChannel targetChannel = event.getGuild().getGuildChannelById(ale.getTargetId()); - - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following channel overrides were updated"); - eb.setColor(Color.YELLOW); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - // changes does not expose the id and type keys in case of override updates - String overriddenId = ale.getOptionByName("id"); - String overriddenType = ale.getOptionByName("type"); - - String mentionableOverrideTarget = overriddenId; - if ("0".equals(overriddenType)) { - // Itโ€™s a role - Role role = event.getGuild().getRoleById(Objects.requireNonNull(overriddenId)); - if (role != null) { - mentionableOverrideTarget = role.getAsMention(); - } - } else if ("1".equals(overriddenType)) { - // Itโ€™s a member - Member member = event.getGuild().getMemberById(Objects.requireNonNull(overriddenId)); - if (member != null) { - mentionableOverrideTarget = member.getAsMention(); - } - } - - eb.addField("๐ŸŽญ Permissions Overridden For", "โ•ฐโ”ˆโžค"+mentionableOverrideTarget, false); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "deny": - String deniedPerms = PermissionResolver.getParsedPermissions(newValue, "โŒ"); - // if a channel is synchronized with it's category, the permission list will be blank and the StringBuilder will return a blank string - eb.addField("Denied Permissions", (deniedPerms.isBlank() ? "Permissions Synced With Category" : deniedPerms), false); - break; - - case "allow": - String allowedPerms = PermissionResolver.getParsedPermissions(newValue, "โœ…"); - // if a channel is synchronized with it's category, the permission list will be blank and the StringBuilder will return a blank string - eb.addField("Allowed Permissions", (allowedPerms.isBlank() ? "Permissions Synced With Category" : allowedPerms), false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - // add the target channel whose permissions were over-riden - // can be retrieved via ALE's TargetID - eb.addField("๐Ÿ—จ๏ธ Target Channel", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatChannelOverrideDelete(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Channel Override Delete"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - GuildChannel targetChannel = event.getGuild().getGuildChannelById(ale.getTargetId()); - - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following channel overrides were deleted"); - eb.setColor(Color.RED); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "type": - eb.addField("๐Ÿงฉ Override Type", "โ•ฐโ”ˆโžค"+TypeResolver.channelOverrideTypeResolver(oldValue), false); - break; - - case "deny": - // the newValue will return null if an over-ride is deleted but we're not concerned with newValue - // the oldValue returns the permissions the channel was previously denied - eb.addField("Previously Denied Permissions", PermissionResolver.getParsedPermissions(oldValue, "โŒ"), false); - break; - - case "allow": - // the newValue will return null if an over-ride is deleted but we're not concerned with newValue - // the oldValue returns the permissions the channel was previously allowed - eb.addField("Previously Allowed Permissions", PermissionResolver.getParsedPermissions(oldValue, "โœ…"), false); - break; - - case "id": - // id exposes the member/role id which for which the channel permissions are over-riden - Member mb = event.getGuild().getMemberById(String.valueOf(oldValue)); - Role r = event.getGuild().getRoleById(String.valueOf(oldValue)); - - String mentionableRoleOrMember = ""; - if(mb!=null) { - mentionableRoleOrMember = mb.getAsMention(); - } else if (r!=null) { - mentionableRoleOrMember = r.getAsMention(); - } - eb.addField("๐ŸŽญ Deleted Target", "โ•ฐโ”ˆโžค"+mentionableRoleOrMember, false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - // add the target channel whose permissions were over-riden - // can be retrieved via ALE's TargetID - eb.addField("๐Ÿ—จ๏ธ Target Channel", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatAutoModRuleCreate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | AutoMod Rule Create"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following AutoMod rule was created"); - eb.setColor(Color.GREEN); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "exempt_roles": - String roleIds = String.valueOf(newValue); - String cleanedRoleIds = StringUtils.strip(roleIds, "[]"); - String[] roleIdList = StringUtils.split(cleanedRoleIds, ","); - StringBuilder mentionableRoles = new StringBuilder(); - for(String roleId : roleIdList) { - Role r = ale.getGuild().getRoleById(roleId.strip()); - mentionableRoles.append(r!=null ? r.getAsMention() : roleId.strip()).append(", "); - } - eb.addField("โœ”๏ธ Exempt Roles: ", "โ•ฐโ”ˆโžค"+ mentionableRoles, false); - break; - - case "enabled": - eb.addField("โ” Enabled", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); - break; - - case "trigger_type": - eb.addField("โšก Trigger Type", "โ•ฐโ”ˆโžค"+TypeResolver.automodTriggerTypeResolver(newValue), false); - break; - - case "actions": - eb.addField("โšก Actions", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "exempt_channels": - String channelIds = String.valueOf(newValue); - String cleanedChannelIds = StringUtils.strip(channelIds, "[]"); - String[] channelIdList = StringUtils.split(cleanedChannelIds, ","); - StringBuilder mentionableChannels = new StringBuilder(); - for(String channelId : channelIdList) { - GuildChannel r = ale.getGuild().getGuildChannelById(channelId.strip()); - mentionableChannels.append(r!=null ? r.getAsMention() : channelId.strip()).append(", "); - } - eb.addField("โœ”๏ธ Exempt Channels: ", "โ•ฐโ”ˆโžค"+ mentionableChannels, false); - break; - - case "event_type": - eb.addField("๐Ÿงญ Event Type", "โ•ฐโ”ˆโžค"+TypeResolver.automodEventTypeResolver(newValue), false); - break; - - case "trigger_metadata": - eb.addField("๐Ÿ“Š Trigger Metadata", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "name": - eb.addField("๐Ÿท๏ธ AutoMod Rule Name ", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatAutoModRuleDelete(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | AutoMod Rule Delete"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following AutoMod rule was deleted"); - eb.setColor(Color.RED); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "exempt_roles", "enabled", "trigger_type", "actions", "exempt_channels", "event_type", "trigger_metadata": - break; - - case "name": - eb.addField("๐Ÿท๏ธ AutoMod Rule Name ", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatAutoModRuleUpdate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | AutoMod Rule Update"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following AutoMod rule was updated"); - eb.setColor(Color.YELLOW); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "exempt_roles": - String roleIds = String.valueOf(newValue); - String cleanedRoleIds = StringUtils.strip(roleIds, "[]"); - String[] roleIdList = StringUtils.split(cleanedRoleIds, ","); - StringBuilder mentionableRoles = new StringBuilder(); - for(String roleId : roleIdList) { - Role r = ale.getGuild().getRoleById(roleId.strip()); - mentionableRoles.append(r!=null ? r.getAsMention() : roleId.strip()).append(", "); - } - eb.addField("โœ”๏ธ New Exempt Roles: ", "โ•ฐโ”ˆโžค"+ mentionableRoles, false); - break; - - - case "actions": - eb.addField("โšก New Actions", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "exempt_channels": - String channelIds = String.valueOf(newValue); - String cleanedChannelIds = StringUtils.strip(channelIds, "[]"); - String[] channelIdList = StringUtils.split(cleanedChannelIds, ","); - StringBuilder mentionableChannels = new StringBuilder(); - for(String channelId : channelIdList) { - GuildChannel r = ale.getGuild().getGuildChannelById(channelId.strip()); - mentionableChannels.append(r!=null ? r.getAsMention() : channelId.strip()).append(", "); - } - eb.addField("โœ”๏ธ New Exempt Channels: ", "โ•ฐโ”ˆโžค"+ mentionableChannels, false); - break; - - - case "trigger_metadata": - eb.addField("๐Ÿ“Š New Trigger Metadata", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - // add name of the rule which got updated - AutoModRule rule = ale.getGuild().retrieveAutoModRuleById(ale.getTargetId()).complete(); - eb.addField("๐Ÿท๏ธ AutoMod Rule Name ", "โ•ฐโ”ˆโžค"+rule.getName(), false); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatEmojiCreate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Emoji Create Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following emoji was created"); - eb.setColor(Color.GREEN); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "name": - eb.addField("๐Ÿท๏ธ Emoji Name", "โ•ฐโ”ˆโžค"+newValue, false); - eb.addField("โ„น๏ธ Emoji", "โ•ฐโ”ˆโžค"+"<:"+newValue+":"+ale.getTargetId()+">", false); // ale's TargetID retrieves the ID of the created emoji - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatEmojiUpdate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Emoji Update Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following emoji was updated"); - eb.setColor(Color.YELLOW); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "name": - eb.addField("๐Ÿท๏ธ Emoji Name Updated", "โ•ฐโ”ˆโžค"+"From "+oldValue+" to "+newValue, false); - eb.addField("โ„น๏ธ Target Emoji", "โ•ฐโ”ˆโžค"+"<:"+newValue+":"+ale.getTargetId()+">", false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatEmojiDelete(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Emoji Delete Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following emoji was deleted"); - eb.setColor(Color.RED); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "name": - eb.addField("โ™ป๏ธ Deleted Emoji", "โ•ฐโ”ˆโžค "+":"+oldValue+":", false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.addField("โ™ป๏ธ Deleted Emoji ID", "โ•ฐโ”ˆโžค"+ale.getTargetId(), false); - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatStickerCreate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Sticker Create Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following sticker was created"); - eb.setColor(Color.GREEN); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "format_type", "type", "asset", "available", "guild_id": - break; - - case "id": - eb.addField("๐Ÿ†” Sticker ID", "โ•ฐโ”ˆโžค"+newValue, false); - GuildSticker sticker = event.getGuild().getStickerById(String.valueOf(newValue)); - eb.addField("๐Ÿ”— Sticker Link", "โ•ฐโ”ˆโžค"+(sticker!=null ? sticker.getIconUrl() : "N/A"), false); - break; - - case "tags": - eb.addField("โ„น๏ธ Related Emoji", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "description": - eb.addField("๐Ÿ“ Description", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "name": - eb.addField("๐Ÿท๏ธ Sticker Name", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatStickerDelete(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Sticker Delete Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following sticker was deleted"); - eb.setColor(Color.RED); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "format_type", "type", "asset", "available", "guild_id": - break; - - case "id": - eb.addField("๐Ÿ†” Sticker ID", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - case "tags": - eb.addField("โ„น๏ธ Related Emoji", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - case "description": - eb.addField("๐Ÿ“ Description", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - case "name": - eb.addField("๐Ÿท๏ธ Sticker Name", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatStickerUpdate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Sticker Update Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - GuildSticker targetSticker = event.getGuild().getStickerById(ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following sticker was updated"); - eb.setColor(Color.YELLOW); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - eb.addField("๐Ÿท๏ธ Target Sticker Name", Objects.requireNonNull(targetSticker).getName(), false); - eb.addField("๐Ÿ”— Target Sticker Url", targetSticker.getIconUrl(), false); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "format_type", "type", "asset", "available", "guild_id", "id": - break; - - case "tags": - eb.addField("โ„น๏ธ Related Emoji", "โ•ฐโ”ˆโžค"+"from "+oldValue+" to "+newValue, false); - break; - - case "description": - eb.addField("๐Ÿ“ Description", "โ•ฐโ”ˆโžค"+"from `"+oldValue+"` to `"+newValue+"`", false); - break; - - case "name": - eb.addField("๐Ÿท๏ธ Sticker Name", "โ•ฐโ”ˆโžค"+"from `"+oldValue+"` to `"+newValue+"`", false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatGuildUpdate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Guild Update Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following guild updates were recorded"); - eb.setColor(Color.MAGENTA); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "description": - eb.addField("Description Change", "from `"+oldValue+"` to `"+newValue+"`", false); - break; - - case "icon_hash": - eb.addField("Icon Hash Change", "from `"+oldValue+"` to `"+newValue+"`", false); - break; - - case "name": - eb.addField("Guild Name Change", "from `"+oldValue+"` to `"+newValue+"`", false); - break; - - case "afk_channel_id": - eb.addField("AFK Channel Changed To", "`"+newValue+"`", false); - break; - - case "default_message_notifications": - eb.addField("Default Message Notifications Update", "`"+newValue+"`", false); - break; - - case "afk_timeout": - eb.addField("AFK Channel Timeout Change", "`"+newValue+"s`", false); - break; - - case "system_channel_id": - eb.addField("Community Updates Channel Changed To", "`"+newValue+"`", false); - break; - - case "widget_enabled": - eb.addField("Widget Enabled", "`"+newValue+"`", false); - break; - - case "widget_channel_id": - eb.addField("Widget Channel Changed To", "`"+newValue+"`", false); - break; - - case "premium_progress_bar_enabled": - eb.addField("Server Boost Progress Bar Enabled", "`"+newValue+"`", false); - break; - - case "mfa_level": - eb.addField("MFA Requirement", "`"+newValue+"`", false); - break; - - case "verification_level": - eb.addField("Verification Level", "`"+TypeResolver.guildVerificationLevelResolver(newValue)+"`", false); - break; - - case "owner_id": - User oldOwner = ale.getJDA().getUserById(String.valueOf(oldValue)); - User newOwner = ale.getJDA().getUserById(String.valueOf(newValue)); - String mentionableOldOwner = (oldOwner!=null ? oldOwner.getAsMention() : String.valueOf(oldValue)); - String mentionableNewOwner = (newOwner!=null ? newOwner.getAsMention() : String.valueOf(newValue)); - eb.addField("Ownership Change", "from "+mentionableOldOwner+" to "+mentionableNewOwner, false); - break; - - case "public_updates_channel_id": - eb.addField("Announcements Channel Changed To", "`"+newValue+"`", false); - break; - - case "rules_channel_id": - eb.addField("Rules Channel Changed To", "`"+newValue+"`", false); - break; - - - case "system_channel_flags": - eb.addField("System Channel Flags", GuildSystemChannelFlagResolver.getParsedFlags(newValue), false); - break; - - case "explicit_content_filter": - eb.addField("Explicit Content Filter", TypeResolver.explicitFilterTypeResolver(newValue), false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatMemberRoleUpdate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Member Role Update"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - User target = ale.getJDA().getUserById(ale.getTargetIdLong()); - - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - String mentionableTarget = (target !=null ? target.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following member role was updated"); - eb.setThumbnail(Objects.requireNonNull(event.getGuild().getMemberById(ale.getTargetIdLong())).getEffectiveAvatarUrl()); - eb.setColor(Color.CYAN); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "$add": - eb.setColor(Color.GREEN); - eb.addField("Target Member", "โ•ฐโ”ˆโžค"+mentionableTarget, false); - Map addedRoleNameAndId = MemberRoleUpdateParser.parseRoleUpdate(newValue); - eb.addField("Role Added", "โœ… "+addedRoleNameAndId.getOrDefault("name", "`ERROR: Not Found`"), false); - eb.addField("Added Role ID", "โ•ฐโ”ˆโžค"+addedRoleNameAndId.getOrDefault("id", "`ERROR: Not Found`"), false); - break; - - case "$remove": - eb.setColor(Color.RED); - eb.addField("Target Member", "โ•ฐโ”ˆโžค"+mentionableTarget, false); - Map removedRoleNameAndId = MemberRoleUpdateParser.parseRoleUpdate(newValue); - eb.addField("Role Removed", "โŒ "+removedRoleNameAndId.getOrDefault("name", "`ERROR: Not Found`"), false); - eb.addField("Removed Role ID", "โ•ฐโ”ˆโžค"+removedRoleNameAndId.getOrDefault("id", "`ERROR: Not Found`"), false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatRoleCreate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Role Create Event"); - - User executor = ale.getJDA().getUserById(ale.getUserId()); - Role targetRole = ale.getJDA().getRoleById(ale.getTargetId()); - - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - String mentionableTargetRole = (targetRole !=null ? targetRole.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\n The following role was created"); - eb.setColor(Color.GREEN); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - eb.addField("Target Role", mentionableTargetRole, false); - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "name": - eb.addField("๐Ÿท๏ธ Role Name", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - /* - * discord for some reason shows the following to be default/null even - * when you set them during the creation of the role itself - * and delegates them to ROLE_UPDATE event - */ - case "colors", "hoist", "color", "permissions", "mentionable": - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatRoleUpdate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Role Update Event"); - - User executor = ale.getJDA().getUserById(ale.getUserId()); - Role targetRole = ale.getJDA().getRoleById(ale.getTargetId()); - - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - String mentionableTargetRole = (targetRole !=null ? targetRole.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following member role was updated"); - eb.setColor(Color.YELLOW); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - eb.addField("Target Role", mentionableTargetRole, false); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "name": - eb.addField("๐Ÿท๏ธ Old Role Name", "โ•ฐโ”ˆโžค"+oldValue, true); - eb.addField("๐Ÿท๏ธ New Role Name", "โ•ฐโ”ˆโžค"+newValue, true); - eb.addBlankField(true); - break; - - case "hoist": - eb.addField("๐Ÿ“‚ Old Display Seperately", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), true); - eb.addField("๐Ÿ“‚ New Display Seperately", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), true); - eb.addBlankField(true); - break; - - case "color": - eb.addField("๐ŸŽจ Old Color", "โ•ฐโ”ˆโžค"+ColorFormatter.formatToHex(oldValue), true); - eb.addField("๐ŸŽจ New Color", "โ•ฐโ”ˆโžค"+ColorFormatter.formatToHex(newValue), true); - eb.addBlankField(true); - break; - - case "permissions": - eb.addField("Old Role Permissions", PermissionResolver.getParsedPermissions(oldValue, "โœ…"), true); - eb.addField("New Role Permissions", PermissionResolver.getParsedPermissions(newValue, "โœ…"), true); - eb.addBlankField(true); - break; - - case "mentionable": - eb.addField("๐Ÿ”— Old Mentionable", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), true); - eb.addField("๐Ÿ”— New Mentionable", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), true); - eb.addBlankField(true); - break; - - case "colors": - eb.addField("๐ŸŒˆ Old Gradient Color System", "โ•ฐโ”ˆโžค"+ColorFormatter.formatGradientColorSystemToHex(oldValue), true); - eb.addField("๐ŸŒˆ New Gradient Color System", "โ•ฐโ”ˆโžค"+ColorFormatter.formatGradientColorSystemToHex(newValue), true); - eb.addBlankField(true); - break; - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatRoleDelete(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Role Delete Event"); - - User executor = ale.getJDA().getUserById(ale.getUserId()); - Role targetRole = ale.getJDA().getRoleById(ale.getTargetId()); - - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - String mentionableTargetRole = (targetRole !=null ? targetRole.getAsMention() : ale.getTargetId()); // this will always return the ID only - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following role was deleted"); - eb.setColor(Color.RED); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - - case "name": - eb.addField("๐Ÿท๏ธ Role Name", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - case "hoist": - eb.addField("๐Ÿ“‚ Display Seperately", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), false); - break; - - case "color": - eb.addField("๐ŸŽจ Color", "โ•ฐโ”ˆโžค"+ColorFormatter.formatToHex(oldValue), false); - break; - - case "permissions": - eb.addField("Role Permissions", PermissionResolver.getParsedPermissions(oldValue, "โœ…"), false); - break; - - case "mentionable": - eb.addField("๐Ÿ”— Mentionable", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), false); - break; - - case "colors": - eb.addField("๐ŸŒˆ Gradient Color System", "โ•ฐโ”ˆโžค"+ColorFormatter.formatGradientColorSystemToHex(oldValue), false); - break; - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - } - - eb.addField("๐Ÿ†” Deleted Role ID", "โ•ฐโ”ˆโžค"+mentionableTargetRole, false); - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - // the audit log does not expose much information regarding member vc move and kick events - // therefore GuildVoiceListener has been created to know about channels the target has been moved or kicked from - private void formatMemberVoiceKick(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Member Voice Kick Event"); - - User executor = ale.getJDA().getUserById(ale.getUserId()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A voice kick event was detected"); - eb.setColor(Color.RED); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatMemberVoiceMove(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Member Voice Move Event"); - - User executor = ale.getJDA().getUserById(ale.getUserId()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A voice move event was detected"); - eb.setColor(Color.YELLOW); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatVoiceChannelStatusUpdate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Voice Channel Status Update"); - - User executor = ale.getJDA().getUserById(ale.getUserId()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - GuildChannel targetChannel = ale.getJDA().getGuildChannelById(ale.getTargetId()); - String mentionableTargetChannel = (targetChannel != null ? targetChannel.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following voice channel's status was updated: "+mentionableTargetChannel); - eb.setColor(Color.YELLOW); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatVoiceChannelStatusDelete(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Voice Channel Status Delete"); - - User executor = ale.getJDA().getUserById(ale.getUserId()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - GuildChannel targetChannel = ale.getJDA().getGuildChannelById(ale.getTargetId()); - String mentionableTargetChannel = (targetChannel != null ? targetChannel.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following voice channel's status was deleted: "+mentionableTargetChannel); - eb.setColor(Color.ORANGE); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatAutoModFlagToChannel(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Automod Event"); - - User targetUser = ale.getJDA().getUserById(ale.getTargetId()); - String mentionableTargetUser = (targetUser != null ? targetUser.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ›ˆ Automod has flagged a message sent by: "+mentionableTargetUser); - eb.setColor(Color.YELLOW); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatAutoModMemberTimeout (GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Automod Event"); - - User targetUser = ale.getJDA().getUserById(ale.getTargetId()); - String mentionableTargetUser = (targetUser != null ? targetUser.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ›ˆ Automod has timed out"+mentionableTargetUser+" for a defined rule violation"); - eb.setColor(Color.MAGENTA); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatAutoModRuleBlockMessage (GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Automod Event"); - - User targetUser = ale.getJDA().getUserById(ale.getTargetId()); - String mentionableTargetUser = (targetUser != null ? targetUser.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ›ˆ Automod has deleted a message sent by: "+mentionableTargetUser); - eb.setColor(Color.ORANGE); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatMessagePin(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Message Pin Event"); - - User executor = ale.getJDA().getUserById(ale.getTargetId()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **A message from **: "+mentionableExecutor+" was pinned"); - eb.setColor(Color.PINK); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - // these audit log events don't expose anything other than the executor of the event - private void formatMessageUnpin(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Message Unpin Event"); - - User executor = ale.getJDA().getUserById(ale.getTargetId()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **A message from **: "+mentionableExecutor+" un-pinned"); - eb.setColor(Color.MAGENTA); - - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatStageInstanceCreate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Stage Instance Create Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A stage instance was created"); - eb.setColor(Color.GREEN); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "topic": - eb.addField("๐Ÿ“ Stage Topic", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "privacy_level": - eb.addField("๐ŸŒ Stage Privacy", "โ•ฐโ”ˆโžค"+newValue, false); - eb.addField("Stage Privacy Result Inference", "-# A value of 1 means PUBLIC (deprecated) and 2 means GUILD_ONLY", false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatStageInstanceUpdate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Stage Instance Update Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A stage instance was updated"); - eb.setColor(Color.YELLOW); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "topic": - eb.addField("๐Ÿ“ OldStage Topic", "โ•ฐโ”ˆโžค"+oldValue, false); - eb.addField("๐Ÿ“ New Stage Topic", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "privacy_level": - eb.addField("๐ŸŒ Old Stage Privacy","โ•ฐโ”ˆโžค"+oldValue, false); - eb.addField("๐ŸŒ New Stage Privacy", "โ•ฐโ”ˆโžค"+newValue, false); - eb.addField("Stage Privacy Result Inference", "-# A value of 1 means PUBLIC (deprecated) and 2 means GUILD_ONLY", false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatStageInstanceDelete(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Stage Instance Delete Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A stage instance was deleted"); - eb.setColor(Color.RED); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "topic": - eb.addField("๐Ÿ“ Deleted Stage Topic", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - case "privacy_level": - eb.addField("๐ŸŒ Deleted Stage Privacy", "โ•ฐโ”ˆโžค"+oldValue, false); - eb.addField("Stage Privacy Result Inference", "-# A value of 1 means PUBLIC (deprecated) and 2 means GUILD_ONLY", false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatScheduledEventCreate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Scheduled Event Create Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A scheduled event was created"); - eb.setColor(Color.GREEN); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "entity_type": - eb.addField("๐Ÿ“‚ Event Type", "โ•ฐโ”ˆโžค"+TypeResolver.scheduleEventTypeResolver(newValue), false); - break; - - case "privacy_level", "image_hash": - break; - - case "description": - eb.addField("๐Ÿ“ Event Description", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "status": - eb.addField("๐Ÿ“Š Event Status", "โ•ฐโ”ˆโžค"+TypeResolver.scheduleEventStatusTypeResolver(newValue), false); - break; - - case "location": - eb.addField("๐Ÿ“ Event Location", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "name": - eb.addField("๐Ÿท๏ธ Event Name", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "channel_id": - GuildChannel eventChannel = event.getGuild().getGuildChannelById(String.valueOf(newValue)); - eb.addField("๐Ÿ’ฌ Event Channel", "โ•ฐโ”ˆโžค"+(eventChannel!=null ? eventChannel.getAsMention() : String.valueOf(newValue)), false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatScheduledEventUpdate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Scheduled Event Update Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - ScheduledEvent targetEvent = event.getGuild().getScheduledEventById(ale.getTargetId()); - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ The following scheduled event was updated: "+ Objects.requireNonNull(targetEvent).getName()); - eb.setColor(Color.YELLOW); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "entity_type": - eb.addField("๐Ÿ“‚ Old Event Type", "โ•ฐโ”ˆโžค"+TypeResolver.scheduleEventTypeResolver(oldValue), false); - eb.addField("๐Ÿ“‚ New Event Type", "โ•ฐโ”ˆโžค"+TypeResolver.scheduleEventTypeResolver(newValue), false); - break; - - case "privacy_level", "image_hash": - break; - - case "description": - eb.addField("๐Ÿ“ Old Event Description", "โ•ฐโ”ˆโžค"+oldValue, false); - eb.addField("๐Ÿ“ New Event Description", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "status": - eb.addField("๐Ÿ“Š Old Event Status", "โ•ฐโ”ˆโžค"+TypeResolver.scheduleEventStatusTypeResolver(oldValue), false); - eb.addField("๐Ÿ“Š New Event Status", "โ•ฐโ”ˆโžค"+TypeResolver.scheduleEventStatusTypeResolver(newValue), false); - break; - - case "location": - eb.addField("๐Ÿ“ Event Location", "โ•ฐโ”ˆโžค"+oldValue, false); - eb.addField("๐Ÿ“ Event Location", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "name": - eb.addField("๐Ÿท๏ธ Old Event Name", "โ•ฐโ”ˆโžค"+oldValue, false); - eb.addField("๐Ÿท๏ธ New Event Name","โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "channel_id": - GuildChannel eventChannel = event.getGuild().getGuildChannelById(String.valueOf(oldValue)); - eb.addField("๐Ÿ’ฌ Old Event Channel", "โ•ฐโ”ˆโžค"+(eventChannel!=null ? eventChannel.getAsMention() : String.valueOf(oldValue)), false); - eventChannel = event.getGuild().getGuildChannelById(String.valueOf(newValue)); - eb.addField("๐Ÿ’ฌ New Event Channel", "โ•ฐโ”ˆโžค"+(eventChannel!=null ? eventChannel.getAsMention() : String.valueOf(newValue)), false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatScheduledEventDelete(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Scheduled Event Delete Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A scheduled event has been deleted"); - eb.setColor(Color.RED); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "entity_type": - eb.addField("๐Ÿ“‚ Event Type", "โ•ฐโ”ˆโžค"+TypeResolver.scheduleEventTypeResolver(oldValue), false); - break; - - case "privacy_level", "image_hash": - break; - - case "description": - eb.addField("๐Ÿ“ Event Description", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "status": - eb.addField("๐Ÿ“Š Event Status", "โ•ฐโ”ˆโžค"+TypeResolver.scheduleEventStatusTypeResolver(oldValue), false); - break; - - case "location": - eb.addField("๐Ÿ“ Event Location", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - case "name": - eb.addField("๐Ÿท๏ธ Event Name", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - case "channel_id": - GuildChannel eventChannel = event.getGuild().getGuildChannelById(String.valueOf(oldValue)); - eb.addField("๐Ÿ’ฌ Event Channel", "โ•ฐโ”ˆโžค"+(eventChannel!=null ? eventChannel.getAsMention() : String.valueOf(oldValue)), false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - - } - - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatThreadCreate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Thread Create Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - ThreadChannel targetThread = event.getGuild().getThreadChannelById(ale.getTargetId()); - String mentionableTargetThread = (targetThread !=null ? targetThread.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A thread has been created"); - eb.setColor(Color.GREEN); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "locked": - eb.addField("๐Ÿ”’ Locked", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); - break; - - case "auto_archive_duration": - eb.addField("๐Ÿ•’ Auto Archive Duration", "โ•ฐโ”ˆโžค"+DurationFormatter.formatMinutes(newValue), false); - break; - - case "rate_limit_per_user": - eb.addField("๐ŸŒ Slowmode Limit", "โ•ฐโ”ˆโžค"+DurationFormatter.formatSeconds(newValue), false); - break; - - case "type": - eb.addField("๐Ÿ“ Thread Type", "โ•ฐโ”ˆโžค"+TypeResolver.channelTypeResolver(newValue), false); - break; - - case "archived": - eb.addField("๐Ÿ—„๏ธ Archived", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), false); - break; - - case "flags": - eb.addField("๐Ÿšฉ Flags", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "name": - eb.addField("๐Ÿท๏ธ Thread Name", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - - } - eb.addField("๐Ÿงต Target Thread", "โ•ฐโ”ˆโžค"+mentionableTargetThread, false); - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatThreadUpdate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Thread Update Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - ThreadChannel targetThread = event.getGuild().getThreadChannelById(ale.getTargetId()); - String mentionableTargetThread = (targetThread !=null ? targetThread.getAsMention() : ale.getTargetId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A thread has been updated"); - eb.setColor(Color.YELLOW); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - eb.addBlankField(true); - - for(Entry changes: ale.getChanges().entrySet()) { - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "locked": - eb.addField("๐Ÿ”’ Old Lock Status", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), true); - eb.addField("๐Ÿ”’ New Lock Status", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), true); - eb.addBlankField(true); - break; - - case "auto_archive_duration": - eb.addField("๐Ÿ•’ Old Auto Archive Duration", "โ•ฐโ”ˆโžค"+DurationFormatter.formatMinutes(oldValue), true); - eb.addField("๐Ÿ•’ New Auto Archive Duration", "โ•ฐโ”ˆโžค"+DurationFormatter.formatMinutes(newValue), true); - eb.addBlankField(true); - break; - - case "rate_limit_per_user": - eb.addField("๐ŸŒ Old Slowmode Limit", "โ•ฐโ”ˆโžค"+DurationFormatter.formatSeconds(oldValue), true); - eb.addField("๐ŸŒ New Slowmode Limit", "โ•ฐโ”ˆโžค"+DurationFormatter.formatSeconds(newValue), true); - eb.addBlankField(true); - break; - - case "type": - eb.addField("๐Ÿ“ Old Thread Type", "โ•ฐโ”ˆโžค"+TypeResolver.channelTypeResolver(oldValue), true); - eb.addField("๐Ÿ“ New Thread Type", "โ•ฐโ”ˆโžค"+TypeResolver.channelTypeResolver(newValue), true); - eb.addBlankField(true); - break; - - case "archived": - eb.addField("๐Ÿ—„๏ธ Old Archive Status", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), true); - eb.addField("๐Ÿ—„๏ธ New Archive Status", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(newValue)) ? "โœ…" : "โŒ"), true); - eb.addBlankField(true); - break; - - case "flags": - eb.addField("๐Ÿšฉ Old Flag Value", "โ•ฐโ”ˆโžค"+oldValue, true); - eb.addField("๐Ÿšฉ New Flag Value", "โ•ฐโ”ˆโžค"+newValue, true); - eb.addBlankField(true); - break; - - case "name": - eb.addField("๐Ÿท๏ธ Old Thread Name", "โ•ฐโ”ˆโžค"+oldValue, true); - eb.addField("๐Ÿท๏ธ New Thread Name", "โ•ฐโ”ˆโžค"+newValue, true); - eb.addBlankField(true); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - - } - eb.addField("๐Ÿงต Target Thread", "โ•ฐโ”ˆโžค"+mentionableTargetThread, false); - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatThreadDelete(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Thread Delete Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A thread has been deleted"); - eb.setColor(Color.RED); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "๐Ÿ”’ locked": - eb.addField("Locked", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), false); - break; - - case "๐Ÿ•’ auto_archive_duration": - eb.addField("Auto Archive Duration", "โ•ฐโ”ˆโžค"+DurationFormatter.formatMinutes(oldValue), false); - break; - - case "rate_limit_per_user": - eb.addField("๐ŸŒ Slowmode Limit", "โ•ฐโ”ˆโžค"+DurationFormatter.formatSeconds(oldValue), false); - break; - - case "type": - eb.addField("๐Ÿ“ Thread Type", "โ•ฐโ”ˆโžค"+TypeResolver.channelTypeResolver(oldValue), false); - break; - - case "archived": - eb.addField("๐Ÿ—„๏ธ Archived", "โ•ฐโ”ˆโžค"+((Boolean.TRUE.equals(oldValue)) ? "โœ…" : "โŒ"), false); - break; - - case "flags": - eb.addField("๐Ÿšฉ Flags", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - case "name": - eb.addField("๐Ÿท๏ธ Thread Name", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - - } - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatWebhookCreate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Webhook Create Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A webhook has been created"); - eb.setColor(Color.GREEN); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "type": - eb.addField("Webhook Type", "โ•ฐโ”ˆโžค"+newValue, false); - eb.addField("Webhook Type Explanation", "-# 0 for PING; 1 for Event", false); - break; - - case "avatar_Hash": - eb.addField("Avatar Hash", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - case "channel_id": - GuildChannel targetChannel = event.getGuild().getGuildChannelById(String.valueOf(newValue)); - String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : String.valueOf(newValue)); - eb.addField("Channel", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); - break; - - case "name": - eb.addField("Webhook Name", "โ•ฐโ”ˆโžค"+newValue, false); - break; - - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - - } - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatWebhookUpdate(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Webhook Update Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A webhook has been updated"); - eb.setColor(Color.YELLOW); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "type": - eb.addField("๐Ÿ“ก Webhook Type", "โ•ฐโ”ˆโžค " + newValue, false); - eb.addField("Webhook Type Legend", "-# 0 for PING; 1 for Event", false); - break; - - case "avatar_hash": - eb.addField("๐Ÿ–ผ๏ธ Avatar Hash", "โ•ฐโ”ˆโžค"+"from `"+oldValue+"` to `"+newValue+"`", false); - break; - - case "channel_id": - GuildChannel targetChannel = event.getGuild().getGuildChannelById(String.valueOf(newValue)); - String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : String.valueOf(newValue)); - eb.addField("๐Ÿ’ฌ New Channel", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); - break; - - case "name": - eb.addField("๐Ÿท๏ธ Webhook Name", "โ•ฐโ”ˆโžค"+"from "+oldValue+" to "+newValue, false); - break; - - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - - } - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } - - private void formatWebhookRemove(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) { - - EmbedBuilder eb = new EmbedBuilder(); - eb.setTitle("Audit Log Entry | Webhook Remove Event"); - - User executor = ale.getJDA().getUserById(ale.getUserIdLong()); - String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId()); - - eb.setDescription("๐Ÿ‘ค **By**: "+mentionableExecutor+"\nโ„น๏ธ A webhook has been removed"); - eb.setColor(Color.RED); - eb.addField("Action Type", String.valueOf(ale.getType()), true); - eb.addField("Target Type", String.valueOf(ale.getTargetType()), true); - - for(Entry changes: ale.getChanges().entrySet()) { - String change = changes.getKey(); - Object oldValue = changes.getValue().getOldValue(); - Object newValue = changes.getValue().getNewValue(); - - switch(change) { - case "type": - eb.addField("๐Ÿ“ก Webhook Type", "โ•ฐโ”ˆโžค"+oldValue, false); - eb.addField("Webhook Type Legend", "-# 0 for PING; 1 for Event", false); - break; - - case "avatar_hash": - eb.addField("๐Ÿ–ผ๏ธ Avatar Hash", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - case "channel_id": - GuildChannel targetChannel = event.getGuild().getGuildChannelById(String.valueOf(oldValue)); - String mentionableTargetChannel = (targetChannel !=null ? targetChannel.getAsMention() : String.valueOf(oldValue)); - eb.addField("๐Ÿ’ฌ Channel", "โ•ฐโ”ˆโžค"+mentionableTargetChannel, false); - break; - - case "name": - eb.addField("๐Ÿท๏ธ Webhook Name", "โ•ฐโ”ˆโžค"+oldValue, false); - break; - - - default: - eb.addField(change, "from "+oldValue+" to "+newValue, false); - } - - } - eb.setFooter("Audit Log Entry ID: "+ale.getId()); - eb.setTimestamp(ale.getTimeCreated()); - - MessageEmbed mb = eb.build(); - Objects.requireNonNull(event.getGuild().getTextChannelById(channelIdToSendTo)).sendMessageEmbeds(mb).queue(); - } -} diff --git a/src/main/java/org/papertrail/listeners/loglisteners/package-info.java b/src/main/java/org/papertrail/listeners/loglisteners/package-info.java deleted file mode 100644 index 209ac0be..00000000 --- a/src/main/java/org/papertrail/listeners/loglisteners/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * This package contains Classes and Methods that detect and parse audit and message log activities - */ -package org.papertrail.listeners.loglisteners; \ No newline at end of file diff --git a/src/main/java/org/papertrail/listeners/memberlisteners/package-info.java b/src/main/java/org/papertrail/listeners/memberlisteners/package-info.java deleted file mode 100644 index f3d22771..00000000 --- a/src/main/java/org/papertrail/listeners/memberlisteners/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -/* - * This package contains Classes and Members that track Guild Member Activities - * - */ -package org.papertrail.listeners.memberlisteners; \ No newline at end of file diff --git a/src/main/java/org/papertrail/listeners/loglisteners/MessageLogListener.java b/src/main/java/org/papertrail/listeners/message/event/MessageLogListener.java similarity index 92% rename from src/main/java/org/papertrail/listeners/loglisteners/MessageLogListener.java rename to src/main/java/org/papertrail/listeners/message/event/MessageLogListener.java index dd91339f..fdb26fad 100644 --- a/src/main/java/org/papertrail/listeners/loglisteners/MessageLogListener.java +++ b/src/main/java/org/papertrail/listeners/message/event/MessageLogListener.java @@ -1,19 +1,9 @@ -package org.papertrail.listeners.loglisteners; - -import java.awt.Color; -import java.time.Instant; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicLong; -import java.util.concurrent.locks.Lock; +package org.papertrail.listeners.message.event; import com.google.common.base.Splitter; import com.google.common.util.concurrent.Striped; import io.vavr.control.Either; -import org.jetbrains.annotations.NotNull; -import org.jspecify.annotations.NonNull; - +import lombok.extern.slf4j.Slf4j; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.MessageEmbed; import net.dv8tion.jda.api.entities.User; @@ -21,14 +11,24 @@ import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.MessageUpdateEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; -import org.papertrail.sdk.client.MessageContentLogClient; -import org.papertrail.sdk.client.MessageLogClient; -import org.papertrail.sdk.model.ErrorObject; -import org.papertrail.sdk.model.MessageContentObject; -import org.papertrail.sdk.model.MessageLogObject; -import org.papertrail.utilities.MessageEncryption; -import org.tinylog.Logger; +import org.jetbrains.annotations.NotNull; +import org.jspecify.annotations.NonNull; +import org.papertrail.commons.sdk.client.MessageContentLogClient; +import org.papertrail.commons.sdk.client.MessageLogClient; +import org.papertrail.commons.sdk.model.ErrorObject; +import org.papertrail.commons.sdk.model.MessageContentObject; +import org.papertrail.commons.sdk.model.MessageLogObject; +import org.papertrail.commons.utilities.MessageEncryption; + +import java.awt.Color; +import java.time.Instant; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.Executor; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.locks.Lock; +@Slf4j public class MessageLogListener extends ListenerAdapter { private final Executor vThreadPool; @@ -42,12 +42,12 @@ public MessageLogListener(Executor vThreadPool) { private void withMessageLock (String messageId, Runnable task) { Lock lock = messageLocks.get(messageId); lock.lock(); - Logger.debug("Lock acquired for message id: {} . Active lock count: {}", messageId, activeLockCount.incrementAndGet()); + log.debug("Lock acquired for message id: {} . Active lock count: {}", messageId, activeLockCount.incrementAndGet()); try{ task.run(); } finally { lock.unlock(); - Logger.debug("Lock released for message id: {} . Active lock count: {}", messageId, activeLockCount.decrementAndGet()); + log.debug("Lock released for message id: {} . Active lock count: {}", messageId, activeLockCount.decrementAndGet()); } } diff --git a/src/main/java/org/papertrail/listeners/commandlisteners/MessageLogSetupCommandListener.java b/src/main/java/org/papertrail/listeners/message/setup/MessageLogSetupCommandListener.java similarity index 96% rename from src/main/java/org/papertrail/listeners/commandlisteners/MessageLogSetupCommandListener.java rename to src/main/java/org/papertrail/listeners/message/setup/MessageLogSetupCommandListener.java index 484f1fd7..79f2adf8 100644 --- a/src/main/java/org/papertrail/listeners/commandlisteners/MessageLogSetupCommandListener.java +++ b/src/main/java/org/papertrail/listeners/message/setup/MessageLogSetupCommandListener.java @@ -1,12 +1,12 @@ -package org.papertrail.listeners.commandlisteners; +package org.papertrail.listeners.message.setup; import java.awt.Color; import java.util.Objects; import io.vavr.control.Either; -import org.papertrail.sdk.model.ErrorObject; -import org.papertrail.sdk.client.MessageLogClient; -import org.papertrail.sdk.model.MessageLogObject; +import org.papertrail.commons.sdk.model.ErrorObject; +import org.papertrail.commons.sdk.client.MessageLogClient; +import org.papertrail.commons.sdk.model.MessageLogObject; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.Permission; diff --git a/src/main/java/org/papertrail/main/ActivityUpdateListener.java b/src/main/java/org/papertrail/listeners/misc/ActivityUpdateListener.java similarity index 96% rename from src/main/java/org/papertrail/main/ActivityUpdateListener.java rename to src/main/java/org/papertrail/listeners/misc/ActivityUpdateListener.java index a27252ce..b6e15878 100644 --- a/src/main/java/org/papertrail/main/ActivityUpdateListener.java +++ b/src/main/java/org/papertrail/listeners/misc/ActivityUpdateListener.java @@ -1,4 +1,4 @@ -package org.papertrail.main; +package org.papertrail.listeners.misc; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/org/papertrail/listeners/commandlisteners/BotSetupCommandListener.java b/src/main/java/org/papertrail/listeners/misc/BotSetupInstructionCommandListener.java similarity index 85% rename from src/main/java/org/papertrail/listeners/commandlisteners/BotSetupCommandListener.java rename to src/main/java/org/papertrail/listeners/misc/BotSetupInstructionCommandListener.java index 38af2756..8a7124d7 100644 --- a/src/main/java/org/papertrail/listeners/commandlisteners/BotSetupCommandListener.java +++ b/src/main/java/org/papertrail/listeners/misc/BotSetupInstructionCommandListener.java @@ -1,16 +1,16 @@ -package org.papertrail.listeners.commandlisteners; +package org.papertrail.listeners.misc; import java.awt.Color; import java.time.Instant; -import org.papertrail.version.ProjectInfo; +import org.papertrail.commons.version.ProjectInfo; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.MessageEmbed; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; -public class BotSetupCommandListener extends ListenerAdapter { +public class BotSetupInstructionCommandListener extends ListenerAdapter { @Override public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { @@ -54,12 +54,6 @@ public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { "- Use `/stats` to **get useful server information** like member count, channel count, and more.", false); - eb.addField("8๏ธโƒฃ Bot Information", - "- Use `/about` to **view bot details**, including author info and version.", - false); - - eb.addField("๐Ÿ’ก Permission Check","- Use `/permcheck` to **see if the bot has required permissions** in the **server** and in the **current channel**.",false); - eb.addField("๐Ÿ“ฌ Need help?", "Create an issue on [GitHub](" + ProjectInfo.PROJECT_ISSUE_LINK+")", false); eb.setFooter(ProjectInfo.APPNAME+" "+ProjectInfo.VERSION); eb.setTimestamp(Instant.now()); diff --git a/src/main/java/org/papertrail/cleanup/BotKickListener.java b/src/main/java/org/papertrail/listeners/misc/SelfKickListener.java similarity index 73% rename from src/main/java/org/papertrail/cleanup/BotKickListener.java rename to src/main/java/org/papertrail/listeners/misc/SelfKickListener.java index 3c3641eb..69a2a589 100644 --- a/src/main/java/org/papertrail/cleanup/BotKickListener.java +++ b/src/main/java/org/papertrail/listeners/misc/SelfKickListener.java @@ -1,23 +1,23 @@ -package org.papertrail.cleanup; +package org.papertrail.listeners.misc; import org.jetbrains.annotations.NotNull; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.events.guild.GuildLeaveEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; -import org.papertrail.sdk.client.AuditLogClient; -import org.papertrail.sdk.client.MessageLogClient; +import org.papertrail.commons.sdk.client.AuditLogClient; +import org.papertrail.commons.sdk.client.MessageLogClient; import java.util.concurrent.Executor; /* * This class will have methods that unregister the log channels from the database after the bot has been kicked */ -public class BotKickListener extends ListenerAdapter { +public class SelfKickListener extends ListenerAdapter { private final Executor vThreadPool; - public BotKickListener(Executor vThreadPool) { + public SelfKickListener(Executor vThreadPool) { this.vThreadPool = vThreadPool; } diff --git a/src/main/java/org/papertrail/listeners/commandlisteners/ServerStatCommandListener.java b/src/main/java/org/papertrail/listeners/misc/ServerStatCommandListener.java similarity index 97% rename from src/main/java/org/papertrail/listeners/commandlisteners/ServerStatCommandListener.java rename to src/main/java/org/papertrail/listeners/misc/ServerStatCommandListener.java index cde7ea0c..fb39d721 100644 --- a/src/main/java/org/papertrail/listeners/commandlisteners/ServerStatCommandListener.java +++ b/src/main/java/org/papertrail/listeners/misc/ServerStatCommandListener.java @@ -1,11 +1,11 @@ -package org.papertrail.listeners.commandlisteners; +package org.papertrail.listeners.misc; import java.awt.Color; import java.time.Instant; import java.util.List; import java.util.Objects; -import org.papertrail.utilities.DurationFormatter; +import org.papertrail.commons.utilities.DurationFormatter; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.OnlineStatus; diff --git a/src/main/java/org/papertrail/listeners/voicelisteners/package-info.java b/src/main/java/org/papertrail/listeners/voicelisteners/package-info.java deleted file mode 100644 index 2b1293c9..00000000 --- a/src/main/java/org/papertrail/listeners/voicelisteners/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * This package contains Classes and Methods that perform check for guild voice activity - */ -package org.papertrail.listeners.voicelisteners; \ No newline at end of file diff --git a/src/main/java/org/papertrail/main/ConnectionInitializer.java b/src/main/java/org/papertrail/main/ConnectionInitializer.java index 5cd06ea0..70f5f892 100644 --- a/src/main/java/org/papertrail/main/ConnectionInitializer.java +++ b/src/main/java/org/papertrail/main/ConnectionInitializer.java @@ -1,6 +1,7 @@ package org.papertrail.main; -import org.papertrail.utilities.EnvConfig; +import lombok.Getter; +import org.papertrail.commons.utilities.EnvConfig; import net.dv8tion.jda.api.OnlineStatus; import net.dv8tion.jda.api.requests.GatewayIntent; @@ -9,12 +10,16 @@ import net.dv8tion.jda.api.utils.ChunkingFilter; import net.dv8tion.jda.api.utils.MemberCachePolicy; import net.dv8tion.jda.api.utils.cache.CacheFlag; +import org.papertrail.listeners.misc.ActivityUpdateListener; + /* * This class initializes the connection to discord and configures all the necessary intents */ +@Getter public class ConnectionInitializer { - - // Manages multiple shards (instances) of the bot + + // returns the manager that manages multiple shards (instances) of the bot + // Manages multiple shards (instances) of the bot private final ShardManager manager; public ConnectionInitializer() { @@ -48,13 +53,8 @@ public ConnectionInitializer() { manager = builder.build(); manager.addEventListener(new ActivityUpdateListener(manager)); - // manager.addEventListener(new SlashCommandRegistrar()); + manager.addEventListener(new SlashCommandRegistrar()); // re-enable it only when adding/updating/deleting commands } - - // returns the manager that manages multiple shards (instances) of the bot - public ShardManager getManager() { - return manager; - } - + } diff --git a/src/main/java/org/papertrail/main/FireRun.java b/src/main/java/org/papertrail/main/FireRun.java index 28bf507f..1c5644a1 100644 --- a/src/main/java/org/papertrail/main/FireRun.java +++ b/src/main/java/org/papertrail/main/FireRun.java @@ -8,18 +8,15 @@ import net.dv8tion.jda.api.sharding.ShardManager; import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.papertrail.cleanup.BotKickListener; -import org.papertrail.listeners.commandlisteners.BotInfoCommandListener; -import org.papertrail.listeners.commandlisteners.ServerStatCommandListener; -import org.papertrail.listeners.commandlisteners.BotSetupCommandListener; -import org.papertrail.listeners.commandlisteners.RequiredPermissionCheckCommandListener; -import org.papertrail.listeners.guildlisteners.ServerBoostListener; -import org.papertrail.listeners.loglisteners.AuditLogListener; -import org.papertrail.listeners.commandlisteners.AuditLogSetupCommandListener; -import org.papertrail.listeners.memberlisteners.GuildMemberJoinAndLeaveListener; -import org.papertrail.listeners.commandlisteners.MessageLogSetupCommandListener; -import org.papertrail.listeners.loglisteners.MessageLogListener; -import org.papertrail.listeners.voicelisteners.GuildVoiceListener; +import org.papertrail.listeners.misc.SelfKickListener; +import org.papertrail.listeners.misc.ServerStatCommandListener; +import org.papertrail.listeners.misc.BotSetupInstructionCommandListener; +import org.papertrail.listeners.audit.event.AuditLogListener; +import org.papertrail.listeners.audit.setup.AuditLogSetupCommandListener; +import org.papertrail.listeners.audit.event.GuildMemberJoinAndLeaveListener; +import org.papertrail.listeners.message.setup.MessageLogSetupCommandListener; +import org.papertrail.listeners.message.event.MessageLogListener; +import org.papertrail.listeners.audit.event.GuildVoiceListener; import org.tinylog.Logger; import com.sun.net.httpserver.HttpExchange; @@ -58,13 +55,10 @@ public static void main(String[] args) throws IOException { manager.addEventListener(new GuildVoiceListener(vThreadPool)); manager.addEventListener(new GuildMemberJoinAndLeaveListener(vThreadPool)); - manager.addEventListener(new ServerBoostListener(vThreadPool)); - manager.addEventListener(new BotKickListener(vThreadPool)); + manager.addEventListener(new SelfKickListener(vThreadPool)); manager.addEventListener(new ServerStatCommandListener()); - manager.addEventListener(new BotInfoCommandListener()); - manager.addEventListener(new BotSetupCommandListener()); - manager.addEventListener(new RequiredPermissionCheckCommandListener()); + manager.addEventListener(new BotSetupInstructionCommandListener()); // Custom health check endpoint HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0); diff --git a/src/main/java/org/papertrail/main/SlashCommandRegistrar.java b/src/main/java/org/papertrail/main/SlashCommandRegistrar.java index 453e35d0..db140812 100644 --- a/src/main/java/org/papertrail/main/SlashCommandRegistrar.java +++ b/src/main/java/org/papertrail/main/SlashCommandRegistrar.java @@ -33,19 +33,14 @@ private void setAuditLogCommands(JDA jda) { CommandData serverStats = Commands.slash("stats", "Provides Server Statistics"); - CommandData botInfo = Commands.slash("about", - "Provides Bot Info"); + CommandData setup = Commands.slash("setup", "Provides a guide on setting up the bot"); - CommandData permCheck = Commands.slash("permcheck", "Checks if the bot has the necessary permissions to operate"); - jda.updateCommands() .addCommands(auditLog, messageLog, serverStats, - botInfo, - setup, - permCheck) + setup) .queue(); } } diff --git a/src/main/java/org/papertrail/utilities/ColorFormatter.java b/src/main/java/org/papertrail/utilities/ColorFormatter.java deleted file mode 100644 index a1c0dfc2..00000000 --- a/src/main/java/org/papertrail/utilities/ColorFormatter.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.papertrail.utilities; - -import java.util.HashMap; -import java.util.IllegalFormatException; -import java.util.Map; -import java.util.Map.Entry; - -import org.apache.commons.lang3.StringUtils; - -public class ColorFormatter { - - private ColorFormatter() { - throw new IllegalStateException("Utility Class"); - } - - public static String formatToHex(Object colorValue) { - - if(String.valueOf(colorValue).equals("null")) { - return "N/A"; - } - - try { - int color = Integer.parseInt(String.valueOf(colorValue)); - return String.format("#%06X", color); - } catch (NumberFormatException e ) { - return "No Parsable Color Integer Detected"; - } catch (IllegalFormatException e) { - return "Cannot parse color to hex"; - } - } - - public static String formatGradientColorSystemToHex(Object gradientValue) { - - if(String.valueOf(gradientValue).equals("null")) { - return "N/A"; - } - - // Example gradient: "{tertiary_color=null, secondary_color=null, primary_color=3066993}" - String cleanedroleValueString = StringUtils.strip(String.valueOf(gradientValue), "{}"); - // the string should now be "tertiary_color=null, secondary_color=null, primary_color=3066993" - String[] splitValues = cleanedroleValueString.trim().split(","); - // this should fill the array with three items - // [tertiary_color=null, secondary_color=null, primary_color=3066993] - MapcolorKeyAndValues = new HashMap<>(); - for(String splitValue: splitValues) { - String[] keyValueSplit = StringUtils.split(splitValue, "="); // further split into 3 arrays [tertiary_color, null] [secondary_color, null] [primary_color, 3066993] - if(keyValueSplit.length==2) { - colorKeyAndValues.put(keyValueSplit[0].trim(), formatToHex(keyValueSplit[1].trim())); // put them into the map after converting the int color to hex - } - } - - StringBuilder sb = new StringBuilder(); - for(Entry colorKeyValue: colorKeyAndValues.entrySet()) { - sb.append(colorKeyValue.getKey()).append(": ").append(colorKeyValue.getValue()).append(System.lineSeparator()); - } - - return sb.toString(); - } -} diff --git a/src/main/java/org/papertrail/utilities/MemberRoleUpdateParser.java b/src/main/java/org/papertrail/utilities/MemberRoleUpdateParser.java deleted file mode 100644 index 1bdc8c10..00000000 --- a/src/main/java/org/papertrail/utilities/MemberRoleUpdateParser.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.papertrail.utilities; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.lang3.StringUtils; - -public class MemberRoleUpdateParser { - - private MemberRoleUpdateParser() { - throw new IllegalStateException("Utility Class"); - } - // parses Strings of type shown in this example [{name=2, id=1383465849507151922}] role_name, role_id into a map - public static Map parseRoleUpdate(Object roleUpdateValue) { - - if(roleUpdateValue==null) { - return Collections.emptyMap(); - } - - String roleUpdateValueString = String.valueOf(roleUpdateValue); - if(roleUpdateValueString.isBlank()) { - return Collections.emptyMap(); - } - - String cleanedroleValueString = StringUtils.strip(roleUpdateValueString, "[{}]"); - // the string should now be "name=2, id=1383465849507151922" without the quotation marks - String[] splitValues = cleanedroleValueString.trim().split(","); - // this should fill the array with two items - // [name=2, id=1383465849507151922] - // - - Map keyValueMap = new HashMap<>(); - for(String splitValue: splitValues) { - String[] keyValue = StringUtils.split(splitValue, "="); - // this should create 2 arrays each of size 2 - // Array 1 = [name,2] & Array 2 = [id, 1383465849507151922] - if(keyValue.length==2) { - keyValueMap.put(keyValue[0].trim(), keyValue[1].trim()); - } - } - - return keyValueMap; - } -} diff --git a/src/main/java/org/papertrail/version/AuthorInfo.java b/src/main/java/org/papertrail/version/AuthorInfo.java deleted file mode 100644 index b13c3b80..00000000 --- a/src/main/java/org/papertrail/version/AuthorInfo.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.papertrail.version; - -public class AuthorInfo { - - private AuthorInfo() { - throw new IllegalStateException("Utility Class"); - } - - public static final String AUTHOR_NAME="Egg-03"; - public static final String AUTHOR_LINK = "https://github.com/eggy03"; - public static final String AUTHOR_AVATAR_URL="https://avatars.githubusercontent.com/eggy03"; -} diff --git a/src/main/java/org/papertrail/version/ProjectInfo.java b/src/main/java/org/papertrail/version/ProjectInfo.java deleted file mode 100644 index 6a5cb43c..00000000 --- a/src/main/java/org/papertrail/version/ProjectInfo.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.papertrail.version; - -public class ProjectInfo { - - private ProjectInfo() { - throw new IllegalStateException("Utility Class"); - } - - public static final String APPNAME = "PaperTrail"; - public static final String VERSION = "v2.0.3"; - public static final String PROJECT_LINK = "https://github.com/eggy03/PaperTrailBot"; - public static final String PROJECT_ISSUE_LINK="https://github.com/eggy03/PaperTrailBot/issues"; - - public static final String PRIVACY = "https://github.com/Egg-03/PaperTrailBot/blob/main/PRIVACY.md"; - public static final String TERMS = "https://github.com/Egg-03/PaperTrailBot/blob/main/TERMS.md"; -} diff --git a/src/main/java/org/papertrail/version/package-info.java b/src/main/java/org/papertrail/version/package-info.java deleted file mode 100644 index 26ad72c6..00000000 --- a/src/main/java/org/papertrail/version/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/* - * Package contains fields containing author and version info - */ -package org.papertrail.version; \ No newline at end of file