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