" :
+ "Never Expires";
+ }
+}
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/listeners/auditlogsupl/helper/guild/GuildUpdateBoostCountEventHelper.java b/src/main/java/io/github/eggy03/papertrail/bot/listeners/auditlogsupl/helper/guild/GuildUpdateBoostCountEventHelper.java
new file mode 100644
index 00000000..bf48b48f
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/listeners/auditlogsupl/helper/guild/GuildUpdateBoostCountEventHelper.java
@@ -0,0 +1,46 @@
+package io.github.eggy03.papertrail.bot.listeners.auditlogsupl.helper.guild;
+
+import lombok.NonNull;
+import lombok.experimental.UtilityClass;
+import lombok.extern.slf4j.Slf4j;
+import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.entities.Guild;
+import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
+import net.dv8tion.jda.api.events.guild.update.GuildUpdateBoostCountEvent;
+
+import java.awt.Color;
+import java.time.Instant;
+
+@UtilityClass
+@Slf4j
+public class GuildUpdateBoostCountEventHelper {
+
+ public static void format(@NonNull GuildUpdateBoostCountEvent event, @NonNull String channelIdToSendTo) {
+ Guild guild = event.getGuild();
+
+ EmbedBuilder eb = new EmbedBuilder();
+ eb.setTitle("Server Boost Event");
+ eb.setDescription("**" + guild.getName() + "** has had it's boost count updated!");
+
+ eb.setThumbnail(guild.getIconUrl());
+ eb.setImage(guild.getBannerUrl());
+
+ eb.setColor(Color.YELLOW);
+
+ eb.addField("Old Boost Count", "β°ββ€" + event.getOldBoostCount(), false);
+ eb.addField("New Boost Count", "β°ββ€" + event.getNewBoostCount(), false);
+
+ eb.setFooter(guild.getName());
+ eb.setTimestamp(Instant.now());
+
+ if (!eb.isValidLength() || eb.isEmpty()) {
+ log.warn("Embed is empty or too long (current length: {}).", eb.length());
+ return;
+ }
+
+ TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
+ if (sendingChannel != null && sendingChannel.canTalk()) {
+ sendingChannel.sendMessageEmbeds(eb.build()).queue();
+ }
+ }
+}
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/listeners/auditlogsupl/helper/guild/GuildUpdateBoostTierEventHelper.java b/src/main/java/io/github/eggy03/papertrail/bot/listeners/auditlogsupl/helper/guild/GuildUpdateBoostTierEventHelper.java
new file mode 100644
index 00000000..14ca5510
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/listeners/auditlogsupl/helper/guild/GuildUpdateBoostTierEventHelper.java
@@ -0,0 +1,59 @@
+package io.github.eggy03.papertrail.bot.listeners.auditlogsupl.helper.guild;
+
+import lombok.NonNull;
+import lombok.experimental.UtilityClass;
+import lombok.extern.slf4j.Slf4j;
+import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.entities.Guild;
+import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
+import net.dv8tion.jda.api.events.guild.update.GuildUpdateBoostTierEvent;
+
+import java.awt.Color;
+import java.time.Instant;
+
+@UtilityClass
+@Slf4j
+public class GuildUpdateBoostTierEventHelper {
+
+ public static void format(@NonNull GuildUpdateBoostTierEvent event, @NonNull String channelIdToSendTo) {
+
+ Guild guild = event.getGuild();
+
+ EmbedBuilder eb = new EmbedBuilder();
+ eb.setTitle("Server Boost Tier Update");
+ eb.setDescription(guild.getName() + " has had it's boost tier updated");
+
+ eb.setThumbnail(guild.getIconUrl());
+ eb.setImage(guild.getBannerUrl());
+ eb.setColor(Color.YELLOW);
+
+ Guild.BoostTier oldBoostTier = event.getOldBoostTier();
+ Guild.BoostTier newBoostTier = event.getNewBoostTier();
+
+ String oldTier = "**Tier:** " + oldBoostTier.name() + "\n" +
+ "**Max Emojis:** " + oldBoostTier.getMaxEmojis() + "\n" +
+ "**Max File Size:** " + oldBoostTier.getMaxFileSize() + "\n" +
+ "**Max Bitrate:** " + oldBoostTier.getMaxBitrate();
+
+ String newTier = "**Tier:** " + newBoostTier.name() + "\n" +
+ "**Max Emojis:** " + newBoostTier.getMaxEmojis() + "\n" +
+ "**Max File Size:** " + newBoostTier.getMaxFileSize() + "\n" +
+ "**Max Bitrate:** " + newBoostTier.getMaxBitrate();
+
+ eb.addField("Old Boost Tier Information", oldTier, false);
+ eb.addField("New Boost Tier Information", newTier, false);
+
+ eb.setFooter(guild.getName());
+ eb.setTimestamp(Instant.now());
+
+ if (!eb.isValidLength() || eb.isEmpty()) {
+ log.warn("Embed is empty or too long (current length: {}).", eb.length());
+ return;
+ }
+
+ TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
+ if (sendingChannel != null && sendingChannel.canTalk()) {
+ sendingChannel.sendMessageEmbeds(eb.build()).queue();
+ }
+ }
+}
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/listeners/auditlogsupl/helper/guild/GuildVoiceEventHelper.java b/src/main/java/io/github/eggy03/papertrail/bot/listeners/auditlogsupl/helper/guild/GuildVoiceEventHelper.java
new file mode 100644
index 00000000..87fb7c7b
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/listeners/auditlogsupl/helper/guild/GuildVoiceEventHelper.java
@@ -0,0 +1,62 @@
+package io.github.eggy03.papertrail.bot.listeners.auditlogsupl.helper.guild;
+
+import lombok.NonNull;
+import lombok.experimental.UtilityClass;
+import lombok.extern.slf4j.Slf4j;
+import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.entities.Member;
+import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
+import net.dv8tion.jda.api.entities.channel.middleman.AudioChannel;
+import net.dv8tion.jda.api.events.guild.voice.GuildVoiceUpdateEvent;
+
+import java.awt.Color;
+import java.time.Instant;
+
+@UtilityClass
+@Slf4j
+public class GuildVoiceEventHelper {
+
+ public static void format(@NonNull GuildVoiceUpdateEvent event, @NonNull String channelIdToSendTo) {
+
+ Member member = event.getMember();
+ AudioChannel left = event.getOldValue(); // can be null if user joined for first time
+ AudioChannel joined = event.getNewValue(); // can be null if user left
+
+ EmbedBuilder eb = new EmbedBuilder();
+ eb.setTitle("π Voice Activity Log");
+
+ if (left == null && joined != null) {
+ // User has joined a vc
+ eb.setDescription("A Member has joined a voice channel");
+ eb.setColor(Color.GREEN);
+ eb.addField("β
Member Joined", "β°ββ€" + member.getAsMention() + " joined the voice channel " + joined.getAsMention(), false);
+ }
+
+ if (left != null && joined != null) {
+ // Moved from one channel to another
+ eb.setDescription("A Member has switched voice channels");
+ eb.setColor(Color.YELLOW);
+ eb.addField("π Member Switched Channels", "β°ββ€" + member.getAsMention() + " joined the switched from channel " + left.getAsMention() + " to " + joined.getAsMention(), false);
+ }
+
+ if (left != null && joined == null) {
+ // User disconnected voluntarily (or was disconnected by a moderator)
+ eb.setDescription("A Member has left a voice channel");
+ eb.setColor(Color.RED);
+ eb.addField("β Member Left A Voice Channel", "β°ββ€" + member.getAsMention() + " left the voice channel " + left.getAsMention(), false);
+ }
+
+ eb.setFooter("Voice Activity Detection");
+ eb.setTimestamp(Instant.now());
+
+ if (!eb.isValidLength() || eb.isEmpty()) {
+ log.warn("Embed is empty or too long (current length: {}).", eb.length());
+ return;
+ }
+
+ TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
+ if (sendingChannel != null && sendingChannel.canTalk()) {
+ sendingChannel.sendMessageEmbeds(eb.build()).queue();
+ }
+ }
+}
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/listeners/auditlogsupl/package-info.java b/src/main/java/io/github/eggy03/papertrail/bot/listeners/auditlogsupl/package-info.java
new file mode 100644
index 00000000..32c3b435
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/listeners/auditlogsupl/package-info.java
@@ -0,0 +1,12 @@
+/**
+ * Contains supplementary audit-style event listeners for actions not covered
+ * by Discord's native audit log system.
+ *
+ * These listeners observe events that are audit-relevant (such as guild,
+ * thread, or other structural changes) but cannot be derived from
+ * {@link net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent} entries.
+ *
+ * All events in this package log to the same destination and follow the same
+ * formatting and conventions as standard audit log listeners and hence, no additional setup is required.
+ */
+package io.github.eggy03.papertrail.bot.listeners.auditlogsupl;
\ No newline at end of file
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/listeners/messagelog/event/MessageLogListener.java b/src/main/java/io/github/eggy03/papertrail/bot/listeners/messagelog/event/MessageLogListener.java
new file mode 100644
index 00000000..5a503a1d
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/listeners/messagelog/event/MessageLogListener.java
@@ -0,0 +1,101 @@
+package io.github.eggy03.papertrail.bot.listeners.messagelog.event;
+
+import io.github.eggy03.papertrail.bot.commons.utils.EnvConfig;
+import io.github.eggy03.papertrail.bot.listeners.messagelog.helper.MessageLogMessageDeleteEventHelper;
+import io.github.eggy03.papertrail.bot.listeners.messagelog.helper.MessageLogMessageReceivedEventHelper;
+import io.github.eggy03.papertrail.bot.listeners.messagelog.helper.MessageLogMessageUpdateEventHelper;
+import io.github.eggy03.papertrail.sdk.client.MessageLogContentClient;
+import io.github.eggy03.papertrail.sdk.client.MessageLogRegistrationClient;
+import io.github.eggy03.papertrail.sdk.entity.MessageLogRegistrationEntity;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import net.dv8tion.jda.api.events.message.MessageDeleteEvent;
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+import net.dv8tion.jda.api.events.message.MessageUpdateEvent;
+import net.dv8tion.jda.api.hooks.ListenerAdapter;
+
+import java.util.Optional;
+import java.util.concurrent.Executor;
+
+@Slf4j
+@RequiredArgsConstructor
+public class MessageLogListener extends ListenerAdapter {
+
+ @NonNull
+ private static final MessageLogRegistrationClient registrationClient = new MessageLogRegistrationClient(EnvConfig.get("API_URL"));
+ @NonNull
+ private static final MessageLogContentClient contentClient = new MessageLogContentClient(EnvConfig.get("API_URL"));
+ @NonNull
+ private final Executor vThreadPool;
+
+ @Override
+ public void onMessageReceived(@NonNull MessageReceivedEvent event) {
+
+ // if the author is a bot or system, don't log
+ if (event.getAuthor().isBot() || event.getAuthor().isSystem()) {
+ return;
+ }
+ // don't register non-textual contents
+ if (event.getMessage().getContentRaw().isEmpty()) {
+ return;
+ }
+
+ vThreadPool.execute(() -> {
+ // get the guild id for which the event was fired
+ String guildId = event.getGuild().getId();
+ // Call the API to see if the guild is registered for Message Logging
+ Optional response = registrationClient.getRegisteredGuild(guildId);
+ response.ifPresent(success ->
+ MessageLogMessageReceivedEventHelper.saveMessage(event, contentClient)
+ );
+ });
+ }
+
+ @Override
+ public void onMessageUpdate(@NonNull MessageUpdateEvent event) {
+
+ if (event.getAuthor().isBot() || event.getAuthor().isSystem()) {
+ return;
+ }
+
+ vThreadPool.execute(() -> {
+ // Get the guild id for which the event was fired
+ String guildId = event.getGuild().getId();
+ // Call the API to see if the guild is registered for Message Logging
+ Optional response = registrationClient.getRegisteredGuild(guildId);
+ response.ifPresent(success -> {
+
+ // get the message id of the message which was updated
+ String messageId = event.getMessageId();
+ // retrieve the channel id where the logs must be sent
+ String channelIdToSendTo = success.getChannelId();
+ // update message
+ MessageLogMessageUpdateEventHelper.updateMessage(event, contentClient, messageId, channelIdToSendTo);
+ });
+ });
+ }
+
+ @Override
+ public void onMessageDelete(@NonNull MessageDeleteEvent event) {
+
+ vThreadPool.execute(() -> {
+
+ // Get the guild id for which the event was fired
+ String guildId = event.getGuild().getId();
+
+ // Call the API to see if the guild is registered for Message Logging
+ Optional response = registrationClient.getRegisteredGuild(guildId);
+ response.ifPresent(success -> {
+
+ // get the message id of the message which was deleted
+ String messageId = event.getMessageId();
+ // retrieve the channel id where the logs must be sent
+ String channelIdToSendTo = success.getChannelId();
+ // delete message
+ MessageLogMessageDeleteEventHelper.deleteMessage(event, contentClient, messageId, channelIdToSendTo);
+
+ });
+ });
+ }
+}
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/listeners/messagelog/helper/MessageLogMessageDeleteEventHelper.java b/src/main/java/io/github/eggy03/papertrail/bot/listeners/messagelog/helper/MessageLogMessageDeleteEventHelper.java
new file mode 100644
index 00000000..f914dc2d
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/listeners/messagelog/helper/MessageLogMessageDeleteEventHelper.java
@@ -0,0 +1,63 @@
+package io.github.eggy03.papertrail.bot.listeners.messagelog.helper;
+
+import com.google.common.base.Splitter;
+import io.github.eggy03.papertrail.sdk.client.MessageLogContentClient;
+import io.github.eggy03.papertrail.sdk.entity.MessageLogContentEntity;
+import lombok.NonNull;
+import lombok.experimental.UtilityClass;
+import lombok.extern.slf4j.Slf4j;
+import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.entities.User;
+import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
+import net.dv8tion.jda.api.events.message.MessageDeleteEvent;
+
+import java.awt.Color;
+import java.time.Instant;
+import java.util.List;
+import java.util.Optional;
+
+@UtilityClass
+@Slf4j
+public class MessageLogMessageDeleteEventHelper {
+
+ public static void deleteMessage(@NonNull MessageDeleteEvent event, @NonNull MessageLogContentClient client, @NonNull String deletedMessageId, @NonNull String channelIdToSendTo) {
+ // fetch the old message object from the API
+ Optional oldMessageContent = client.retrieveMessage(deletedMessageId);
+ oldMessageContent.ifPresent(contentEntity -> {
+
+ // retrieve the stored message and author in the database which was deleted
+ String deletedMessage = contentEntity.getMessageContent();
+ String deletedMessageAuthorId = contentEntity.getAuthorId();
+
+ User author = event.getJDA().getUserById(deletedMessageAuthorId);
+ String mentionableAuthor = (author != null ? author.getAsMention() : deletedMessageAuthorId);
+
+ // Splitting is required because each field in an embed can display only up-to 1024 characters
+ List deletedMessageSplits = Splitter.fixedLength(1024).splitToList(deletedMessage);
+
+ EmbedBuilder eb = new EmbedBuilder();
+ eb.setTitle("ποΈ Message Delete Event");
+ eb.setDescription("A message sent by " + mentionableAuthor + " has been deleted from " + event.getChannel().getAsMention());
+ eb.setColor(Color.RED);
+
+ deletedMessageSplits.forEach(split -> eb.addField("Deleted Message", split, false));
+
+ eb.setFooter(event.getGuild().getName());
+ eb.setTimestamp(Instant.now());
+
+ // delete the message from the database
+ client.deleteMessage(deletedMessageId);
+
+ // send the fetched deleted message to the logging channel
+ if (!eb.isValidLength() || eb.isEmpty()) {
+ log.warn("Embed is empty or too long (current length: {}).", eb.length());
+ return;
+ }
+
+ TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
+ if (sendingChannel != null && sendingChannel.canTalk()) {
+ sendingChannel.sendMessageEmbeds(eb.build()).queue();
+ }
+ });
+ }
+}
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/listeners/messagelog/helper/MessageLogMessageReceivedEventHelper.java b/src/main/java/io/github/eggy03/papertrail/bot/listeners/messagelog/helper/MessageLogMessageReceivedEventHelper.java
new file mode 100644
index 00000000..417a6bb8
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/listeners/messagelog/helper/MessageLogMessageReceivedEventHelper.java
@@ -0,0 +1,19 @@
+package io.github.eggy03.papertrail.bot.listeners.messagelog.helper;
+
+import io.github.eggy03.papertrail.sdk.client.MessageLogContentClient;
+import lombok.NonNull;
+import lombok.experimental.UtilityClass;
+import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
+
+@UtilityClass
+public class MessageLogMessageReceivedEventHelper {
+
+ public static void saveMessage(@NonNull MessageReceivedEvent event, @NonNull MessageLogContentClient client) {
+
+ String messageId = event.getMessageId();
+ String messageContent = event.getMessage().getContentDisplay();
+ String authorId = event.getAuthor().getId();
+
+ client.logMessage(messageId, messageContent, authorId);
+ }
+}
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/listeners/messagelog/helper/MessageLogMessageUpdateEventHelper.java b/src/main/java/io/github/eggy03/papertrail/bot/listeners/messagelog/helper/MessageLogMessageUpdateEventHelper.java
new file mode 100644
index 00000000..a4c02b15
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/listeners/messagelog/helper/MessageLogMessageUpdateEventHelper.java
@@ -0,0 +1,69 @@
+package io.github.eggy03.papertrail.bot.listeners.messagelog.helper;
+
+import com.google.common.base.Splitter;
+import io.github.eggy03.papertrail.sdk.client.MessageLogContentClient;
+import io.github.eggy03.papertrail.sdk.entity.MessageLogContentEntity;
+import lombok.NonNull;
+import lombok.experimental.UtilityClass;
+import lombok.extern.slf4j.Slf4j;
+import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
+import net.dv8tion.jda.api.events.message.MessageUpdateEvent;
+
+import java.awt.Color;
+import java.time.Instant;
+import java.util.List;
+import java.util.Optional;
+
+@UtilityClass
+@Slf4j
+public class MessageLogMessageUpdateEventHelper {
+
+ public static void updateMessage(@NonNull MessageUpdateEvent event, @NonNull MessageLogContentClient client, @NonNull String updatedMessageId, @NonNull String channelIdToSendTo) {
+
+ // fetch the old message object from the API
+ Optional oldMessageContent = client.retrieveMessage(updatedMessageId);
+ oldMessageContent.ifPresent(contentEntity -> {
+ // Fetch the old message
+ String oldMessage = contentEntity.getMessageContent();
+ // fetch the updated message and its author from the event
+ String updatedMessage = event.getMessage().getContentDisplay();
+
+ // Ignore events where the message content wasn't edited (e.g., pin, embed resolve, thread creates and updates)
+ // This is required since MessageUpdateEvent is triggered in case of pins and embed resolves with no change to content
+ if (updatedMessage.equals(oldMessage)) {
+ return;
+ }
+
+ // Splitting is required because each field in an embed can display only up-to 1024 characters
+ // A full embed can display up-to 6000 characters
+ List oldMessageSplits = Splitter.fixedLength(1024).splitToList(oldMessage);
+ List updatedMessageSplits = Splitter.fixedLength(1024).splitToList(updatedMessage);
+
+ EmbedBuilder eb = new EmbedBuilder();
+ eb.setTitle("π Message Edit Event");
+ eb.setDescription("A message sent by " + event.getAuthor().getAsMention() + " has been edited in: " + event.getJumpUrl());
+ eb.setColor(Color.YELLOW);
+
+ oldMessageSplits.forEach(split -> eb.addField("Old Message", split, false));
+ updatedMessageSplits.forEach(split -> eb.addField("New Message", split, false));
+
+ eb.setFooter(event.getGuild().getName());
+ eb.setTimestamp(Instant.now());
+
+ // update the database with the new message
+ client.updateMessage(updatedMessageId, updatedMessage, event.getAuthor().getId());
+
+ if (!eb.isValidLength() || eb.isEmpty()) {
+ log.warn("Embed is empty or too long (current length: {}).", eb.length());
+ return;
+ }
+
+ // send the old and updated message to the registered channel
+ TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
+ if (sendingChannel != null && sendingChannel.canTalk()) {
+ sendingChannel.sendMessageEmbeds(eb.build()).queue();
+ }
+ });
+ }
+}
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/listeners/messagelog/setup/MessageLogSetupCommandListener.java b/src/main/java/io/github/eggy03/papertrail/bot/listeners/messagelog/setup/MessageLogSetupCommandListener.java
new file mode 100644
index 00000000..91a5c510
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/listeners/messagelog/setup/MessageLogSetupCommandListener.java
@@ -0,0 +1,123 @@
+package io.github.eggy03.papertrail.bot.listeners.messagelog.setup;
+
+import io.github.eggy03.papertrail.bot.commons.utils.EnvConfig;
+import io.github.eggy03.papertrail.sdk.client.MessageLogRegistrationClient;
+import io.github.eggy03.papertrail.sdk.entity.MessageLogRegistrationEntity;
+import lombok.NonNull;
+import lombok.extern.slf4j.Slf4j;
+import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.entities.Guild;
+import net.dv8tion.jda.api.entities.MessageEmbed;
+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;
+
+import java.awt.Color;
+import java.util.Optional;
+
+@Slf4j
+public class MessageLogSetupCommandListener extends ListenerAdapter {
+
+ @NonNull
+ private static final MessageLogRegistrationClient client = new MessageLogRegistrationClient(EnvConfig.get("API_URL"));
+
+ @Override
+ public void onSlashCommandInteraction(@NonNull SlashCommandInteractionEvent event) {
+
+ if (!event.getName().equals("messagelog") || event.getSubcommandName() == null) {
+ return;
+ }
+
+ switch (event.getSubcommandName()) {
+ case "set" -> setMessageLogging(event);
+ case "view" -> retrieveMessageLoggingChannel(event);
+ case "remove" -> unsetMessageLogging(event);
+ default -> {
+ // skip
+ }
+ }
+ }
+
+ private void setMessageLogging(@NonNull SlashCommandInteractionEvent event) {
+
+ Guild callerGuild = event.getGuild();
+ GuildChannel callerChannel = event.getChannel().asTextChannel();
+ if (callerGuild == null) {
+ log.warn("A message log set command may have been called outside of a guild. This should not happen.");
+ return;
+ }
+
+ // Call the API to register guild for message logging
+ boolean success = client.registerGuild(callerGuild.getId(), callerChannel.getId());
+
+ EmbedBuilder eb = new EmbedBuilder();
+ eb.setTitle("Message Log Registration Process");
+
+ if (success) {
+ eb.setColor(Color.GREEN);
+ eb.addField("β
Channel Registration Success", "β°ββ€" + "All edited and deleted messages will be logged here", false);
+ } else {
+ eb.setColor(Color.YELLOW);
+ eb.addField("β Channel Registration Failure", "β°ββ€" + "Channel could not be registered.\nCheck if a channel in this guild is already registered for logging.", false);
+
+ }
+
+ MessageEmbed mb = eb.build();
+ event.replyEmbeds(mb).setEphemeral(false).queue();
+ }
+
+ private void retrieveMessageLoggingChannel(@NonNull SlashCommandInteractionEvent event) {
+
+ Guild callerGuild = event.getGuild();
+ if (callerGuild == null) {
+ log.warn("A message log view command may have been called outside of a guild. This should not happen.");
+ return;
+ }
+
+ EmbedBuilder eb = new EmbedBuilder();
+ eb.setTitle("View Existing Message Log Configuration");
+
+ // Call the API to check for registered guild
+ Optional response = client.getRegisteredGuild(callerGuild.getId());
+ response.ifPresentOrElse(success -> {
+
+ String registeredChannelId = success.getChannelId();
+ GuildChannel registeredChannel = event.getJDA().getGuildChannelById(registeredChannelId);
+ String mentionableRegisteredChannel = registeredChannel != null ? registeredChannel.getAsMention() : registeredChannelId;
+
+ eb.setColor(Color.CYAN);
+ eb.addField("β
Channel Registration Check", "β°ββ€" + mentionableRegisteredChannel + " is found to be registered as the message log channel", false);
+ }, () -> {
+ eb.setColor(Color.YELLOW);
+ eb.addField("β οΈ Channel Registration Check", "β°ββ€" + "No channel has been registered for message logs", false);
+ });
+
+ MessageEmbed mb = eb.build();
+ event.replyEmbeds(mb).setEphemeral(false).queue();
+ }
+
+ private void unsetMessageLogging(@NonNull SlashCommandInteractionEvent event) {
+
+ Guild callerGuild = event.getGuild();
+ if (callerGuild == null) {
+ log.warn("A message log unset command may have been called outside of a guild. This should not happen.");
+ return;
+ }
+
+ EmbedBuilder eb = new EmbedBuilder();
+ eb.setTitle("Message Log Un-Registration Process");
+
+ // Call the API to unregister guild
+ boolean success = client.deleteRegisteredGuild(callerGuild.getId());
+ if (success) {
+ eb.setColor(Color.GREEN);
+ eb.addField("β
Channel Removal", "β°ββ€" + "Channel successfully unset", false);
+ } else {
+ eb.setColor(Color.YELLOW);
+ eb.addField("β Channel Removal Failure", "β°ββ€" + "Channel could not be unset.\nThis may be because no channel has been registered in this guild yet.", false);
+ }
+
+ MessageEmbed mb = eb.build();
+ event.replyEmbeds(mb).setEphemeral(false).queue();
+ }
+}
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/ActivityUpdateListener.java b/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/ActivityUpdateListener.java
new file mode 100644
index 00000000..d171f563
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/ActivityUpdateListener.java
@@ -0,0 +1,41 @@
+package io.github.eggy03.papertrail.bot.listeners.misc;
+
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import net.dv8tion.jda.api.entities.Activity;
+import net.dv8tion.jda.api.events.guild.GuildJoinEvent;
+import net.dv8tion.jda.api.events.guild.GuildLeaveEvent;
+import net.dv8tion.jda.api.events.session.ReadyEvent;
+import net.dv8tion.jda.api.hooks.ListenerAdapter;
+import net.dv8tion.jda.api.sharding.ShardManager;
+import org.jetbrains.annotations.NotNull;
+
+/*
+ * This class updates the number of servers the bot is in
+ */
+@RequiredArgsConstructor
+public class ActivityUpdateListener extends ListenerAdapter {
+
+ @NonNull
+ private final ShardManager manager;
+
+ @Override
+ public void onReady(@NotNull ReadyEvent event) { // update on cold start
+ updateActivity();
+ }
+
+ @Override
+ public void onGuildJoin(@NotNull GuildJoinEvent event) { // update on guild join
+ updateActivity();
+ }
+
+ @Override
+ public void onGuildLeave(@NotNull GuildLeaveEvent event) { // update on guild leave
+ updateActivity();
+ }
+
+ private void updateActivity() {
+ manager.setActivity(Activity.customStatus("/setup | " + manager.getGuildCache().size() + " Servers"));
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/BotSetupInstructionCommandListener.java b/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/BotSetupInstructionCommandListener.java
new file mode 100644
index 00000000..9e355f33
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/BotSetupInstructionCommandListener.java
@@ -0,0 +1,73 @@
+package io.github.eggy03.papertrail.bot.listeners.misc;
+
+import io.github.eggy03.papertrail.bot.commons.constant.ProjectInfo;
+import lombok.NonNull;
+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;
+
+import java.awt.Color;
+import java.time.Instant;
+
+public class BotSetupInstructionCommandListener extends ListenerAdapter {
+
+ @Override
+ public void onSlashCommandInteraction(@NonNull SlashCommandInteractionEvent event) {
+
+ if (event.getName().equals("setup")) {
+
+ EmbedBuilder eb = new EmbedBuilder();
+ eb.setTitle("π οΈ Setup Guide for " + ProjectInfo.APPNAME);
+ eb.setDescription("Follow the instructions below to set up the bot in your server.");
+ eb.setColor(Color.decode("#38e8bc"));
+
+ eb.addField("1οΈβ£ Set Audit Log Channel",
+ "Use `/auditlog set` to **register this channel** for receiving audit log events.",
+ false);
+
+ eb.addField("2οΈβ£ View Audit Log Channel",
+ "Use `/auditlog view` to **see which channel** is currently receiving audit logs.",
+ false);
+
+ eb.addField("3οΈβ£ Remove Audit Log Channel",
+ "Use `/auditlog remove` to **stop logging** events and remove the registered channel.",
+ false);
+
+ eb.addField("π Permissions",
+ "These three commands require the **Administrator** permission.",
+ false);
+
+ eb.addBlankField(false);
+
+ eb.addField("4οΈβ£ Set Message Log Channel",
+ "Use `/messagelog set` to **register this channel** for receiving message logs.",
+ false);
+
+ eb.addField("5οΈβ£ View Message Log Channel",
+ "Use `/messagelog view` to **see which channel** is currently receiving message logs.",
+ false);
+
+ eb.addField("6οΈβ£ Remove Message Log Channel",
+ "Use `/messagelog remove` to **stop logging** messages and remove the registered channel.",
+ false);
+
+ eb.addField("π Permissions",
+ "These three commands require the **Administrator** permission.",
+ false);
+
+ eb.addBlankField(false);
+
+ eb.addField("7οΈβ£ View Server Stats",
+ "Use `/stats` to **view useful server information**, including member count, channel count, and more.",
+ 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());
+
+ MessageEmbed mb = eb.build();
+ event.replyEmbeds(mb).setEphemeral(false).queue();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/DebugListener.java b/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/DebugListener.java
new file mode 100644
index 00000000..602c1463
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/DebugListener.java
@@ -0,0 +1,175 @@
+package io.github.eggy03.papertrail.bot.listeners.misc;
+
+import io.github.eggy03.papertrail.bot.commons.constant.ProjectInfo;
+import io.github.eggy03.papertrail.bot.commons.utils.BooleanUtils;
+import io.github.eggy03.papertrail.bot.commons.utils.EnvConfig;
+import io.github.eggy03.papertrail.sdk.client.HealthClient;
+import io.github.eggy03.papertrail.sdk.entity.HealthEntity;
+import lombok.NonNull;
+import lombok.extern.slf4j.Slf4j;
+import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.JDA;
+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.channel.middleman.GuildChannel;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.hooks.ListenerAdapter;
+import org.jetbrains.annotations.NotNull;
+
+import java.awt.Color;
+import java.time.Instant;
+import java.util.EnumSet;
+import java.util.Optional;
+import java.util.Set;
+
+
+@Slf4j
+public class DebugListener extends ListenerAdapter {
+
+ // recommended permissions for the bot to function
+ private static final Set recommendedPermissions = EnumSet.of(
+ Permission.VIEW_CHANNEL,
+ Permission.VIEW_AUDIT_LOGS,
+ Permission.MANAGE_SERVER,
+ Permission.MESSAGE_SEND,
+ Permission.MESSAGE_SEND_IN_THREADS,
+ Permission.MESSAGE_EMBED_LINKS,
+ Permission.MESSAGE_HISTORY
+ );
+
+ @NotNull
+ public static String getBotPermissions(@NonNull Guild guild) {
+ return formatPermissions(guild.getSelfMember().getPermissions());
+ }
+
+ @NotNull
+ public static String getBotPermissionsInCurrentChannel(@NonNull Guild guild, @NonNull GuildChannel channel) {
+ return formatPermissions(guild.getSelfMember().getPermissions(channel));
+ }
+
+ @NotNull
+ private static String formatPermissions(@NonNull EnumSet grantedGuildOrChannelPermissions) {
+ // gets all the permissions granted to the bot in the server as a whole or a particular channel
+ EnumSet grantedPermissions = EnumSet.copyOf(grantedGuildOrChannelPermissions);
+ // this will
+ // 1) REMOVE the UNNECESSARY GRANTED PERMISSIONS
+ // 2) RETAIN those GRANTED PERMISSIONS that match with the RECOMMENDED ONES
+ // there may be cases where granted permissions is NOT a perfect superset of recommended permissions
+ // this indicates that some recommended permissions have been DENIED
+ grantedPermissions.retainAll(recommendedPermissions);
+
+ // create a copy of recommended permissions
+ EnumSet deniedPermissions = EnumSet.copyOf(recommendedPermissions);
+ // now if you calculate recommended - granted, you will get the set of recommended permissions which are DENIED
+ deniedPermissions.removeAll(grantedPermissions);
+
+ StringBuilder permString = new StringBuilder();
+ grantedPermissions.forEach(permission ->
+ permString.append("β
- ")
+ .append(permission.getName())
+ .append(System.lineSeparator())
+ );
+
+ deniedPermissions.forEach(permission ->
+ permString.append("β - ")
+ .append(permission.getName())
+ .append(System.lineSeparator())
+ );
+
+ return permString.toString().trim();
+ }
+
+ @NotNull
+ public static String getServerInfo(@NonNull Guild guild, @NonNull GuildChannel channel) {
+ return "Server Name: `" + guild.getName() + "`" + System.lineSeparator() +
+ "Server ID: `" + guild.getId() + "`" + System.lineSeparator() +
+ "Channel Name: `" + channel.getName() + "`" + System.lineSeparator() +
+ "Channel ID: `" + channel.getId() + "`";
+ }
+
+ @NotNull
+ public static String getCallerInfo(@NonNull Member member) {
+ return "User Name: `" + member.getUser().getGlobalName() + "`" + System.lineSeparator() +
+ "User ID: `" + member.getId() + System.lineSeparator() + "`" +
+ "Is Administrator: `" + BooleanUtils.formatToYesOrNo(member.hasPermission(Permission.ADMINISTRATOR)) + "`";
+ }
+
+ @NotNull
+ public static String getBotInfo(@NonNull SlashCommandInteractionEvent event) {
+ JDA.ShardInfo shardInfo = event.getJDA().getShardInfo();
+ return "Current Shard ID: `" + shardInfo.getShardId() + System.lineSeparator() + "`" +
+ "Total Shards: `" + shardInfo.getShardTotal() + "`";
+ }
+
+ @NotNull
+ public static String getApiInfo() {
+ Optional apiHealthEntity = new HealthClient(EnvConfig.get("API_URL")).getHealth();
+ if (apiHealthEntity.isEmpty())
+ return "β οΈ API Unreachable";
+
+ StringBuilder info = new StringBuilder();
+
+ HealthEntity health = apiHealthEntity.get();
+ info.append("Overall API Status: ")
+ .append("`").append(health.getStatus()).append("`")
+ .append("\n");
+
+ HealthEntity.Components components = health.getComponents();
+ if (components == null) {
+ info.append("β οΈ Individual Component Data Unavailable");
+ return info.toString().trim();
+ }
+
+ HealthEntity.Components.Database database = components.getDb();
+ HealthEntity.Components.Redis redis = components.getRedis();
+ HealthEntity.Components.Ping ping = components.getPing();
+ HealthEntity.Components.Ssl ssl = components.getSsl();
+
+ String databaseStatus = database != null ? database.getStatus() : "β οΈ`DB Component Not Found`";
+ String redisStatus = redis != null ? redis.getStatus() : "β οΈ`Redis Component Not Found`";
+ String pingStatus = ping != null ? ping.getStatus() : "β οΈ`Ping Component Not Found`";
+ String sslStatus = ssl != null ? ssl.getStatus() : "β οΈ`SSL Component Not Found`";
+
+ info.append("Database: `").append(databaseStatus).append("`").append("\n")
+ .append("Redis: `").append(redisStatus).append("`").append("\n")
+ .append("Ping: `").append(pingStatus).append("`").append("\n")
+ .append("SSL: `").append(sslStatus).append("`");
+
+ return info.toString().trim();
+ }
+
+ @Override
+ public void onSlashCommandInteraction(@NonNull SlashCommandInteractionEvent event) {
+
+ if (!event.getName().equals("debug"))
+ return;
+
+ Guild guild = event.getGuild();
+ Member member = event.getMember();
+ if (guild == null || member == null) {
+ log.warn("command may have been called outside of a guild");
+ return;
+ }
+
+ GuildChannel channel = event.getGuildChannel();
+
+ EmbedBuilder eb = new EmbedBuilder();
+ eb.setTitle("Debug Info");
+ eb.setDescription("Server: " + guild.getName());
+ eb.setColor(Color.GRAY);
+
+ eb.addField("Bot Permissions", getBotPermissions(guild), true);
+ eb.addField("Channel Permissions", getBotPermissionsInCurrentChannel(guild, channel), true);
+ eb.addField("Server Info", getServerInfo(guild, channel), true);
+
+ eb.addField("User Info", getCallerInfo(member), true);
+ eb.addField("Bot Info", getBotInfo(event), true);
+ eb.addField("API Info", getApiInfo(), true);
+
+ eb.setFooter(ProjectInfo.APPNAME + " " + ProjectInfo.VERSION);
+ eb.setTimestamp(Instant.now());
+
+ event.replyEmbeds(eb.build()).queue();
+ }
+}
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/SelfKickListener.java b/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/SelfKickListener.java
new file mode 100644
index 00000000..67a753e4
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/SelfKickListener.java
@@ -0,0 +1,38 @@
+package io.github.eggy03.papertrail.bot.listeners.misc;
+
+import io.github.eggy03.papertrail.bot.commons.utils.EnvConfig;
+import io.github.eggy03.papertrail.sdk.client.AuditLogRegistrationClient;
+import io.github.eggy03.papertrail.sdk.client.MessageLogRegistrationClient;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+import net.dv8tion.jda.api.entities.Guild;
+import net.dv8tion.jda.api.events.guild.GuildLeaveEvent;
+import net.dv8tion.jda.api.hooks.ListenerAdapter;
+
+import java.util.concurrent.Executor;
+
+/*
+ * This class will have methods that unregister the log channels from the database after the bot has been kicked
+ */
+@RequiredArgsConstructor
+public class SelfKickListener extends ListenerAdapter {
+
+ @NonNull
+ private static final AuditLogRegistrationClient alClient = new AuditLogRegistrationClient(EnvConfig.get("API_URL"));
+
+ @NonNull
+ private static final MessageLogRegistrationClient mlClient = new MessageLogRegistrationClient(EnvConfig.get("API_URL"));
+
+ @NonNull
+ private final Executor vThreadPool;
+
+ @Override
+ public void onGuildLeave(@NonNull GuildLeaveEvent event) {
+
+ Guild leftGuild = event.getGuild();
+ vThreadPool.execute(() -> {
+ alClient.deleteRegisteredGuild(leftGuild.getId());
+ mlClient.deleteRegisteredGuild(leftGuild.getId());
+ });
+ }
+}
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/ServerStatCommandListener.java b/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/ServerStatCommandListener.java
new file mode 100644
index 00000000..6d67a747
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/ServerStatCommandListener.java
@@ -0,0 +1,109 @@
+package io.github.eggy03.papertrail.bot.listeners.misc;
+
+import lombok.NonNull;
+import lombok.extern.slf4j.Slf4j;
+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.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.hooks.ListenerAdapter;
+import org.jetbrains.annotations.NotNull;
+
+import java.awt.Color;
+import java.time.Instant;
+import java.util.List;
+
+@Slf4j
+public class ServerStatCommandListener extends ListenerAdapter {
+
+ @NotNull
+ public static String getMemberAndBotCount(@NonNull Guild guild) {
+
+ List memberCache = guild.getMemberCache().asList();
+ int allUserCount = memberCache.size();
+ int botCount = memberCache.stream().filter(member -> member.getUser().isBot()).toList().size();
+
+ return "Users: " + (allUserCount - botCount) + " Bots: " + botCount + " Total: " + allUserCount;
+ }
+
+ @NotNull
+ public static String getGuildOwner(@NonNull Guild guild) {
+ Member owner = guild.getOwner();
+
+ return owner == null ? "N/A" : owner.getAsMention();
+ }
+
+ @NotNull
+ public static String getGuildCreationDate(@NonNull Guild guild) {
+ return "";
+ }
+
+ @NotNull
+ public static String getGuildVanityUrl(@NonNull Guild guild) {
+ return guild.getVanityUrl() == null ? "N/A" : guild.getVanityUrl();
+ }
+
+ @NotNull
+ public static String getBoosters(@NonNull Guild guild) {
+ StringBuilder boosterString = new StringBuilder();
+ guild.getBoosters().forEach(booster -> boosterString.append(booster.getAsMention()).append(" "));
+ return boosterString.toString().trim().isEmpty() ? "No Boosters" : boosterString.toString().trim();
+ }
+
+ @NotNull
+ public static String getBoosterRole(@NonNull Guild guild) {
+ return guild.getBoostRole() != null ? guild.getBoostRole().getAsMention() : "No Boost Role Found";
+ }
+
+ @NotNull
+ public static String getDataRequestingMember(@NonNull SlashCommandInteractionEvent event) {
+ Member requester = event.getMember();
+ return requester != null ? requester.getEffectiveName() : "N/A";
+ }
+
+ @Override
+ public void onSlashCommandInteraction(@NonNull SlashCommandInteractionEvent event) {
+
+ if (!event.getName().equals("stats")) {
+ return;
+ }
+
+ Guild guild = event.getGuild();
+ if (guild == null) {
+ log.warn("Command may have been called outside of a guild");
+ return;
+ }
+
+ EmbedBuilder eb = new EmbedBuilder();
+ eb.setTitle("π Server Statistics π");
+ eb.setDescription(guild.getName());
+ eb.setThumbnail(guild.getIconUrl());
+ eb.setColor(Color.PINK);
+
+ eb.addField("Guild Owner", "β°ββ€" + getGuildOwner(guild), false);
+ eb.addField("Guild Created On", "β°ββ€" + getGuildCreationDate(guild), false);
+ eb.addField("Guild Vanity URL", "β°ββ€" + getGuildVanityUrl(guild), false);
+
+ eb.addField("Member Stats", "β°ββ€" + getMemberAndBotCount(guild), false);
+
+ eb.addField("Guild Boosters ", "β°ββ€" + getBoosters(guild), false);
+ eb.addField("Guild Boost Count", "β°ββ€" + guild.getBoostCount(), true);
+ eb.addField("Booster Role", "β°ββ€" + getBoosterRole(guild), true);
+ eb.addField("Boost Tier", "β°ββ€" + guild.getBoostTier().name(), true);
+
+ eb.addField("Locale", "β°ββ€" + guild.getLocale().getNativeName(), true);
+ eb.addField("Verification", "β°ββ€" + guild.getVerificationLevel().name(), true);
+ eb.addField("Roles", "β°ββ€" + guild.getRoles().size(), true);
+ eb.addField("Categories", "β°ββ€" + guild.getCategories().size(), true);
+ eb.addField("Text Channels", "β°ββ€" + guild.getTextChannels().size(), true);
+ eb.addField("Voice Channels", "β°ββ€" + guild.getVoiceChannels().size(), true);
+
+ eb.setFooter("Requested By: " + getDataRequestingMember(event));
+ eb.setTimestamp(Instant.now());
+
+ MessageEmbed mb = eb.build();
+ event.replyEmbeds(mb).setEphemeral(false).queue();
+
+ }
+}
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/SlashCommandRegistrationListener.java b/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/SlashCommandRegistrationListener.java
new file mode 100644
index 00000000..918185de
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/listeners/misc/SlashCommandRegistrationListener.java
@@ -0,0 +1,60 @@
+package io.github.eggy03.papertrail.bot.listeners.misc;
+
+import lombok.NonNull;
+import net.dv8tion.jda.api.JDA;
+import net.dv8tion.jda.api.events.session.ReadyEvent;
+import net.dv8tion.jda.api.hooks.ListenerAdapter;
+import net.dv8tion.jda.api.interactions.InteractionContextType;
+import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions;
+import net.dv8tion.jda.api.interactions.commands.build.CommandData;
+import net.dv8tion.jda.api.interactions.commands.build.Commands;
+import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
+
+/*
+ * Registers all the slash commands places throughout the code
+ */
+public class SlashCommandRegistrationListener extends ListenerAdapter {
+
+ @Override
+ public void onReady(@NonNull ReadyEvent event) {
+ setAuditLogCommands(event.getJDA());
+ }
+
+ private void setAuditLogCommands(@NonNull JDA jda) {
+
+ CommandData auditLog = Commands
+ .slash("auditlog", "manage audit log options")
+ .setContexts(InteractionContextType.GUILD)
+ .setDefaultPermissions(DefaultMemberPermissions.DISABLED)
+ .addSubcommands(new SubcommandData("set", "set audit log channel here"))
+ .addSubcommands(new SubcommandData("view", "view audit log channel"))
+ .addSubcommands(new SubcommandData("remove", "unset audit log channel"));
+
+ CommandData messageLog = Commands
+ .slash("messagelog", "manage message log options")
+ .setContexts(InteractionContextType.GUILD)
+ .setDefaultPermissions(DefaultMemberPermissions.DISABLED)
+ .addSubcommands(new SubcommandData("set", "set message log channel here"))
+ .addSubcommands(new SubcommandData("view", "view message log channel"))
+ .addSubcommands(new SubcommandData("remove", "unset message log channel"));
+
+ CommandData serverStats = Commands
+ .slash("stats", "Provides Server Statistics")
+ .setContexts(InteractionContextType.GUILD)
+ .setDefaultPermissions(DefaultMemberPermissions.ENABLED);
+
+ CommandData setup = Commands
+ .slash("setup", "Provides a guide on setting up the bot")
+ .setContexts(InteractionContextType.GUILD)
+ .setDefaultPermissions(DefaultMemberPermissions.ENABLED);
+
+ CommandData debug = Commands
+ .slash("debug", "Provides debug info")
+ .setContexts(InteractionContextType.GUILD)
+ .setDefaultPermissions(DefaultMemberPermissions.ENABLED);
+
+ jda.updateCommands()
+ .addCommands(auditLog, messageLog, serverStats, setup, debug)
+ .queue();
+ }
+}
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/main/ConnectionInitializer.java b/src/main/java/io/github/eggy03/papertrail/bot/main/ConnectionInitializer.java
new file mode 100644
index 00000000..e9d7307d
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/main/ConnectionInitializer.java
@@ -0,0 +1,63 @@
+package io.github.eggy03.papertrail.bot.main;
+
+import io.github.eggy03.papertrail.bot.commons.utils.EnvConfig;
+import lombok.Getter;
+import lombok.NonNull;
+import net.dv8tion.jda.api.OnlineStatus;
+import net.dv8tion.jda.api.requests.GatewayIntent;
+import net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder;
+import net.dv8tion.jda.api.sharding.ShardManager;
+import net.dv8tion.jda.api.utils.ChunkingFilter;
+import net.dv8tion.jda.api.utils.MemberCachePolicy;
+import net.dv8tion.jda.api.utils.cache.CacheFlag;
+
+/*
+ * This class initializes the connection to discord and configures all the necessary intents
+ */
+@Getter
+public class ConnectionInitializer {
+
+ // returns the manager that manages multiple shards (instances) of the bot
+ // Manages multiple shards (instances) of the bot
+ private final @NonNull ShardManager manager;
+
+ public ConnectionInitializer() {
+
+ String token = EnvConfig.get("TOKEN");
+
+ DefaultShardManagerBuilder builder = DefaultShardManagerBuilder.createDefault(token);
+ builder.enableIntents(GatewayIntent.SCHEDULED_EVENTS,
+ GatewayIntent.AUTO_MODERATION_EXECUTION,
+ GatewayIntent.AUTO_MODERATION_CONFIGURATION,
+ GatewayIntent.MESSAGE_CONTENT,
+ GatewayIntent.GUILD_MEMBERS,
+ GatewayIntent.GUILD_EXPRESSIONS,
+ GatewayIntent.GUILD_PRESENCES,
+ GatewayIntent.GUILD_MODERATION);
+
+ builder.setStatus(OnlineStatus.ONLINE);
+
+ //cache all users of the bot
+ builder.setMemberCachePolicy(MemberCachePolicy.ALL);
+ builder.setChunkingFilter(ChunkingFilter.ALL);
+ //you will still need builder.enableCache() to cache user activities and status
+ builder.enableCache(CacheFlag.ACTIVITY,
+ CacheFlag.CLIENT_STATUS,
+ CacheFlag.EMOJI,
+ CacheFlag.STICKER,
+ CacheFlag.ONLINE_STATUS,
+ CacheFlag.MEMBER_OVERRIDES,
+ CacheFlag.ROLE_TAGS,
+ CacheFlag.SCHEDULED_EVENTS);
+
+ int minShardId = Integer.parseInt(EnvConfig.get("MIN_SHARD_ID")); // min for this instance
+ int maxShardId = Integer.parseInt(EnvConfig.get("MAX_SHARD_ID")); // max for this instance
+ int totalShards = Integer.parseInt(EnvConfig.get("TOTAL_SHARDS"));
+
+ manager = builder
+ .setShardsTotal(totalShards)
+ .setShards(minShardId, maxShardId)
+ .build();
+ }
+
+}
diff --git a/src/main/java/io/github/eggy03/papertrail/bot/main/Start.java b/src/main/java/io/github/eggy03/papertrail/bot/main/Start.java
new file mode 100644
index 00000000..660fab2d
--- /dev/null
+++ b/src/main/java/io/github/eggy03/papertrail/bot/main/Start.java
@@ -0,0 +1,74 @@
+package io.github.eggy03.papertrail.bot.main;
+
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import com.sun.net.httpserver.HttpServer;
+import io.github.eggy03.papertrail.bot.listeners.auditlog.event.AuditLogEventListener;
+import io.github.eggy03.papertrail.bot.listeners.auditlog.setup.AuditLogSetupCommandListener;
+import io.github.eggy03.papertrail.bot.listeners.auditlogsupl.event.guild.GuildBoostEventListener;
+import io.github.eggy03.papertrail.bot.listeners.auditlogsupl.event.guild.GuildMemberJoinAndLeaveEventListener;
+import io.github.eggy03.papertrail.bot.listeners.auditlogsupl.event.guild.GuildPollEventListener;
+import io.github.eggy03.papertrail.bot.listeners.auditlogsupl.event.guild.GuildVoiceEventListener;
+import io.github.eggy03.papertrail.bot.listeners.messagelog.event.MessageLogListener;
+import io.github.eggy03.papertrail.bot.listeners.messagelog.setup.MessageLogSetupCommandListener;
+import io.github.eggy03.papertrail.bot.listeners.misc.ActivityUpdateListener;
+import io.github.eggy03.papertrail.bot.listeners.misc.BotSetupInstructionCommandListener;
+import io.github.eggy03.papertrail.bot.listeners.misc.DebugListener;
+import io.github.eggy03.papertrail.bot.listeners.misc.SelfKickListener;
+import io.github.eggy03.papertrail.bot.listeners.misc.ServerStatCommandListener;
+import io.github.eggy03.papertrail.bot.listeners.misc.SlashCommandRegistrationListener;
+import lombok.NonNull;
+import net.dv8tion.jda.api.sharding.ShardManager;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
+/*
+ * The main class of the bot
+ */
+public class Start {
+
+ // All I/O blocking operations run inside the vThreadPool
+ private static final @NonNull Executor vThreadPool = Executors.newVirtualThreadPerTaskExecutor();
+
+ public static void main(String[] args) throws IOException {
+
+ ConnectionInitializer ci = new ConnectionInitializer();
+ ShardManager manager = ci.getManager();
+
+ manager.addEventListener(new AuditLogSetupCommandListener());
+ manager.addEventListener(new AuditLogEventListener(vThreadPool));
+
+ manager.addEventListener(new MessageLogSetupCommandListener());
+ manager.addEventListener(new MessageLogListener(vThreadPool));
+
+ manager.addEventListener(new GuildVoiceEventListener(vThreadPool));
+ manager.addEventListener(new GuildMemberJoinAndLeaveEventListener(vThreadPool));
+ manager.addEventListener(new GuildPollEventListener(vThreadPool));
+ manager.addEventListener(new GuildBoostEventListener(vThreadPool));
+ manager.addEventListener(new SelfKickListener(vThreadPool));
+
+ manager.addEventListener(new ServerStatCommandListener());
+ manager.addEventListener(new BotSetupInstructionCommandListener());
+ manager.addEventListener(new ActivityUpdateListener(manager));
+ manager.addEventListener(new DebugListener());
+ // re-enable it only when adding/updating/deleting commands
+ manager.addEventListener(new SlashCommandRegistrationListener());
+
+ // Custom health check endpoint
+ HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
+ server.createContext("/ping", new PingHandler());
+ server.setExecutor(null); // creates a default executor
+ server.start();
+ }
+
+ static class PingHandler implements HttpHandler {
+ @Override
+ public void handle(@NonNull HttpExchange exchange) throws IOException {
+ exchange.sendResponseHeaders(200, -1);
+ }
+ }
+
+}
diff --git a/src/main/java/org/papertrail/commons/constant/ProjectInfo.java b/src/main/java/org/papertrail/commons/constant/ProjectInfo.java
deleted file mode 100644
index 86a7addd..00000000
--- a/src/main/java/org/papertrail/commons/constant/ProjectInfo.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.papertrail.commons.constant;
-
-public class ProjectInfo {
-
- private ProjectInfo() {
- throw new IllegalStateException("Utility Class");
- }
-
- public static final String APPNAME = "PaperTrail";
- public static final String VERSION = "v2.5.0";
- public static final String PROJECT_ISSUE_LINK="https://github.com/eggy03/PaperTrailBot/issues";
-}
diff --git a/src/main/java/org/papertrail/commons/utilities/BooleanFormatter.java b/src/main/java/org/papertrail/commons/utilities/BooleanFormatter.java
deleted file mode 100644
index a73c3fa0..00000000
--- a/src/main/java/org/papertrail/commons/utilities/BooleanFormatter.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.papertrail.commons.utilities;
-
-import lombok.experimental.UtilityClass;
-import org.jetbrains.annotations.NotNull;
-
-@UtilityClass
-public class BooleanFormatter {
-
- @NotNull
- public static String formatToEmoji (Object value) {
- if(value==null)
- return "N/A";
-
- if(Boolean.TRUE.equals(value))
- return "β
";
-
- return "β";
- }
-
- @NotNull
- public static String formatToYesOrNo (Object value) {
- if(value==null)
- return "N/A";
-
- if(Boolean.TRUE.equals(value))
- return "Yes";
-
- return "No";
- }
-
- @NotNull
- public static String formatToEnabledOrDisabled (Object value) {
- if(value==null)
- return "N/A";
-
- if(Boolean.TRUE.equals(value))
- return "Enabled";
-
- return "Disabled";
- }
-}
diff --git a/src/main/java/org/papertrail/commons/utilities/ColorFormatter.java b/src/main/java/org/papertrail/commons/utilities/ColorFormatter.java
deleted file mode 100644
index 31c9b16b..00000000
--- a/src/main/java/org/papertrail/commons/utilities/ColorFormatter.java
+++ /dev/null
@@ -1,43 +0,0 @@
-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/commons/utilities/DurationFormatter.java b/src/main/java/org/papertrail/commons/utilities/DurationFormatter.java
deleted file mode 100644
index 93266c4d..00000000
--- a/src/main/java/org/papertrail/commons/utilities/DurationFormatter.java
+++ /dev/null
@@ -1,83 +0,0 @@
-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 {
-
- public static String formatSeconds(Object seconds) {
- if (seconds == null) {
- return "ERROR: Value Returned Null";
- }
-
- try {
- long secondsLong = Long.parseLong(seconds.toString());
- if (secondsLong == 0L) return "No Limits";
- Duration d = Duration.ofSeconds(secondsLong);
- long durationDays = d.toDays();
- long durationHours = d.toHoursPart();
- long durationMinutes = d.toMinutesPart();
- long durationSeconds = d.toSecondsPart();
-
- StringBuilder sb = new StringBuilder();
-
- if (durationDays > 0)
- sb.append(durationDays).append("d ");
- if (durationHours > 0)
- sb.append(durationHours).append("h ");
- if (durationMinutes > 0)
- sb.append(durationMinutes).append("m ");
- if(durationSeconds > 0)
- sb.append(durationSeconds).append("s");
-
- return sb.toString().trim();
- } catch (NumberFormatException e) {
- return "Duration Cannot Be Parsed";
- }
-
-
- }
-
- public static String formatMinutes(Object minutes) {
- if (minutes == null) {
- return "ERROR: Value Returned Null";
- }
- try {
- long minutesLong = Long.parseLong(minutes.toString());
- if (minutesLong == 0L) return "No Limits";
- Duration d = Duration.ofMinutes(minutesLong);
- long days = d.toDays();
- long hours = d.toHoursPart();
-
- StringBuilder sb = new StringBuilder();
- if (days > 0) sb.append(days).append("d ");
- if (hours > 0) sb.append(hours).append("h ");
- return sb.toString().trim();
- } catch (NumberFormatException e) {
- return "Duration Cannot Be Parsed";
- }
-
-
- }
-
- public static String isoToLocalTimeCounter(Object isoTime) {
- String isoTimeString = String.valueOf(isoTime);
- if(isoTimeString==null || isoTimeString.equals("null") || isoTimeString.isBlank()) {
- return "N/A";
- }
-
- try {
- OffsetDateTime odt = OffsetDateTime.parse(isoTimeString, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
- long unixTimestamp = odt.toEpochSecond();
- return "";
- } catch (DateTimeParseException e) {
- return "Could Not Parse Date And Time";
- }
-
- }
-}
diff --git a/src/main/java/org/papertrail/commons/utilities/EnvConfig.java b/src/main/java/org/papertrail/commons/utilities/EnvConfig.java
deleted file mode 100644
index 4a05f636..00000000
--- a/src/main/java/org/papertrail/commons/utilities/EnvConfig.java
+++ /dev/null
@@ -1,20 +0,0 @@
-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();
-
- public static String get(String key) {
-
- String value = dotenv.get(key);
- if (value != null) {
- return value;
- }
-
- return System.getenv(key);
- }
-}
diff --git a/src/main/java/org/papertrail/commons/utilities/GuildScheduledEventRecurrenceRuleStructureParser.java b/src/main/java/org/papertrail/commons/utilities/GuildScheduledEventRecurrenceRuleStructureParser.java
deleted file mode 100644
index 5192f0a9..00000000
--- a/src/main/java/org/papertrail/commons/utilities/GuildScheduledEventRecurrenceRuleStructureParser.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.papertrail.commons.utilities;
-
-import lombok.experimental.UtilityClass;
-
-import java.util.Map;
-
-/**
- * Parser for: Recurrence Rule Structure
- */
-@UtilityClass
-public class GuildScheduledEventRecurrenceRuleStructureParser {
-
- public static String parse(Object recurrenceRuleStructure) {
-
- StringBuilder stringBuilder = new StringBuilder();
- if(recurrenceRuleStructure instanceof Map,?> recurrenceRuleMap) {
-
- stringBuilder
- .append("**_Start Time of Interval_**")
- .append(System.lineSeparator())
- .append("β°ββ€")
- .append(String.valueOf(recurrenceRuleMap.get("start")))
- .append(System.lineSeparator());
-
- stringBuilder
- .append("**_End Time of Interval_**")
- .append(System.lineSeparator())
- .append("β°ββ€")
- .append(String.valueOf(recurrenceRuleMap.get("end")))
- .append(System.lineSeparator());
-
- stringBuilder
- .append("**_Frequency of Interval_**")
- .append(System.lineSeparator())
- .append("β°ββ€")
- .append(String.valueOf(recurrenceRuleMap.get("frequency")))
- .append(System.lineSeparator());
-
- stringBuilder
- .append("**_Spacing between events_**")
- .append(System.lineSeparator())
- .append("β°ββ€")
- .append(String.valueOf(recurrenceRuleMap.get("interval")))
- .append(System.lineSeparator());
-
- stringBuilder
- .append("**_Weekday Recurrence_**")
- .append(System.lineSeparator())
- .append("β°ββ€")
- .append(String.valueOf(recurrenceRuleMap.get("by_weekday")))
- .append(System.lineSeparator());
-
- stringBuilder
- .append("**_Specific days within a weekday to recur on_**")
- .append(System.lineSeparator())
- .append("β°ββ€")
- .append(String.valueOf(recurrenceRuleMap.get("by_n_weekday")))
- .append(System.lineSeparator());
-
- stringBuilder
- .append("**_Monthly Recurrence_**")
- .append(System.lineSeparator())
- .append("β°ββ€")
- .append(String.valueOf(recurrenceRuleMap.get("by_month")))
- .append(System.lineSeparator());
-
- stringBuilder
- .append("**_Specific days within a month to recur on_**")
- .append(System.lineSeparator())
- .append("β°ββ€")
- .append(String.valueOf(recurrenceRuleMap.get("by_month_day")))
- .append(System.lineSeparator());
-
- stringBuilder
- .append("**_Set of days within a year to recur on_**")
- .append(System.lineSeparator())
- .append("β°ββ€")
- .append(String.valueOf(recurrenceRuleMap.get("by_year_day")))
- .append(System.lineSeparator());
-
- stringBuilder
- .append("**_Event to be repeated_**")
- .append(System.lineSeparator())
- .append("β°ββ€")
- .append(String.valueOf(recurrenceRuleMap.get("count")));
-
- }
- return stringBuilder.toString();
- }
-}
diff --git a/src/main/java/org/papertrail/commons/utilities/GuildSystemChannelFlagResolver.java b/src/main/java/org/papertrail/commons/utilities/GuildSystemChannelFlagResolver.java
deleted file mode 100644
index 8dd7cefc..00000000
--- a/src/main/java/org/papertrail/commons/utilities/GuildSystemChannelFlagResolver.java
+++ /dev/null
@@ -1,42 +0,0 @@
-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(
- Map.entry(1L, "Suppress member join notifications"),
- Map.entry(1L << 1, "Suppress server boost notifications"),
- Map.entry(1L << 2, "Suppress server setup tips"),
- Map.entry(1L << 3, "Hide member join sticker reply buttons"),
- Map.entry(1L << 4, "Suppress role subscription purchase and renewal notifications"),
- Map.entry(1L << 5, "Hide role subscription sticker reply buttons")
- );
-
- private static String parseFlags(long bitfield){
- StringBuilder flags = new StringBuilder();
- for(Map.Entry entry: SYSTEM_CHANNEL_FLAG_MAP.entrySet()) {
- if((bitfield & entry.getKey()) != 0) {
- flags.append("β
").append(entry.getValue()).append(System.lineSeparator());
- }
- }
- return flags.toString();
- }
-
- public static String getParsedFlags(Object flagValue) {
- if(flagValue==null) {
- return "ERROR: Value Returned Null";
- }
-
- try {
- return parseFlags(Long.parseLong(flagValue.toString()));
- } catch (NumberFormatException e) {
- return "No Parsable Flag Values Detected";
- }
-
- }
-}
-
diff --git a/src/main/java/org/papertrail/commons/utilities/MessageEncryption.java b/src/main/java/org/papertrail/commons/utilities/MessageEncryption.java
deleted file mode 100644
index 7fe4f40b..00000000
--- a/src/main/java/org/papertrail/commons/utilities/MessageEncryption.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.papertrail.commons.utilities;
-
-import lombok.experimental.UtilityClass;
-import lombok.extern.slf4j.Slf4j;
-import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
-
-@UtilityClass
-@Slf4j
-public class MessageEncryption {
-
- private static final String SECRET = EnvConfig.get("MESSAGE_SECRET");
- private static final String ALGORITHM = "PBEWITHSHA256AND256BITAES-CBC-BC";
-
- private static StandardPBEStringEncryptor getEncryptor() {
- StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
- encryptor.setPassword(SECRET);
- encryptor.setAlgorithm(ALGORITHM);
- encryptor.setKeyObtentionIterations(100_000);
- return encryptor;
- }
-
- private static boolean isSecretEmpty() {
- return SECRET == null || SECRET.isBlank();
- }
-
- public static String encrypt(String plainText) {
- if(isSecretEmpty()) {
- log.error("MESSAGE_SECRET is empty! No message will be encrypted and a null will be returned instead");
- return null;
- }
- StandardPBEStringEncryptor enc = getEncryptor();
- return enc.encrypt(plainText);
- }
-
- public static String decrypt(String encryptedText) {
- if(isSecretEmpty()) {
- log.error("MESSAGE_SECRET is empty! No message will be decrypted and a null will be returned instead");
- return null;
- }
- StandardPBEStringEncryptor enc = getEncryptor();
- return enc.decrypt(encryptedText);
- }
-
-}
diff --git a/src/main/java/org/papertrail/commons/utilities/OnboardingUtils.java b/src/main/java/org/papertrail/commons/utilities/OnboardingUtils.java
deleted file mode 100644
index ad2cad96..00000000
--- a/src/main/java/org/papertrail/commons/utilities/OnboardingUtils.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.papertrail.commons.utilities;
-
-import lombok.experimental.UtilityClass;
-import net.dv8tion.jda.api.entities.Guild;
-import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.List;
-
-@UtilityClass
-public class OnboardingUtils {
-
- @NotNull
- public static String formatMode(Object value) {
- if(value==null) return "N/A";
-
- return switch (String.valueOf(value)) {
- case "1" -> "Advanced Mode";
- case "0" -> "Regular Mode";
- default -> "N/A";
- };
- }
-
- @NotNull
- public static String formatStatus(Object value) {
- if(value==null)
- return "N/A";
-
- if(Boolean.TRUE.equals(value))
- return "Enabled";
-
- return "Disabled";
- }
-
- @NotNull
- public static String resolveChannelsFromList(Guild guild, Object value) {
- if(value == null) return "No Resolvable Channel IDs";
-
- StringBuilder sb = new StringBuilder();
- if(value instanceof List> channelIdList) {
- channelIdList.forEach(channelId -> {
- GuildChannel channel = guild.getGuildChannelById((String) channelId);
- sb.append(channel!=null ? channel.getAsMention() : channelId).append(" ");
- });
- }
-
- return sb.toString();
- }
-}
diff --git a/src/main/java/org/papertrail/commons/utilities/PermissionResolver.java b/src/main/java/org/papertrail/commons/utilities/PermissionResolver.java
deleted file mode 100644
index 663591ff..00000000
--- a/src/main/java/org/papertrail/commons/utilities/PermissionResolver.java
+++ /dev/null
@@ -1,89 +0,0 @@
-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(
- Map.entry(1L, "CREATE_INSTANT_INVITE"),
- Map.entry(1L << 1, "KICK_MEMBERS"),
- Map.entry(1L << 2, "BAN_MEMBERS"),
- Map.entry(1L << 3, "ADMINISTRATOR"),
- Map.entry(1L << 4, "MANAGE_CHANNELS"),
- Map.entry(1L << 5, "MANAGE_GUILD"),
- Map.entry(1L << 6, "ADD_REACTIONS"),
- Map.entry(1L << 7, "VIEW_AUDIT_LOG"),
- Map.entry(1L << 8, "PRIORITY_SPEAKER"),
- Map.entry(1L << 9, "STREAM"),
- Map.entry(1L << 10, "VIEW_CHANNEL"),
- Map.entry(1L << 11, "SEND_MESSAGES"),
- Map.entry(1L << 12, "SEND_TTS_MESSAGES"),
- Map.entry(1L << 13, "MANAGE_MESSAGES"),
- Map.entry(1L << 14, "EMBED_LINKS"),
- Map.entry(1L << 15, "ATTACH_FILES"),
- Map.entry(1L << 16, "READ_MESSAGE_HISTORY"),
- Map.entry(1L << 17, "MENTION_EVERYONE"),
- Map.entry(1L << 18, "USE_EXTERNAL_EMOJIS"),
- Map.entry(1L << 19, "VIEW_GUILD_INSIGHTS"),
- Map.entry(1L << 20, "CONNECT"),
- Map.entry(1L << 21, "SPEAK"),
- Map.entry(1L << 22, "MUTE_MEMBERS"),
- Map.entry(1L << 23, "DEAFEN_MEMBERS"),
- Map.entry(1L << 24, "MOVE_MEMBERS"),
- Map.entry(1L << 25, "USE_VAD"),
- Map.entry(1L << 26, "CHANGE_NICKNAME"),
- Map.entry(1L << 27, "MANAGE_NICKNAMES"),
- Map.entry(1L << 28, "MANAGE_ROLES"),
- Map.entry(1L << 29, "MANAGE_WEBHOOKS"),
- Map.entry(1L << 30, "MANAGE_GUILD_EXPRESSIONS"),
- Map.entry(1L << 31, "USE_APPLICATION_COMMANDS"),
- Map.entry(1L << 32, "REQUEST_TO_SPEAK"),
- Map.entry(1L << 33, "MANAGE_EVENTS"),
- Map.entry(1L << 34, "MANAGE_THREADS"),
- Map.entry(1L << 35, "CREATE_PUBLIC_THREADS"),
- Map.entry(1L << 36, "CREATE_PRIVATE_THREADS"),
- Map.entry(1L << 37, "USE_EXTERNAL_STICKERS"),
- Map.entry(1L << 38, "SEND_MESSAGES_IN_THREADS"),
- Map.entry(1L << 39, "USE_EMBEDDED_ACTIVITIES"),
- Map.entry(1L << 40, "MODERATE_MEMBERS"),
- Map.entry(1L << 41, "VIEW_CREATOR_MONETIZATION_ANALYTICS"),
- Map.entry(1L << 42, "USE_SOUNDBOARD"),
- Map.entry(1L << 43, "CREATE_GUILD_EXPRESSIONS"),
- Map.entry(1L << 44, "CREATE_EVENTS"),
- Map.entry(1L << 45, "USE_EXTERNAL_SOUNDS"),
- Map.entry(1L << 46, "SEND_VOICE_MESSAGES"),
-
- Map.entry(1L << 49, "SEND_POLLS"),
- Map.entry(1L << 50, "USE_EXTERNAL_APPS"),
- Map.entry(1L << 51, "PIN_MESSAGES"),
- Map.entry(1L << 52, "BYPASS_SLOWMODE")
- );
-
- private static String parsePermissions(long bitfield, String emoji){
- StringBuilder permissions = new StringBuilder();
- for(Map.Entry entry: PERMISSION_MAP.entrySet()) {
- if((bitfield & entry.getKey()) != 0) {
- permissions.append(emoji).append(entry.getValue()).append(System.lineSeparator());
- }
- }
- return permissions.toString();
- }
-
- public static String getParsedPermissions(Object permissionValues, String emoji) { // this emoji is β for denied permissions and β
for allowed
- if(permissionValues==null) {
- return "ERROR: Value Returned Null";
- }
-
- try {
- return parsePermissions(Long.parseLong(permissionValues.toString()), emoji);
- } catch (NumberFormatException e) {
- return "No Parsable Permissions Detected";
- }
- }
-}
diff --git a/src/main/java/org/papertrail/commons/utilities/RoleObjectParser.java b/src/main/java/org/papertrail/commons/utilities/RoleObjectParser.java
deleted file mode 100644
index 91d132ee..00000000
--- a/src/main/java/org/papertrail/commons/utilities/RoleObjectParser.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.papertrail.commons.utilities;
-
-import lombok.experimental.UtilityClass;
-import lombok.extern.slf4j.Slf4j;
-import net.dv8tion.jda.api.entities.Role;
-import net.dv8tion.jda.api.events.guild.GenericGuildEvent;
-
-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(GenericGuildEvent event, Object roleObject) {
-
- if (roleObject instanceof List> roleList) {
- StringBuilder roleString = new StringBuilder();
- for (Object o : roleList) {
- if (o instanceof Map, ?> roleMap && roleMap.containsKey("id")) {
- String roleId = (String) roleMap.get("id");
- Role role = event.getGuild().getRoleById(roleId);
- roleString.append(role!=null ? role.getAsMention() : roleMap.get("name")).append(" ");
- }
- }
- return roleString.toString();
- }
-
- return "N/A";
- }
-}
diff --git a/src/main/java/org/papertrail/commons/utilities/TypeResolver.java b/src/main/java/org/papertrail/commons/utilities/TypeResolver.java
deleted file mode 100644
index 0c371a1f..00000000
--- a/src/main/java/org/papertrail/commons/utilities/TypeResolver.java
+++ /dev/null
@@ -1,231 +0,0 @@
-package org.papertrail.commons.utilities;
-
-import lombok.experimental.UtilityClass;
-
-/*
- * Resolves Object subtypes from their given IDs
- * @see Discord Channel Types
- */
-@UtilityClass
-public class TypeResolver {
-
- public static String channelTypeResolver(Object channelTypeId) {
- if (channelTypeId == null) {
- return "ERROR: Value Returned Null";
- }
-
- try {
- int channelType = Integer.parseInt(channelTypeId.toString());
- return switch (channelType) {
- case 0 -> "Text";
- case 1 -> "DM";
- case 2 -> "Voice";
- case 3 -> "Group DM";
- case 4 -> "Category";
- case 5 -> "Announcement";
- case 10 -> "Announcement Thread";
- case 11 -> "Public Thread";
- case 12 -> "Private Thread";
- case 13 -> "Stage Voice";
- case 14 -> "Stage Directory";
- case 15 -> "Forum";
- case 16 -> "Media";
- default -> "Undocumented Type: " + channelTypeId;
- };
- } catch (NumberFormatException e) {
- return "Channel Type Is Not Parsable";
- }
-
- }
-
- public static String formatNumberOrUnlimited(Object limitNumber) {
- if (limitNumber == null) {
- return "ERROR: Value Returned Null";
- }
-
- try {
- int limitNumberInt = Integer.parseInt(limitNumber.toString());
- if (limitNumberInt == 0) {
- return "Unlimited";
- } else {
- return String.valueOf(limitNumberInt);
- }
- } catch (NumberFormatException e) {
- return "Type Cannot Be Parsed";
- }
-
- }
-
- public static String videoQualityModeResolver(Object qualityValue) {
- if (qualityValue == null) {
- return "ERROR: Value Returned Null";
- }
-
- try {
- int qualityValueInt = Integer.parseInt(qualityValue.toString());
- return switch (qualityValueInt) {
- case 1 -> "Auto";
- case 2 -> "720p/full";
- default -> String.valueOf(qualityValueInt);
- };
- } catch (NumberFormatException e) {
- return "Type Cannot Be Parsed";
- }
-
- }
-
- public static String voiceChannelBitrateResolver(Object bitrate) {
- if (bitrate == null) {
- return "ERROR: Value Returned Null";
- }
-
- try {
- int bitrateInt = Integer.parseInt(bitrate.toString());
- if (bitrateInt <= 0) {
- return "Unknown";
- }
-
- int kbps = bitrateInt / 1000;
- return kbps + " kbps";
- } catch (NumberFormatException e) {
- return "Type Cannot Be Parsed";
- }
-
- }
-
- public static String channelOverrideTypeResolver(Object type) {
- if (type == null) {
- return "ERROR: Value Returned Null";
- }
-
- try {
- int typeInt = Integer.parseInt(type.toString());
- return switch (typeInt) {
- case 0 -> "Role";
- case 1 -> "Member/Application";
- default -> "Unknown";
- };
- } catch (NumberFormatException e) {
- return "Type Cannot Be Parsed";
- }
-
- }
-
- public static String automodEventTypeResolver(Object type) {
- if (type == null) {
- return "ERROR: Value Returned Null";
- }
-
- try {
- int typeInt = Integer.parseInt(type.toString());
- return switch (typeInt) {
- case 1 -> "Message Send";
- case 2 -> "Message Update";
- default -> "Unknown";
- };
- } catch (NumberFormatException e) {
- return "Type Cannot Be Parsed";
- }
-
- }
-
- public static String automodTriggerTypeResolver(Object type) {
- if (type == null) {
- return "ERROR: Value Returned Null";
- }
-
- try {
- int typeInt = Integer.parseInt(type.toString());
- return switch (typeInt) {
- case 1 -> "Keyword";
- case 3 -> "Spam";
- case 4 -> "Keyword Preset";
- case 5 -> "Mention Spam";
- case 6 -> "Member Profile";
- default -> "Unknown";
- };
- } catch (NumberFormatException e) {
- return "Type Cannot Be Parsed";
- }
-
- }
-
- public static String guildVerificationLevelResolver(Object type) {
- if (type == null) {
- return "ERROR: Value Returned Null";
- }
-
- try {
- int t = Integer.parseInt(type.toString());
- return switch (t) {
- case 0 -> "NONE";
- case 1 -> "LOW (Verified Email)";
- case 2 -> "MEDIUM (Registered on Discord for more than 5 minutes";
- case 3 -> "HIGH (Must be a member of the server for longer than 10 minutes)";
- case 4 -> "VERY_HIGH (Must have a verified phone number)";
- default -> "Unknown";
- };
- } catch (NumberFormatException e) {
- return "No Parsable Type Values Detected";
- }
-
- }
-
- public static String explicitFilterTypeResolver(Object type) {
- if (type == null) {
- return "ERROR: Value Returned Null";
- }
-
- try {
- int t = Integer.parseInt(type.toString());
- return switch (t) {
- case 0 -> "No Filter";
- case 1 -> "Filter Messages From Server Members Without Roles";
- case 2 -> "Filter Messages From All Members";
- default -> "Unknown";
- };
- } catch (NumberFormatException e) {
- return "No Parsable Type Values Detected";
- }
-
- }
-
- public static String scheduleEventTypeResolver(Object type) {
- if (type == null) {
- return "ERROR: Value Returned Null";
- }
-
- try {
- int t = Integer.parseInt(type.toString());
- return switch (t) {
- case 1 -> "Stage Event";
- case 2 -> "Voice Event";
- case 3 -> "Text Event";
- default -> "Unknown";
- };
- } catch (NumberFormatException e) {
- return "No Parsable Type Values Detected";
- }
-
- }
-
- public static String scheduleEventStatusTypeResolver(Object type) {
- if (type == null) {
- return "ERROR: Value Returned Null";
- }
-
- try {
- int t = Integer.parseInt(type.toString());
- return switch (t) {
- case 1 -> "Scheduled";
- case 2 -> "Active";
- case 3 -> "Completed";
- case 4 -> "Cancelled";
- default -> "Unknown";
- };
- } catch (NumberFormatException e) {
- return "No Parsable Type Values Detected";
- }
-
- }
-}
diff --git a/src/main/java/org/papertrail/listeners/audit/event/AuditLogEventListener.java b/src/main/java/org/papertrail/listeners/audit/event/AuditLogEventListener.java
deleted file mode 100644
index cb1f8577..00000000
--- a/src/main/java/org/papertrail/listeners/audit/event/AuditLogEventListener.java
+++ /dev/null
@@ -1,199 +0,0 @@
-package org.papertrail.listeners.audit.event;
-
-import io.github.eggy03.papertrail.sdk.client.AuditLogRegistrationClient;
-import io.github.eggy03.papertrail.sdk.entity.AuditLogRegistrationEntity;
-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.utilities.EnvConfig;
-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.OnboardingPromptCreateEventHelper;
-import org.papertrail.listeners.audit.helper.OnboardingPromptDeleteEventHelper;
-import org.papertrail.listeners.audit.helper.OnboardingPromptUpdateEventHelper;
-import org.papertrail.listeners.audit.helper.OnboardingUpdateEventHelper;
-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.SoundboardSoundCreateEventHelper;
-import org.papertrail.listeners.audit.helper.SoundboardSoundDeleteEventHelper;
-import org.papertrail.listeners.audit.helper.SoundboardSoundUpdateEventHelper;
-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.Optional;
-import java.util.concurrent.Executor;
-
-@Slf4j
-public class AuditLogEventListener extends ListenerAdapter {
-
- private final Executor vThreadPool;
- private static final AuditLogRegistrationClient client = new AuditLogRegistrationClient(EnvConfig.get("API_URL"));
-
- public AuditLogEventListener(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
- Optional response = client.getRegisteredGuild(event.getGuild().getId());
- response.ifPresent(success -> auditLogParser(event, success.getChannelId()));
- });
- }
-
- private void auditLogParser(GuildAuditLogEntryCreateEvent event, String channelIdToSendTo) {
- AuditLogEntry ale = event.getEntry();
- 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 SOUNDBOARD_SOUND_CREATE -> SoundboardSoundCreateEventHelper.format(event, ale, channelIdToSendTo);
- case SOUNDBOARD_SOUND_UPDATE -> SoundboardSoundUpdateEventHelper.format(event, ale, channelIdToSendTo);
- case SOUNDBOARD_SOUND_DELETE -> SoundboardSoundDeleteEventHelper.format(event, ale, channelIdToSendTo);
-
- case ONBOARDING_UPDATE -> OnboardingUpdateEventHelper.format(event, channelIdToSendTo);
- case ONBOARDING_PROMPT_CREATE -> OnboardingPromptCreateEventHelper.format(event, channelIdToSendTo);
- case ONBOARDING_PROMPT_UPDATE -> OnboardingPromptUpdateEventHelper.format(event, channelIdToSendTo);
- case ONBOARDING_PROMPT_DELETE -> OnboardingPromptDeleteEventHelper.format(event, channelIdToSendTo);
-
- case HOME_SETTINGS_CREATE, HOME_SETTINGS_UPDATE -> {
- // might come back later and implement it
- // but for now, don't send these events
- }
-
- // these seemingly don't trigger properly, or are unreliable
- case MESSAGE_BULK_DELETE,
- MESSAGE_CREATE,
- MESSAGE_DELETE,
- MESSAGE_UPDATE -> GenericAuditLogEventHelper.format(event, ale, channelIdToSendTo);
-
- // except UNKNOWN, the rest have never been seen to be triggered
- case APPLICATION_COMMAND_PRIVILEGES_UPDATE, PRUNE, INTEGRATION_UPDATE,
- INVITE_UPDATE, ONBOARDING_CREATE,
- UNKNOWN -> GenericAuditLogEventHelper.format(event, ale, channelIdToSendTo);
-
- default -> {
- GenericAuditLogEventHelper.format(event, ale, channelIdToSendTo);
- log.warn("The following event is either not covered by JDA's UNKNOWN type or is not implemented by me yet {}", ale.getType().name());
- }
- }
- }
-}
diff --git a/src/main/java/org/papertrail/listeners/audit/event/GuildBoostEventListener.java b/src/main/java/org/papertrail/listeners/audit/event/GuildBoostEventListener.java
deleted file mode 100644
index a07ca290..00000000
--- a/src/main/java/org/papertrail/listeners/audit/event/GuildBoostEventListener.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package org.papertrail.listeners.audit.event;
-
-import io.github.eggy03.papertrail.sdk.client.AuditLogRegistrationClient;
-import io.github.eggy03.papertrail.sdk.entity.AuditLogRegistrationEntity;
-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.entities.channel.concrete.TextChannel;
-import net.dv8tion.jda.api.events.guild.member.update.GuildMemberUpdateBoostTimeEvent;
-import net.dv8tion.jda.api.events.guild.update.GuildUpdateBoostCountEvent;
-import net.dv8tion.jda.api.events.guild.update.GuildUpdateBoostTierEvent;
-import net.dv8tion.jda.api.hooks.ListenerAdapter;
-import org.jspecify.annotations.NonNull;
-import org.papertrail.commons.utilities.EnvConfig;
-
-import java.awt.Color;
-import java.time.Instant;
-import java.time.OffsetDateTime;
-import java.util.Optional;
-import java.util.concurrent.Executor;
-
-// Experimental
-public class GuildBoostEventListener extends ListenerAdapter {
-
- private static final AuditLogRegistrationClient client = new AuditLogRegistrationClient(EnvConfig.get("API_URL"));
- private final Executor vThreadPool;
-
- public GuildBoostEventListener(Executor vThreadPool) {
- this.vThreadPool = vThreadPool;
- }
-
- @Override
- public void onGuildUpdateBoostTier(@NonNull GuildUpdateBoostTierEvent event) {
-
- vThreadPool.execute(() -> {
- Optional response = client.getRegisteredGuild(event.getGuild().getId());
- response.ifPresent(auditLogObject -> {
-
- String registeredChannelId = auditLogObject.getChannelId();
-
- Guild guild = event.getGuild();
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("Server Boost Tier Update");
- eb.setDescription(guild.getName() + " has had it's boost tier updated");
-
- eb.setThumbnail(guild.getIconUrl());
- eb.setImage(guild.getBannerUrl());
- eb.setColor(Color.YELLOW);
-
- Guild.BoostTier oldBoostTier = event.getOldBoostTier();
- Guild.BoostTier newBoostTier = event.getNewBoostTier();
-
- String oldTier = "**Tier:** " + oldBoostTier.name() + "\n" +
- "**Max Emojis:** " + oldBoostTier.getMaxEmojis() + "\n" +
- "**Max File Size:** " + oldBoostTier.getMaxFileSize() + "\n" +
- "**Max Bitrate:** " + oldBoostTier.getMaxBitrate();
-
- String newTier = "**Tier:** " + newBoostTier.name() + "\n" +
- "**Max Emojis:** " + newBoostTier.getMaxEmojis() + "\n" +
- "**Max File Size:** " + newBoostTier.getMaxFileSize() + "\n" +
- "**Max Bitrate:** " + newBoostTier.getMaxBitrate();
-
- eb.addField("Old Boost Tier Information", oldTier, false);
- eb.addField("New Boost Tier Information", newTier, false);
-
- eb.setFooter(guild.getName());
- eb.setTimestamp(Instant.now());
-
- MessageEmbed mb = eb.build();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(registeredChannelId);
- if (sendingChannel != null && sendingChannel.canTalk()) {
- sendingChannel.sendMessageEmbeds(mb).queue();
- }
- });
- });
- }
-
- @Override
- public void onGuildUpdateBoostCount(@NonNull GuildUpdateBoostCountEvent event) {
-
- vThreadPool.execute(() -> {
- Optional response = client.getRegisteredGuild(event.getGuild().getId());
- response.ifPresent(success -> {
- String registeredChannelId = success.getChannelId();
-
- Guild guild = event.getGuild();
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("Server Boost Event");
- eb.setDescription("**" + guild.getName() + "** has had it's boost count updated!");
-
- eb.setThumbnail(guild.getIconUrl());
- eb.setImage(guild.getBannerUrl());
-
- eb.setColor(Color.YELLOW);
-
- eb.addField("Old Boost Count", "β°ββ€" + event.getOldBoostCount(), false);
- eb.addField("New Boost Count", "β°ββ€" + event.getNewBoostCount(), false);
-
- eb.setFooter(guild.getName());
- eb.setTimestamp(Instant.now());
-
- MessageEmbed mb = eb.build();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(registeredChannelId);
- if (sendingChannel != null && sendingChannel.canTalk()) {
- sendingChannel.sendMessageEmbeds(mb).queue();
- }
- });
- });
- }
-
- @Override
- public void onGuildMemberUpdateBoostTime(@NonNull GuildMemberUpdateBoostTimeEvent event) {
-
- vThreadPool.execute(() -> {
- Optional response = client.getRegisteredGuild(event.getGuild().getId());
- response.ifPresent(success -> {
- String registeredChannelId = success.getChannelId();
-
- 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());
- eb.setImage(guild.getBannerUrl());
-
- if (newBoostTime != null) {
- eb.setDescription("**" + guild.getName() + "** has been boosted!");
- eb.setColor(Color.PINK);
- eb.addField("Booster Gained", "β°ββ€" + mentionableMember + " has applied their first boost to your server", 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.setFooter(guild.getName());
- eb.setTimestamp(Instant.now());
-
- MessageEmbed mb = eb.build();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(registeredChannelId);
- if (sendingChannel != null && sendingChannel.canTalk()) {
- sendingChannel.sendMessageEmbeds(mb).queue();
- }
- });
- });
- }
-}
diff --git a/src/main/java/org/papertrail/listeners/audit/event/GuildMemberJoinAndLeaveEventListener.java b/src/main/java/org/papertrail/listeners/audit/event/GuildMemberJoinAndLeaveEventListener.java
deleted file mode 100644
index 607c0469..00000000
--- a/src/main/java/org/papertrail/listeners/audit/event/GuildMemberJoinAndLeaveEventListener.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package org.papertrail.listeners.audit.event;
-
-import io.github.eggy03.papertrail.sdk.client.AuditLogRegistrationClient;
-import io.github.eggy03.papertrail.sdk.entity.AuditLogRegistrationEntity;
-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.entities.User;
-import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
-import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent;
-import net.dv8tion.jda.api.events.guild.member.GuildMemberRemoveEvent;
-import net.dv8tion.jda.api.hooks.ListenerAdapter;
-import org.jetbrains.annotations.NotNull;
-import org.papertrail.commons.utilities.BooleanFormatter;
-import org.papertrail.commons.utilities.DurationFormatter;
-import org.papertrail.commons.utilities.EnvConfig;
-
-import java.awt.Color;
-import java.time.Instant;
-import java.util.Optional;
-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 GuildMemberJoinAndLeaveEventListener extends ListenerAdapter {
-
- private static final AuditLogRegistrationClient client = new AuditLogRegistrationClient(EnvConfig.get("API_URL"));
- private final Executor vThreadPool;
-
- public GuildMemberJoinAndLeaveEventListener(Executor vThreadPool) {
- this.vThreadPool = vThreadPool;
- }
-
- @Override
- public void onGuildMemberJoin(@NotNull GuildMemberJoinEvent event) {
-
- vThreadPool.execute(()->{
- // guild member join and leave events are mapped to audit log table
- // Call the API and see if the event came from a registered Guild
- Optional response = client.getRegisteredGuild(event.getGuild().getId());
- response.ifPresent(success -> {
-
- String registeredChannelId = success.getChannelId();
-
- Guild guild = event.getGuild();
- User user = event.getUser();
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("π¬ Member Join Event");
- eb.setDescription("A Member has joined "+guild.getName());
- eb.setColor(Color.GREEN);
-
- eb.addField("π·οΈ Member Name", "β°ββ€"+user.getName(), false);
- eb.setThumbnail(user.getEffectiveAvatarUrl());
- eb.addField("βΉοΈ Member Mention", "β°ββ€"+user.getAsMention(), false);
- eb.addField("π Member ID", "β°ββ€"+user.getId(), false);
- eb.addField("π
Account Created", "β°ββ€"+DurationFormatter.isoToLocalTimeCounter(user.getTimeCreated()), false);
- eb.addField("π€ Bot Account", "β°ββ€"+ BooleanFormatter.formatToYesOrNo(user.isBot()), false);
-
- eb.setFooter("Member Join Detection");
- eb.setTimestamp(Instant.now());
-
- MessageEmbed mb = eb.build();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(registeredChannelId);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.sendMessageEmbeds(mb).queue();
- }
- });
- });
- }
-
- @Override
- public void onGuildMemberRemove(@NotNull GuildMemberRemoveEvent event) {
-
- vThreadPool.execute(() -> {
- // Call the API and see if the event came from a registered Guild
- Optional response = client.getRegisteredGuild(event.getGuild().getId());
- response.ifPresent(success -> {
-
- String registeredChannelId = success.getChannelId();
-
- Guild guild = event.getGuild();
- User user = event.getUser();
- Member member = event.getMember();
-
- String memberJoinDate = "Member Not Cached";
- boolean memberJoinDateTrustable = false;
- if(member!=null){
- memberJoinDate = "";
- memberJoinDateTrustable = member.hasTimeJoined();
- }
- String memberLeaveDate = "";
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("π« Member Leave Event");
- eb.setDescription("A Member has left "+guild.getName());
- eb.setColor(Color.RED);
-
- eb.addField("π·οΈ Member Name", "β°ββ€"+user.getName(), false);
- eb.setThumbnail(user.getEffectiveAvatarUrl());
- eb.addField("π Member ID", "β°ββ€"+user.getId(), false);
- eb.addField("β Member Joined The Server On","β°ββ€"+memberJoinDate, false);
- eb.addField("β Member Left The Server On","β°ββ€"+memberLeaveDate, false);
- eb.addField("β Member Join Date Validity", memberJoinDateTrustable ? "β°ββ€Valid" : "β°ββ€Invalid" , false);
-
- eb.setFooter("If the member was loaded via lazy loading, join date will be identical to the guild creation date.");
- eb.setTimestamp(Instant.now());
-
- MessageEmbed mb = eb.build();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(registeredChannelId);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.sendMessageEmbeds(mb).queue();
- }
- });
-
- });
- }
-
-}
diff --git a/src/main/java/org/papertrail/listeners/audit/event/GuildPollEventListener.java b/src/main/java/org/papertrail/listeners/audit/event/GuildPollEventListener.java
deleted file mode 100644
index 59f99bfa..00000000
--- a/src/main/java/org/papertrail/listeners/audit/event/GuildPollEventListener.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package org.papertrail.listeners.audit.event;
-
-import io.github.eggy03.papertrail.sdk.client.AuditLogRegistrationClient;
-import io.github.eggy03.papertrail.sdk.entity.AuditLogRegistrationEntity;
-import net.dv8tion.jda.api.EmbedBuilder;
-import net.dv8tion.jda.api.entities.MessageEmbed;
-import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
-import net.dv8tion.jda.api.entities.messages.MessagePoll;
-import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
-import net.dv8tion.jda.api.hooks.ListenerAdapter;
-import org.jspecify.annotations.NonNull;
-import org.papertrail.commons.utilities.EnvConfig;
-
-import java.awt.Color;
-import java.time.Instant;
-import java.util.List;
-import java.util.Optional;
-import java.util.concurrent.Executor;
-
-public class GuildPollEventListener extends ListenerAdapter {
-
- private static final AuditLogRegistrationClient client = new AuditLogRegistrationClient(EnvConfig.get("API_URL"));
- private final Executor vThreadPool;
-
- public GuildPollEventListener(Executor vThreadPool) {
- this.vThreadPool = vThreadPool;
- }
-
- @Override
- public void onMessageReceived(@NonNull MessageReceivedEvent event) {
-
- if(!event.isFromGuild())
- return;
-
- MessagePoll messagePoll = event.getMessage().getPoll();
- if(messagePoll==null)
- return;
-
- vThreadPool.execute(()-> {
-
- // guild poll events are mapped to audit log table
- // Call the API and see if the event came from a registered Guild
- Optional response = client.getRegisteredGuild(event.getGuild().getId());
- response.ifPresent(success -> {
-
- String registeredChannelId = success.getChannelId();
-
- StringBuilder answers = new StringBuilder();
- List answerList = messagePoll.getAnswers();
- answerList.forEach(answer -> answers
- .append("*Answer: * ")
- .append(answer.getText())
- .append(" *Emoji: * ")
- .append(answer.getEmoji()==null ? "N/A" : answer.getEmoji().getFormatted())
- .append(System.lineSeparator())
- );
-
- String expiryTime = messagePoll.getTimeExpiresAt()!=null ?
- "" :
- "N/A";
-
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("\uD83D\uDCCA Poll Creation Log");
- eb.setColor(Color.PINK);
- eb.setDescription("A Poll has been created");
- eb.addField("Poll Creator", event.getAuthor().getAsMention(), false);
- eb.addField("Question", messagePoll.getQuestion().getText(), false);
- eb.addField("Answers", answers.toString(), false);
- eb.addField("Poll Expiry Time", expiryTime, false);
- eb.addField("Accepts Multiple Answers", messagePoll.isMultiAnswer() ? "Yes" : "No", false);
- eb.addField("Channel", event.getChannel().getAsMention(), false);
-
- eb.setFooter("Poll Activity Detection");
- eb.setTimestamp(Instant.now());
-
- MessageEmbed mb = eb.build();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(registeredChannelId);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.sendMessageEmbeds(mb).queue();
- }
-
- });
- });
- }
-}
diff --git a/src/main/java/org/papertrail/listeners/audit/event/GuildVoiceEventListener.java b/src/main/java/org/papertrail/listeners/audit/event/GuildVoiceEventListener.java
deleted file mode 100644
index 6b0f142d..00000000
--- a/src/main/java/org/papertrail/listeners/audit/event/GuildVoiceEventListener.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.papertrail.listeners.audit.event;
-
-import io.github.eggy03.papertrail.sdk.client.AuditLogRegistrationClient;
-import io.github.eggy03.papertrail.sdk.entity.AuditLogRegistrationEntity;
-import net.dv8tion.jda.api.EmbedBuilder;
-import net.dv8tion.jda.api.entities.Member;
-import net.dv8tion.jda.api.entities.MessageEmbed;
-import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
-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.jetbrains.annotations.NotNull;
-import org.papertrail.commons.utilities.EnvConfig;
-
-import java.awt.Color;
-import java.time.Instant;
-import java.util.Optional;
-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 GuildVoiceEventListener extends ListenerAdapter {
-
- private static final AuditLogRegistrationClient client = new AuditLogRegistrationClient(EnvConfig.get("API_URL"));
- private final Executor vThreadPool;
-
- public GuildVoiceEventListener(Executor vThreadPool) {
- this.vThreadPool = vThreadPool;
- }
-
- @Override
- public void onGuildVoiceUpdate(@NotNull GuildVoiceUpdateEvent event) {
-
- vThreadPool.execute(()->{
-
- // guild voice events are mapped to audit log table
- // Call the API and see if the event came from a registered Guild
- Optional response = client.getRegisteredGuild(event.getGuild().getId());
- response.ifPresent(success -> {
-
- String registeredChannelId = success.getChannelId();
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("π Voice Activity Log");
-
- Member member = event.getMember();
- AudioChannel left = event.getOldValue(); // can be null if user joined for first time
- AudioChannel joined = event.getNewValue(); // can be null if user left
-
- if(left==null && joined!=null) {
- // User has joined a vc
- eb.setDescription("A Member has joined a voice channel");
- eb.setColor(Color.GREEN);
- eb.addField("β
Member Joined", "β°ββ€"+member.getAsMention()+" joined the voice channel "+joined.getAsMention(), false);
- }
-
- if (left != null && joined != null) {
- // Moved from one channel to another
- eb.setDescription("A Member has switched voice channels");
- eb.setColor(Color.YELLOW);
- eb.addField("π Member Switched Channels", "β°ββ€"+member.getAsMention()+" joined the switched from channel "+left.getAsMention()+ " to "+joined.getAsMention(), false);
- }
-
- if (left!=null && joined==null) {
- // User disconnected voluntarily (or was disconnected by a moderator)
- eb.setDescription("A Member has left a voice channel");
- eb.setColor(Color.RED);
- eb.addField("β Member Left A Voice Channel", "β°ββ€"+member.getAsMention()+" left the voice channel "+left.getAsMention(), false);
- }
-
- eb.setFooter("Voice Activity Detection");
- eb.setTimestamp(Instant.now());
-
- MessageEmbed mb = eb.build();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(registeredChannelId);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 44eaff49..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationRuleCreateEventHelper.java
+++ /dev/null
@@ -1,108 +0,0 @@
-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.concrete.TextChannel;
-import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.BooleanFormatter;
-import org.papertrail.commons.utilities.TypeResolver;
-
-import java.awt.Color;
-import java.util.List;
-import java.util.Map;
-
-@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":
- StringBuilder mentionableRoles = new StringBuilder();
- if(newValue instanceof List> exemptRoleList) {
- exemptRoleList.forEach(roleId -> {
- Role r = ale.getGuild().getRoleById((String) roleId);
- mentionableRoles.append(r!=null ? r.getAsMention() : roleId).append(", ");
- });
- mentionableRoles.delete(mentionableRoles.length()-2, mentionableRoles.length());
- }
- eb.addField("βοΈ Exempt Roles: ", "β°ββ€"+ mentionableRoles, false);
- break;
-
- case "enabled":
- eb.addField("β Enabled", "β°ββ€"+ BooleanFormatter.formatToEmoji(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":
- StringBuilder mentionableChannels = new StringBuilder();
- if(newValue instanceof List> exemptChannelList) {
- exemptChannelList.forEach(channelId -> {
- GuildChannel r = ale.getGuild().getGuildChannelById((String) channelId);
- mentionableChannels.append(r!=null ? r.getAsMention() : channelId).append(", ");
- });
- mentionableChannels.delete(mentionableChannels.length()-2, mentionableChannels.length());
- }
- 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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 060a6cb8..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationRuleDeleteEventHelper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index c1799008..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/AutoModerationRuleUpdateEventHelper.java
+++ /dev/null
@@ -1,97 +0,0 @@
-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.concrete.TextChannel;
-import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.List;
-import java.util.Map;
-
-@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":
- StringBuilder mentionableRoles = new StringBuilder();
- if(newValue instanceof List> exemptRoleList) {
- exemptRoleList.forEach(roleId -> {
- Role r = ale.getGuild().getRoleById((String) roleId);
- mentionableRoles.append(r!=null ? r.getAsMention() : roleId).append(", ");
- });
- mentionableRoles.delete(mentionableRoles.length()-2, mentionableRoles.length());
- }
- eb.addField("βοΈ New Exempt Roles: ", "β°ββ€"+ mentionableRoles, false);
- break;
-
-
- case "actions":
- eb.addField("β‘ New Actions", "β°ββ€"+newValue, false);
- break;
-
- case "exempt_channels":
- StringBuilder mentionableChannels = new StringBuilder();
- if(newValue instanceof List> exemptChannelList) {
- exemptChannelList.forEach(channelId -> {
- GuildChannel r = ale.getGuild().getGuildChannelById((String) channelId);
- mentionableChannels.append(r!=null ? r.getAsMention() : channelId).append(", ");
- });
- mentionableChannels.delete(mentionableChannels.length()-2, mentionableChannels.length());
- }
- 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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index c599029b..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/BanEventHelper.java
+++ /dev/null
@@ -1,50 +0,0 @@
-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.concrete.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-
-@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();
-
- // FIXME -> see if there is a way to not invoke a rest action, possibly since all the members are cached already
- 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();
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if (sendingChannel != null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index c8774ee5..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/ChannelCreateEventHelper.java
+++ /dev/null
@@ -1,91 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.BooleanFormatter;
-import org.papertrail.commons.utilities.DurationFormatter;
-import org.papertrail.commons.utilities.TypeResolver;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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", "β°ββ€"+ BooleanFormatter.formatToEmoji(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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 4a02c712..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/ChannelDeleteEventHelper.java
+++ /dev/null
@@ -1,72 +0,0 @@
-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.TextChannel;
-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;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 763432cf..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/ChannelOverrideCreateEventHelper.java
+++ /dev/null
@@ -1,98 +0,0 @@
-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.concrete.TextChannel;
-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;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index a89c0014..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/ChannelOverrideDeleteEventHelper.java
+++ /dev/null
@@ -1,97 +0,0 @@
-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.concrete.TextChannel;
-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;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 4089d7fd..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/ChannelOverrideUpdateEventHelper.java
+++ /dev/null
@@ -1,100 +0,0 @@
-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.concrete.TextChannel;
-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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index c68c9874..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/ChannelUpdateEventHelper.java
+++ /dev/null
@@ -1,118 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.BooleanFormatter;
-import org.papertrail.commons.utilities.DurationFormatter;
-import org.papertrail.commons.utilities.TypeResolver;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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", "β°ββ€"+ BooleanFormatter.formatToEmoji(oldValue), true);
- eb.addField("π New NSFW Settings", "β°ββ€"+BooleanFormatter.formatToEmoji(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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index fc33b8a2..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/EmojiCreateEventHelper.java
+++ /dev/null
@@ -1,60 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 45d538a3..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/EmojiDeleteEventHelper.java
+++ /dev/null
@@ -1,59 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index e6683ee8..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/EmojiUpdateEventHelper.java
+++ /dev/null
@@ -1,59 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index b9f933d1..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/GenericAuditLogEventHelper.java
+++ /dev/null
@@ -1,48 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-// 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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 360b6fdd..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/GuildUpdateEventHelper.java
+++ /dev/null
@@ -1,129 +0,0 @@
-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.TextChannel;
-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;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 98e2123c..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/IntegrationCreateEventHelper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 2f240e4b..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/IntegrationDeleteEventHelper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 3cd4e8c1..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/InviteCreateEventHelper.java
+++ /dev/null
@@ -1,88 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.BooleanFormatter;
-import org.papertrail.commons.utilities.DurationFormatter;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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", "β°ββ€"+ BooleanFormatter.formatToEmoji(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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index e8f76ecc..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/InviteDeleteEventHelper.java
+++ /dev/null
@@ -1,81 +0,0 @@
-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.entities.channel.concrete.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.BooleanFormatter;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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", "β°ββ€"+ BooleanFormatter.formatToEmoji(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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 9d38f13b..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/KickEventHelper.java
+++ /dev/null
@@ -1,52 +0,0 @@
-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.concrete.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-
-@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();
-
- // fixme -> find a way to not use REST Action
- // 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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if (sendingChannel != null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 675688aa..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/MemberRoleUpdateEventHelper.java
+++ /dev/null
@@ -1,70 +0,0 @@
-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.TextChannel;
-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(event, newValue), false);
- break;
-
- case "$remove":
- eb.addField("π·οΈTarget Member", "β°ββ€"+mentionableTarget, false);
- eb.addField("βRole(s) Removed", "β°ββ€"+RoleObjectParser.parseRole(event, 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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 7eab103a..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/MemberUpdateEventHelper.java
+++ /dev/null
@@ -1,105 +0,0 @@
-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.User;
-import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.BooleanFormatter;
-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());
-
- Member targetMember = ale.getGuild().getMemberById(ale.getTargetId());
- String mentionableTargetEffectiveName = targetMember!=null ? targetMember.getEffectiveName() : "Name could not be fetched";
-
- 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("π·οΈ Target", "β°ββ€"+mentionableTarget, false);
- eb.addField("π·οΈ Old Nickname", "β°ββ€"+oldValue, false);
- eb.addField("π·οΈ Reset Name To", "β°ββ€"+mentionableTargetEffectiveName, false);
- } else if(oldValue != null) { // changing from one nickname to another
- eb.addField("π·οΈ Target", "β°ββ€"+mentionableTarget, false);
- eb.addField("π·οΈ Old Nickname", "β°ββ€"+oldValue, false);
- eb.addField("π·οΈ New Nickname", "β°ββ€"+newValue, false);
- } else if(newValue != null) { // changing from default nickname to a new nickname
- eb.addField("π·οΈ Target", "β°ββ€"+mentionableTarget, false);
- eb.addField("π·οΈ Nickname Added", "β°ββ€"+ newValue, false);
- }
- break;
-
- case "mute":
- eb.addField("ποΈ Is Muted", "β°ββ€Set "+mentionableTarget+"'s Mute Status as "+ BooleanFormatter.formatToEmoji(newValue), false);
- break;
-
- case "deaf":
- eb.addField("π Is Deafened", "β°ββ€Set "+mentionableTarget+"'s Deafened Status as "+ BooleanFormatter.formatToEmoji(newValue), false);
- break;
-
- case "bypasses_verification":
- eb.addField("π‘οΈ Bypass Verification", "β°ββ€Set "+mentionableTarget+"'s verification bypass status as "+ BooleanFormatter.formatToEmoji(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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 53da6f42..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/MessagePinEventHelper.java
+++ /dev/null
@@ -1,41 +0,0 @@
-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.concrete.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 38017952..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/MessageUnpinEventHelper.java
+++ /dev/null
@@ -1,40 +0,0 @@
-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.concrete.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.sendMessageEmbeds(mb).queue();
- }
- }
-}
diff --git a/src/main/java/org/papertrail/listeners/audit/helper/OnboardingPromptCreateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/OnboardingPromptCreateEventHelper.java
deleted file mode 100644
index d6779a16..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/OnboardingPromptCreateEventHelper.java
+++ /dev/null
@@ -1,79 +0,0 @@
-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.concrete.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.BooleanFormatter;
-
-import java.awt.Color;
-
-@UtilityClass
-public class OnboardingPromptCreateEventHelper {
-
- public static void format(GuildAuditLogEntryCreateEvent event, String channelIdToSendTo) {
-
- AuditLogEntry ale = event.getEntry();
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("Audit Log Entry | Onboarding Prompt Create Event");
-
- User executor = ale.getJDA().getUserById(ale.getUserId());
- String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getTargetId());
-
- eb.setDescription("π€ " + mentionableExecutor + "has created an Onboarding Prompt");
- eb.setColor(Color.GREEN);
-
- eb.addField("Action Type", String.valueOf(ale.getType()), true);
- eb.addField("Target Type", String.valueOf(ale.getTargetType()), true);
-
- ale.getChanges().forEach((changeKey, changeValue) -> {
-
- Object oldValue = changeValue.getOldValue();
- Object newValue = changeValue.getNewValue();
-
- switch (changeKey){
- case "single_select":
- eb.addField("Single Selection Mode", BooleanFormatter.formatToYesOrNo(newValue), false);
- break;
-
- case "required":
- eb.addField("Required", BooleanFormatter.formatToYesOrNo(newValue), false);
- break;
-
- case "type", "id":
- break;
-
- case "title":
- eb.addField("Question Title", String.valueOf(newValue), false);
- break;
-
- case "options":
- eb.addField("Question Options", "Review the options in Onboarding Settings", false);
- break;
-
- case "in_onboarding":
- eb.addField("Is a Pre-Join Question", BooleanFormatter.formatToYesOrNo(newValue), false);
- break;
-
- default:
- eb.addField(changeKey, "OLD_VALUE: "+oldValue, false);
- eb.addField(changeKey, "NEW_VALUE: "+newValue, false);
- }
-
- });
-
- eb.setFooter("Audit Log Entry ID: "+ale.getId());
- eb.setTimestamp(ale.getTimeCreated());
-
- MessageEmbed mb = eb.build();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.sendMessageEmbeds(mb).queue();
- }
- }
-}
diff --git a/src/main/java/org/papertrail/listeners/audit/helper/OnboardingPromptDeleteEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/OnboardingPromptDeleteEventHelper.java
deleted file mode 100644
index 43b1dffc..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/OnboardingPromptDeleteEventHelper.java
+++ /dev/null
@@ -1,76 +0,0 @@
-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.concrete.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.BooleanFormatter;
-
-import java.awt.Color;
-
-@UtilityClass
-public class OnboardingPromptDeleteEventHelper {
-
- public static void format(GuildAuditLogEntryCreateEvent event, String channelIdToSendTo) {
-
- AuditLogEntry ale = event.getEntry();
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("Audit Log Entry | Onboarding Prompt Delete Event");
-
- User executor = ale.getJDA().getUserById(ale.getUserId());
- String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getTargetId());
-
- eb.setDescription("π€ " + mentionableExecutor + "has made deleted an Onboarding Prompt");
- eb.setColor(Color.RED);
-
- eb.addField("Action Type", String.valueOf(ale.getType()), true);
- eb.addField("Target Type", String.valueOf(ale.getTargetType()), true);
-
- ale.getChanges().forEach((changeKey, changeValue) -> {
-
- Object oldValue = changeValue.getOldValue();
- Object newValue = changeValue.getNewValue();
-
- switch (changeKey){
- case "single_select":
- eb.addField("Single Selection Mode", BooleanFormatter.formatToYesOrNo(oldValue), false);
- break;
-
- case "required":
- eb.addField("Was Required", BooleanFormatter.formatToYesOrNo(oldValue), false);
- break;
-
- case "type", "id", "options":
- break;
-
- case "title":
- eb.addField("Question Title", String.valueOf(oldValue), false);
- break;
-
- case "in_onboarding":
- eb.addField("Was a Pre-Join Question", BooleanFormatter.formatToYesOrNo(oldValue), false);
- break;
-
- default:
- eb.addField(changeKey, "OLD_VALUE: "+oldValue, false);
- eb.addField(changeKey, "NEW_VALUE: "+newValue, false);
- }
-
- });
-
- eb.setFooter("Audit Log Entry ID: "+ale.getId());
- eb.setTimestamp(ale.getTimeCreated());
-
- MessageEmbed mb = eb.build();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.sendMessageEmbeds(mb).queue();
- }
- }
-
-}
diff --git a/src/main/java/org/papertrail/listeners/audit/helper/OnboardingUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/OnboardingUpdateEventHelper.java
deleted file mode 100644
index 5374e42a..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/OnboardingUpdateEventHelper.java
+++ /dev/null
@@ -1,76 +0,0 @@
-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.Guild;
-import net.dv8tion.jda.api.entities.MessageEmbed;
-import net.dv8tion.jda.api.entities.User;
-import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.OnboardingUtils;
-
-import java.awt.Color;
-
-@UtilityClass
-public class OnboardingUpdateEventHelper {
-
- public static void format(GuildAuditLogEntryCreateEvent event, String channelIdToSendTo) {
-
- AuditLogEntry ale = event.getEntry();
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("Audit Log Entry | Onboarding Update Event");
-
- User executor = ale.getJDA().getUserById(ale.getUserId());
- String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getTargetId());
-
- Guild guild = event.getGuild();
-
- eb.setDescription("π€ " + mentionableExecutor + "has made changes to Onboarding");
- eb.setColor(Color.MAGENTA);
-
- eb.addField("Action Type", String.valueOf(ale.getType()), true);
- eb.addField("Target Type", String.valueOf(ale.getTargetType()), true);
-
- ale.getChanges().forEach((changeKey, changeValue) -> {
- Object oldValue = changeValue.getOldValue();
- Object newValue = changeValue.getNewValue();
-
- switch (changeKey){
- case "enabled":
- eb.addField("Old Onboarding Status", OnboardingUtils.formatStatus(oldValue), false);
- eb.addField("New Onboarding Status", OnboardingUtils.formatStatus(newValue), true);
- break;
-
- case "mode":
- eb.addField("Old Onboarding Mode", OnboardingUtils.formatMode(oldValue), false);
- eb.addField("New Onboarding Mode", OnboardingUtils.formatMode(newValue), true);
- break;
-
- case "default_channel_ids":
- eb.addField("Old Default Channels", OnboardingUtils.resolveChannelsFromList(guild, oldValue), false);
- eb.addField("New Default Channels", OnboardingUtils.resolveChannelsFromList(guild, newValue), false);
- break;
-
- case "prompts": // unknown as to exactly why this is triggered
- eb.addField("Prompt Updates", "Overall Pre-join/Post-join questions may have been updated.\n Review changes manually.", false);
- break;
-
- default:
- eb.addField(changeKey, "from: "+oldValue+" to: "+newValue, false);
- }
-
- });
-
- eb.setFooter("Audit Log Entry ID: "+ale.getId());
- eb.setTimestamp(ale.getTimeCreated());
-
- MessageEmbed mb = eb.build();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 8970be98..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/RoleCreateEventHelper.java
+++ /dev/null
@@ -1,71 +0,0 @@
-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.concrete.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 0f4f4766..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/RoleDeleteEventHelper.java
+++ /dev/null
@@ -1,85 +0,0 @@
-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.concrete.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.BooleanFormatter;
-import org.papertrail.commons.utilities.ColorFormatter;
-import org.papertrail.commons.utilities.PermissionResolver;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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", "β°ββ€"+ BooleanFormatter.formatToEmoji(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", "β°ββ€"+BooleanFormatter.formatToEmoji(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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 2406e1d9..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/RoleUpdateEventHelper.java
+++ /dev/null
@@ -1,98 +0,0 @@
-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.concrete.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.BooleanFormatter;
-import org.papertrail.commons.utilities.ColorFormatter;
-import org.papertrail.commons.utilities.PermissionResolver;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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", "β°ββ€"+ BooleanFormatter.formatToEmoji(oldValue), true);
- eb.addField("π New Display Seperately", "β°ββ€"+BooleanFormatter.formatToEmoji(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", "β°ββ€"+BooleanFormatter.formatToEmoji(oldValue), true);
- eb.addField("π New Mentionable", "β°ββ€"+BooleanFormatter.formatToEmoji(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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 228ff587..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/ScheduledEventCreateEventHelper.java
+++ /dev/null
@@ -1,89 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.GuildScheduledEventRecurrenceRuleStructureParser;
-import org.papertrail.commons.utilities.TypeResolver;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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 "name":
- eb.addField("π·οΈ Event Name", "β°ββ€"+newValue, false);
- 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 "channel_id":
- GuildChannel eventChannel = event.getGuild().getGuildChannelById(String.valueOf(newValue));
- eb.addField("π¬ Event Channel", "β°ββ€"+(eventChannel!=null ? eventChannel.getAsMention() : String.valueOf(newValue)), false);
- break;
-
- case "recurrence_rule":
- eb.addField("π Recurrence Rule", GuildScheduledEventRecurrenceRuleStructureParser.parse(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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 204cc9aa..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/ScheduledEventDeleteEventHelper.java
+++ /dev/null
@@ -1,88 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.GuildScheduledEventRecurrenceRuleStructureParser;
-import org.papertrail.commons.utilities.TypeResolver;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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 "name":
- eb.addField("π·οΈ Event Name", "β°ββ€"+oldValue, false);
- 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 "channel_id":
- GuildChannel eventChannel = event.getGuild().getGuildChannelById(String.valueOf(oldValue));
- eb.addField("π¬ Event Channel", "β°ββ€"+(eventChannel!=null ? eventChannel.getAsMention() : String.valueOf(oldValue)), false);
- break;
-
- case "recurrence_rule":
- eb.addField("π Recurrence Rule", GuildScheduledEventRecurrenceRuleStructureParser.parse(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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 1aea5700..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/ScheduledEventUpdateEventHelper.java
+++ /dev/null
@@ -1,99 +0,0 @@
-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.concrete.TextChannel;
-import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.GuildScheduledEventRecurrenceRuleStructureParser;
-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 "name":
- eb.addField("π·οΈ Old Event Name", "β°ββ€"+oldValue, false);
- eb.addField("π·οΈ New Event Name","β°ββ€"+newValue, false);
- 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 "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;
-
- case "recurrence_rule":
- eb.addField("π Old Recurrence Rule", GuildScheduledEventRecurrenceRuleStructureParser.parse(oldValue), false);
- eb.addField("π New Recurrence Rule", GuildScheduledEventRecurrenceRuleStructureParser.parse(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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.sendMessageEmbeds(mb).queue();
- }
- }
-}
diff --git a/src/main/java/org/papertrail/listeners/audit/helper/SoundboardSoundCreateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/SoundboardSoundCreateEventHelper.java
deleted file mode 100644
index 659a1913..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/SoundboardSoundCreateEventHelper.java
+++ /dev/null
@@ -1,74 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-@UtilityClass
-public class SoundboardSoundCreateEventHelper {
-
- public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) {
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("Audit Log Entry | Soundboard Sound Create Event");
-
- User executor = ale.getJDA().getUserById(ale.getUserIdLong());
- String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId());
-
- eb.setDescription("π€ **By**: "+mentionableExecutor+"\nβΉοΈ A sound item was added to the soundboard");
- 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_id", "sound_id", "id", "guild_id", "available":
- break;
-
- case "volume":
- eb.addField("Volume", "β°ββ€"+newValue, false);
- break;
-
- case "emoji_name":
- eb.addField("Related Emoji", "β°ββ€"+newValue, false);
- break;
-
- case "emoji_id":
- eb.addField("Related Emoji ID", "β°ββ€"+newValue, false);
- break;
-
- case "name":
- eb.addField("Sound Item 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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.sendMessageEmbeds(mb).queue();
- }
- }
-}
diff --git a/src/main/java/org/papertrail/listeners/audit/helper/SoundboardSoundDeleteEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/SoundboardSoundDeleteEventHelper.java
deleted file mode 100644
index cb30fec9..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/SoundboardSoundDeleteEventHelper.java
+++ /dev/null
@@ -1,73 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-@UtilityClass
-public class SoundboardSoundDeleteEventHelper {
-
- public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) {
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("Audit Log Entry | Soundboard Sound Create Event");
-
- User executor = ale.getJDA().getUserById(ale.getUserIdLong());
- String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId());
-
- eb.setDescription("π€ **By**: "+mentionableExecutor+"\nβΉοΈ A sound item was deleted from the soundboard");
- 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 "user_id", "sound_id", "id", "guild_id", "available":
- break;
-
- case "volume":
- eb.addField("Volume", "β°ββ€"+oldValue, false);
- break;
-
- case "emoji_name":
- eb.addField("Related Emoji", "β°ββ€"+oldValue, false);
- break;
-
- case "emoji_id":
- eb.addField("Related Emoji ID", "β°ββ€"+oldValue, false);
- break;
-
- case "name":
- eb.addField("Sound Item 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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.sendMessageEmbeds(mb).queue();
- }
- }
-}
diff --git a/src/main/java/org/papertrail/listeners/audit/helper/SoundboardSoundUpdateEventHelper.java b/src/main/java/org/papertrail/listeners/audit/helper/SoundboardSoundUpdateEventHelper.java
deleted file mode 100644
index 398c7e5c..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/SoundboardSoundUpdateEventHelper.java
+++ /dev/null
@@ -1,78 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-@UtilityClass
-public class SoundboardSoundUpdateEventHelper {
-
- public static void format(GuildAuditLogEntryCreateEvent event, AuditLogEntry ale, String channelIdToSendTo) {
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("Audit Log Entry | Soundboard Sound Update Event");
-
- User executor = ale.getJDA().getUserById(ale.getUserIdLong());
- String mentionableExecutor = (executor != null ? executor.getAsMention() : ale.getUserId());
-
- eb.setDescription("π€ **By**: "+mentionableExecutor+"\nβΉοΈ A sound item in the soundboard 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 "user_id", "sound_id", "id", "guild_id", "available":
- break;
-
- case "volume":
- eb.addField("Old Volume", "β°ββ€"+oldValue, false);
- eb.addField("New Volume", "β°ββ€"+newValue, false);
- break;
-
- case "emoji_name":
- eb.addField("Old Related Emoji", "β°ββ€"+oldValue, false);
- eb.addField("New Related Emoji", "β°ββ€"+newValue, false);
- break;
-
- case "emoji_id":
- eb.addField("Old Related Emoji ID", "β°ββ€"+oldValue, false);
- eb.addField("New Related Emoji ID", "β°ββ€"+newValue, false);
- break;
-
- case "name":
- eb.addField("Old Sound Item Name", "β°ββ€"+oldValue, false);
- eb.addField("New Sound Item 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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 15fcda2a..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/StageInstanceCreateEventHelper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 358f9040..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/StageInstanceDeleteEventHelper.java
+++ /dev/null
@@ -1,62 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index fb46132c..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/StageInstanceUpdateEventHelper.java
+++ /dev/null
@@ -1,64 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index e50202b3..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/StickerCreateEventHelper.java
+++ /dev/null
@@ -1,76 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.entities.sticker.GuildSticker;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 7a42e032..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/StickerDeleteEventHelper.java
+++ /dev/null
@@ -1,73 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index a2f3103d..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/StickerUpdateEventHelper.java
+++ /dev/null
@@ -1,76 +0,0 @@
-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.TextChannel;
-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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 7525285c..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/ThreadCreateEventHelper.java
+++ /dev/null
@@ -1,88 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.BooleanFormatter;
-import org.papertrail.commons.utilities.DurationFormatter;
-import org.papertrail.commons.utilities.TypeResolver;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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", "β°ββ€"+ BooleanFormatter.formatToEmoji(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", "β°ββ€"+BooleanFormatter.formatToEmoji(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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index d2c3d002..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/ThreadDeleteEventHelper.java
+++ /dev/null
@@ -1,83 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.BooleanFormatter;
-import org.papertrail.commons.utilities.DurationFormatter;
-import org.papertrail.commons.utilities.TypeResolver;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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", "β°ββ€"+ BooleanFormatter.formatToEmoji(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", "β°ββ€"+ BooleanFormatter.formatToEmoji(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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index a78fdcb2..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/ThreadUpdateEventHelper.java
+++ /dev/null
@@ -1,103 +0,0 @@
-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.TextChannel;
-import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-import org.papertrail.commons.utilities.BooleanFormatter;
-import org.papertrail.commons.utilities.DurationFormatter;
-import org.papertrail.commons.utilities.TypeResolver;
-
-import java.awt.Color;
-import java.util.Map;
-
-@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", "β°ββ€"+ BooleanFormatter.formatToEmoji(oldValue), true);
- eb.addField("π New Lock Status", "β°ββ€"+ BooleanFormatter.formatToEmoji(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", "β°ββ€"+BooleanFormatter.formatToEmoji(oldValue), true);
- eb.addField("ποΈ New Archive Status", "β°ββ€"+BooleanFormatter.formatToEmoji(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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 4fd18a74..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/UnbanEventHelper.java
+++ /dev/null
@@ -1,47 +0,0 @@
-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.concrete.TextChannel;
-import net.dv8tion.jda.api.events.guild.GuildAuditLogEntryCreateEvent;
-
-import java.awt.Color;
-
-@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();
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if (sendingChannel != null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 2203fdfb..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/WebhookCreateEventHelper.java
+++ /dev/null
@@ -1,73 +0,0 @@
-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.TextChannel;
-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;
-
-@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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index a9ff6b12..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/WebhookRemoveEventHelper.java
+++ /dev/null
@@ -1,72 +0,0 @@
-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.TextChannel;
-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;
-
-@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);
- 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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.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
deleted file mode 100644
index 03e72cb0..00000000
--- a/src/main/java/org/papertrail/listeners/audit/helper/WebhookUpdateEventHelper.java
+++ /dev/null
@@ -1,73 +0,0 @@
-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.TextChannel;
-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;
-
-@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);
- 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();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.sendMessageEmbeds(mb).queue();
- }
- }
-
-}
diff --git a/src/main/java/org/papertrail/listeners/audit/setup/AuditLogSetupCommandListener.java b/src/main/java/org/papertrail/listeners/audit/setup/AuditLogSetupCommandListener.java
deleted file mode 100644
index 11dbb0ee..00000000
--- a/src/main/java/org/papertrail/listeners/audit/setup/AuditLogSetupCommandListener.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package org.papertrail.listeners.audit.setup;
-
-import io.github.eggy03.papertrail.sdk.client.AuditLogRegistrationClient;
-import io.github.eggy03.papertrail.sdk.entity.AuditLogRegistrationEntity;
-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.channel.Channel;
-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;
-import org.papertrail.commons.utilities.EnvConfig;
-
-import java.awt.Color;
-import java.util.Optional;
-
-public class AuditLogSetupCommandListener extends ListenerAdapter {
-
- private static final AuditLogRegistrationClient client = new AuditLogRegistrationClient(EnvConfig.get("API_URL"));
-
- @Override
- public void onSlashCommandInteraction(SlashCommandInteractionEvent event) {
-
- if(!event.getName().equals("auditlog")){
- return;
- }
-
- if(event.getSubcommandName()==null) {
- return;
- }
-
- switch(event.getSubcommandName()) {
-
- case "set":
- setAuditLogging(event);
- break;
-
- case "view":
- retrieveAuditLoggingChannel(event);
- break;
-
- case "remove":
- unsetAuditLogging(event);
- break;
-
- default:
- break;
- }
- }
-
-
- private void setAuditLogging(SlashCommandInteractionEvent event) {
-
- // Only members in a guild with MANAGE_SERVER permissions should be able to use this command
- Member callerMember = event.getMember();
- Guild callerGuild = event.getGuild();
- Channel callerChannel = event.getChannel().asTextChannel();
-
- if (callerMember == null || callerGuild == null) {
- event.reply("β You can only use this command in a guild.").setEphemeral(true).queue();
- return;
- }
-
- if (!callerMember.hasPermission(Permission.MANAGE_SERVER)) {
- event.reply("β You don't have the permission required to use this command.").setEphemeral(true).queue();
- return;
- }
-
- // Call the API to register the guild and the channel
- boolean success = client.registerGuild(callerGuild.getId(), callerChannel.getId());
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("π Audit Log Configuration");
-
- if (success) {
- eb.addField("β
Channel Registration Success", "β°ββ€" + "All audit log info will be logged here", false);
- eb.setColor(Color.GREEN);
-
- MessageEmbed mb = eb.build();
- event.replyEmbeds(mb).setEphemeral(false).queue();
- } else {
- eb.addField("β Channel Registration Failure", "β°ββ€" + "Channel could not be registered.\nCheck if a channel in this guild is already registered for logging.", false);
- eb.setColor(Color.YELLOW);
-
- MessageEmbed mb = eb.build();
- event.replyEmbeds(mb).setEphemeral(false).queue();
- }
-
- }
-
- private void retrieveAuditLoggingChannel(SlashCommandInteractionEvent event) {
-
- // Only members in a guild with MANAGE_SERVER permissions should be able to use this command
- Member callerMember = event.getMember();
- Guild callerGuild = event.getGuild();
-
- if (callerMember == null || callerGuild == null) {
- event.reply("β You can only use this command in a guild.").setEphemeral(true).queue();
- return;
- }
-
- if (!callerMember.hasPermission(Permission.MANAGE_SERVER)) {
- event.reply("β You don't have the permission required to use this command.").setEphemeral(true).queue();
- return;
- }
-
-
- // Call the API to retrieve the registered channel
- Optional response = client.getRegisteredGuild(callerGuild.getId());
-
- // if there is no channel_id for the given guild_id returned by the API, then inform
- // the user of the same, else link the channel that has been registered
- response.ifPresentOrElse(success -> {
-
- String registeredChannelId = success.getChannelId();
- GuildChannel registeredChannel = event.getJDA().getGuildChannelById(registeredChannelId);
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("π Audit Log Configuration");
- eb.setColor(Color.CYAN);
- eb.addField("β
Channel Registration Check", "β°ββ€"+(registeredChannel!=null ? registeredChannel.getAsMention() : registeredChannelId)+ " is found to be registered as the audit log channel", false);
- MessageEmbed mb = eb.build();
- event.replyEmbeds(mb).setEphemeral(false).queue();
-
- }, () -> {
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("π Audit Log Configuration");
- eb.addField("β οΈ Channel Registration Check", "β°ββ€"+"No channel has been registered for audit logs", false);
- eb.setColor(Color.YELLOW);
- MessageEmbed mb = eb.build();
- event.replyEmbeds(mb).setEphemeral(false).queue();
- });
- }
-
- private void unsetAuditLogging(SlashCommandInteractionEvent event) {
-
- // Only members in a guild with MANAGE_SERVER permissions should be able to use this command
- Member callerMember = event.getMember();
- Guild callerGuild = event.getGuild();
-
- if (callerMember == null || callerGuild == null) {
- event.reply("β You can only use this command in a guild.").setEphemeral(true).queue();
- return;
- }
-
- if (!callerMember.hasPermission(Permission.MANAGE_SERVER)) {
- event.reply("β You don't have the permission required to use this command.").setEphemeral(true).queue();
- return;
- }
-
- // Call the API to unregister guild
- boolean success = client.deleteRegisteredGuild(callerGuild.getId());
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("π Audit Log Configuration");
-
- if (success) {
- eb.addField("β
Channel Removal", "β°ββ€"+"Channel successfully unset", false);
- eb.setColor(Color.GREEN);
-
- MessageEmbed mb = eb.build();
- event.replyEmbeds(mb).setEphemeral(false).queue();
- } else {
- eb.addField("β Channel Removal Failure", "β°ββ€"+"Channel could not be unset.\nThis may be because no channel has been registered in this guild yet.", false);
- eb.setColor(Color.YELLOW);
-
- MessageEmbed mb = eb.build();
- event.replyEmbeds(mb).setEphemeral(false).queue();
- }
-
- }
-}
diff --git a/src/main/java/org/papertrail/listeners/message/event/MessageLogListener.java b/src/main/java/org/papertrail/listeners/message/event/MessageLogListener.java
deleted file mode 100644
index 025d1bf1..00000000
--- a/src/main/java/org/papertrail/listeners/message/event/MessageLogListener.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package org.papertrail.listeners.message.event;
-
-import com.google.common.base.Splitter;
-import io.github.eggy03.papertrail.sdk.client.MessageLogContentClient;
-import io.github.eggy03.papertrail.sdk.client.MessageLogRegistrationClient;
-import io.github.eggy03.papertrail.sdk.entity.MessageLogContentEntity;
-import io.github.eggy03.papertrail.sdk.entity.MessageLogRegistrationEntity;
-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;
-import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
-import net.dv8tion.jda.api.events.message.MessageDeleteEvent;
-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.jetbrains.annotations.NotNull;
-import org.papertrail.commons.utilities.EnvConfig;
-
-import java.awt.Color;
-import java.time.Instant;
-import java.util.List;
-import java.util.Optional;
-import java.util.concurrent.Executor;
-
-@Slf4j
-public class MessageLogListener extends ListenerAdapter {
-
- private static final MessageLogRegistrationClient registrationClient = new MessageLogRegistrationClient(EnvConfig.get("API_URL"));
- private static final MessageLogContentClient contentClient = new MessageLogContentClient(EnvConfig.get("API_URL"));
-
- private final Executor vThreadPool;
-
- public MessageLogListener(Executor vThreadPool) {
- this.vThreadPool = vThreadPool;
- }
-
- @Override
- public void onMessageReceived(MessageReceivedEvent event) {
-
- // if the author is a bot or system, don't log
- if(event.getAuthor().isBot() || event.getAuthor().isSystem()) {
- return;
- }
- // don't register non-textual contents
- if(event.getMessage().getContentRaw().isEmpty()) {
- return;
- }
-
- vThreadPool.execute(()-> {
-
- // get the guild id for which the event was fired
- String guildId = event.getGuild().getId();
- // Call the API to see if the guild is registered for Message Logging
- Optional response = registrationClient.getRegisteredGuild(guildId);
- response.ifPresent(success -> {
- String messageId = event.getMessageId();
- String messageContent = event.getMessage().getContentDisplay();
- String authorId = event.getAuthor().getId();
-
- contentClient.logMessage(messageId, messageContent, authorId);
- });
- });
- }
-
- @Override
- public void onMessageUpdate(MessageUpdateEvent event) {
-
- if(event.getAuthor().isBot() || event.getAuthor().isSystem()) {
- return;
- }
-
- vThreadPool.execute(()->{
-
- // Get the guild id for which the event was fired
- String guildId = event.getGuild().getId();
- // get the message id of the message which was updated
- String messageId = event.getMessageId();
- // Call the API to see if the guild is registered for Message Logging
- Optional response = registrationClient.getRegisteredGuild(guildId);
- response.ifPresent(success -> {
-
- // retrieve the channel id where the logs must be sent
- String channelIdToSendTo = success.getChannelId();
-
- // fetch the old message object from the API
- Optional oldMessageContent = contentClient.retrieveMessage(messageId);
- oldMessageContent.ifPresent(contentEntity -> {
- // Fetch the old message
- String oldMessage = contentEntity.getMessageContent();
- // fetch the updated message and its author from the event
- String updatedMessage = event.getMessage().getContentDisplay();
-
- // Ignore events where the message content wasn't edited (e.g., pin, embed resolve, thread creates and updates)
- // This is required since MessageUpdateEvent is triggered in case of pins and embed resolves with no change to content
- if(updatedMessage.equals(oldMessage)) {
- return;
- }
-
- // Splitting is required because each field in an embed can display only up-to 1024 characters
- // A full embed can display up-to 6000 characters
- List oldMessageSplits = Splitter.fixedLength(1024).splitToList(oldMessage);
- List updatedMessageSplits = Splitter.fixedLength(1024).splitToList(updatedMessage);
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("π Message Edit Event");
- eb.setDescription("A message sent by "+event.getAuthor().getAsMention()+" has been edited in: "+event.getJumpUrl());
- eb.setColor(Color.YELLOW);
-
- oldMessageSplits.forEach(split -> eb.addField("Old Message", split, false));
- updatedMessageSplits.forEach(split -> eb.addField("New Message", split, false));
-
- eb.setFooter(event.getGuild().getName());
- eb.setTimestamp(Instant.now());
-
- MessageEmbed mb = eb.build();
-
- // send the old and updated message to the registered channel
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.sendMessageEmbeds(mb).queue();
- }
-
- // update the database with the new message
- contentClient.updateMessage(messageId, updatedMessage, event.getAuthor().getId());
- });
- });
- });
- }
-
- @Override
- public void onMessageDelete(@NotNull MessageDeleteEvent event) {
-
- vThreadPool.execute(()-> {
-
- // Get the guild id for which the event was fired
- String guildId = event.getGuild().getId();
- // get the message id of the message which was deleted
- String messageId = event.getMessageId();
-
- // Call the API to see if the guild is registered for Message Logging
- Optional response = registrationClient.getRegisteredGuild(guildId);
- response.ifPresent(success -> {
-
- // retrieve the channel id where the logs must be sent
- String channelIdToSendTo = success.getChannelId();
-
- // fetch the old message object from the API
- Optional oldMessageContent = contentClient.retrieveMessage(messageId);
- oldMessageContent.ifPresent(contentEntity -> {
-
- // retrieve the stored message and author in the database which was deleted
- String deletedMessage = contentEntity.getMessageContent();
- String deletedMessageAuthorId = contentEntity.getAuthorId();
-
- User author = event.getJDA().getUserById(deletedMessageAuthorId);
- String mentionableAuthor = (author !=null ? author.getAsMention() : deletedMessageAuthorId);
-
- // Splitting is required because each field in an embed can display only up-to 1024 characters
- List deletedMessageSplits = Splitter.fixedLength(1024).splitToList(deletedMessage);
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("ποΈ Message Delete Event");
- eb.setDescription("A message sent by "+mentionableAuthor+" has been deleted from "+ event.getChannel().getAsMention());
- eb.setColor(Color.RED);
-
- deletedMessageSplits.forEach(split-> eb.addField("Deleted Message", split, false));
-
- eb.setFooter(event.getGuild().getName());
- eb.setTimestamp(Instant.now());
-
- // send the fetched deleted message to the logging channel
- MessageEmbed mb = eb.build();
-
- TextChannel sendingChannel = event.getGuild().getTextChannelById(channelIdToSendTo);
- if(sendingChannel!=null && sendingChannel.canTalk()) {
- sendingChannel.sendMessageEmbeds(mb).queue();
- }
-
- // delete the message from the database
- contentClient.deleteMessage(messageId);
- });
- });
- });
- }
-}
diff --git a/src/main/java/org/papertrail/listeners/message/setup/MessageLogSetupCommandListener.java b/src/main/java/org/papertrail/listeners/message/setup/MessageLogSetupCommandListener.java
deleted file mode 100644
index 0eced335..00000000
--- a/src/main/java/org/papertrail/listeners/message/setup/MessageLogSetupCommandListener.java
+++ /dev/null
@@ -1,168 +0,0 @@
-package org.papertrail.listeners.message.setup;
-
-import io.github.eggy03.papertrail.sdk.client.MessageLogRegistrationClient;
-import io.github.eggy03.papertrail.sdk.entity.MessageLogRegistrationEntity;
-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.channel.concrete.TextChannel;
-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;
-import org.papertrail.commons.utilities.EnvConfig;
-
-import java.awt.Color;
-import java.util.Optional;
-
-public class MessageLogSetupCommandListener extends ListenerAdapter {
-
- private static final MessageLogRegistrationClient client = new MessageLogRegistrationClient(EnvConfig.get("API_URL"));
-
- @Override
- public void onSlashCommandInteraction(SlashCommandInteractionEvent event) {
-
- if(!event.getName().equals("messagelog")){
- return;
- }
-
- if(event.getSubcommandName()==null) {
- return;
- }
-
- switch(event.getSubcommandName()) {
-
- case "set":
- setMessageLogging(event);
- break;
-
- case "view":
- retrieveMessageLoggingChannel(event);
- break;
-
- case "remove":
- unsetMessageLogging(event);
- break;
-
- default:
- break;
- }
- }
-
- private void setMessageLogging(SlashCommandInteractionEvent event) {
-
- // Only members in a guild with ADMINISTRATOR permissions should be able to use this command
- Member callerMember = event.getMember();
- Guild callerGuild = event.getGuild();
- TextChannel callerChannel = event.getChannel().asTextChannel();
-
- if (callerMember == null || callerGuild == null) {
- event.reply("β You can only use this command in a guild.").setEphemeral(true).queue();
- return;
- }
-
- if (!callerMember.hasPermission(Permission.ADMINISTRATOR)) {
- event.reply("β You don't have the permission required to use this command.").setEphemeral(true).queue();
- return;
- }
-
- // Call the API to register guild for message logging
- boolean success = client.registerGuild(callerGuild.getId(), callerChannel.getId());
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("Message Log Registration");
-
- if (success) {
- eb.addField("β
Channel Registration Success","β°ββ€"+"All edited and deleted messages will be logged here", false);
- eb.setColor(Color.GREEN);
-
- MessageEmbed mb = eb.build();
- event.replyEmbeds(mb).setEphemeral(false).queue();
- } else {
- eb.addField("β Channel Registration Failure", "β°ββ€" + "Channel could not be registered.\nCheck if a channel in this guild is already registered for logging.", false);
- eb.setColor(Color.YELLOW);
-
- MessageEmbed mb = eb.build();
- event.replyEmbeds(mb).setEphemeral(false).queue();
- }
-
- }
-
- private void retrieveMessageLoggingChannel(SlashCommandInteractionEvent event) {
-
- // Only members in a guild with ADMINISTRATOR permissions should be able to use this command
- Member callerMember = event.getMember();
- Guild callerGuild = event.getGuild();
-
- if (callerMember == null || callerGuild == null) {
- event.reply("β You can only use this command in a guild.").setEphemeral(true).queue();
- return;
- }
-
- if (!callerMember.hasPermission(Permission.ADMINISTRATOR)) {
- event.reply("β You don't have the permission required to use this command.").setEphemeral(true).queue();
- return;
- }
-
- // Call the API to check for registered guild
- Optional response = client.getRegisteredGuild(callerGuild.getId());
- response.ifPresentOrElse(success -> {
-
- String registeredChannelId = success.getChannelId();
- GuildChannel registeredChannel = event.getJDA().getGuildChannelById(registeredChannelId);
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("π Message Log Configuration");
- eb.setColor(Color.CYAN);
- eb.addField("β
Channel Registration Check", "β°ββ€"+(registeredChannel!=null ? registeredChannel.getAsMention() : registeredChannelId)+ " is found to be registered as the message log channel", false);
- MessageEmbed mb = eb.build();
- event.replyEmbeds(mb).setEphemeral(false).queue();
-
- }, () -> {
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("π Message Log Configuration");
- eb.addField("β οΈ Channel Registration Check", "β°ββ€"+"No channel has been registered for message logs", false);
- eb.setColor(Color.YELLOW);
- MessageEmbed mb = eb.build();
- event.replyEmbeds(mb).setEphemeral(false).queue();
- });
- }
-
- private void unsetMessageLogging(SlashCommandInteractionEvent event) {
-
- // Only members in a guild with ADMINISTRATOR permissions should be able to use this command
- Member callerMember = event.getMember();
- Guild callerGuild = event.getGuild();
-
- if (callerMember == null || callerGuild == null) {
- event.reply("β You can only use this command in a guild.").setEphemeral(true).queue();
- return;
- }
-
- if (!callerMember.hasPermission(Permission.ADMINISTRATOR)) {
- event.reply("β You don't have the permission required to use this command.").setEphemeral(true).queue();
- return;
- }
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("π Message Log Configuration");
-
-
- // Call the API to unregister guild
- boolean success = client.deleteRegisteredGuild(callerGuild.getId());
- if (success) {
- eb.addField("β
Channel Removal", "β°ββ€" + "Channel successfully unset", false);
- eb.setColor(Color.GREEN);
-
- MessageEmbed mb = eb.build();
- event.replyEmbeds(mb).setEphemeral(false).queue();
- } else {
- eb.addField("β Channel Removal Failure", "β°ββ€"+"Channel could not be unset.\nThis may be because no channel has been registered in this guild yet.", false);
- eb.setColor(Color.YELLOW);
- MessageEmbed mb = eb.build();
-
- event.replyEmbeds(mb).setEphemeral(false).queue();
- }
- }
-}
diff --git a/src/main/java/org/papertrail/listeners/misc/ActivityUpdateListener.java b/src/main/java/org/papertrail/listeners/misc/ActivityUpdateListener.java
deleted file mode 100644
index 2aa21e13..00000000
--- a/src/main/java/org/papertrail/listeners/misc/ActivityUpdateListener.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.papertrail.listeners.misc;
-
-import net.dv8tion.jda.api.entities.Activity;
-import net.dv8tion.jda.api.events.guild.GuildJoinEvent;
-import net.dv8tion.jda.api.events.guild.GuildLeaveEvent;
-import net.dv8tion.jda.api.events.session.ReadyEvent;
-import net.dv8tion.jda.api.hooks.ListenerAdapter;
-import net.dv8tion.jda.api.sharding.ShardManager;
-import org.jetbrains.annotations.NotNull;
-
-/*
- * This class updates the number of servers the bot is in
- */
-public class ActivityUpdateListener extends ListenerAdapter {
-
- private final ShardManager manager;
-
- public ActivityUpdateListener(ShardManager manager) {
- this.manager = manager;
- }
-
- @Override
- public void onReady(@NotNull ReadyEvent event) { // update on cold start
- updateActivity();
- }
-
- @Override
- public void onGuildJoin(@NotNull GuildJoinEvent event) { // update on guild join
- updateActivity();
- }
-
- @Override
- public void onGuildLeave(@NotNull GuildLeaveEvent event) { // update on guild leave
- updateActivity();
- }
-
- private void updateActivity() {
- manager.setActivity(Activity.customStatus("Monitoring In: "+manager.getGuildCache().size() + " Servers"));
- }
-
-}
diff --git a/src/main/java/org/papertrail/listeners/misc/BotSetupInstructionCommandListener.java b/src/main/java/org/papertrail/listeners/misc/BotSetupInstructionCommandListener.java
deleted file mode 100644
index 423b1700..00000000
--- a/src/main/java/org/papertrail/listeners/misc/BotSetupInstructionCommandListener.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.papertrail.listeners.misc;
-
-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;
-import org.papertrail.commons.constant.ProjectInfo;
-
-import java.awt.Color;
-import java.time.Instant;
-
-public class BotSetupInstructionCommandListener extends ListenerAdapter {
-
- @Override
- public void onSlashCommandInteraction(SlashCommandInteractionEvent event) {
-
- if (event.getName().equals("setup")) {
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("π οΈ Setup Guide for " + ProjectInfo.APPNAME);
- eb.setDescription("Welcome to **" + ProjectInfo.APPNAME + "**!\nHere's how to get started using the bot in your server.");
- eb.setColor(Color.decode("#38e8bc"));
-
- eb.addField("1οΈβ£ Register Audit Log Channel",
- "- Use `/auditlog set` to **register the current channel** for receiving audit log updates.\nβ°ββ€ User must have `Manage Server` permission.",
- false);
-
- eb.addField("2οΈβ£ View Registered Audit Log Channel",
- "- Use `/auditlog view` to **check which channel** is currently registered for audit logs.\nThis is helpful if you're unsure where the audit logs are going.\nβ°ββ€ User must have `Manage Server` permission.",
- false);
-
- eb.addField("3οΈβ£ Unregister Audit Log Channel",
- "- Use `/auditlog remove` to **unset the audit log channel** if you wish to stop logging or switch to another one.\nβ°ββ€ User must have `Manage Server` permission.",
- false);
-
- eb.addBlankField(false);
-
- eb.addField("4οΈβ£ Register Message Log Channel",
- "- Use `/messagelog set` to **register the current channel** for receiving message logs.\nβ°ββ€ User must have the `Administrator` permission.",
- false);
-
- eb.addField("5οΈβ£ View Registered Message Log Channel",
- "- Use `/messagelog view` to **check which channel** is currently registered for message logs.\nThis is helpful if you're unsure where the message logs are going.\nβ°ββ€ User must have `Administrator` permission.",
- false);
-
- eb.addField("6οΈβ£ Unregister Message Log Channel",
- "- Use `/messagelog remove` to **unset the message log channel** if you wish to stop logging or switch to another one.\nβ°ββ€ User must have `Administrator` permission.",
- false);
-
- eb.addBlankField(false);
-
- eb.addField("7οΈβ£ View Server Stats",
- "- Use `/stats` to **get useful server information** like member count, channel count, and more.",
- 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());
-
- MessageEmbed mb = eb.build();
- event.replyEmbeds(mb).setEphemeral(false).queue();
- }
- }
-}
-
diff --git a/src/main/java/org/papertrail/listeners/misc/SelfKickListener.java b/src/main/java/org/papertrail/listeners/misc/SelfKickListener.java
deleted file mode 100644
index f876a38a..00000000
--- a/src/main/java/org/papertrail/listeners/misc/SelfKickListener.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.papertrail.listeners.misc;
-
-import io.github.eggy03.papertrail.sdk.client.AuditLogRegistrationClient;
-import io.github.eggy03.papertrail.sdk.client.MessageLogRegistrationClient;
-import net.dv8tion.jda.api.entities.Guild;
-import net.dv8tion.jda.api.events.guild.GuildLeaveEvent;
-import net.dv8tion.jda.api.hooks.ListenerAdapter;
-import org.jetbrains.annotations.NotNull;
-import org.papertrail.commons.utilities.EnvConfig;
-
-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 SelfKickListener extends ListenerAdapter {
-
- private static final AuditLogRegistrationClient alClient = new AuditLogRegistrationClient(EnvConfig.get("API_URL"));
- private static final MessageLogRegistrationClient mlClient = new MessageLogRegistrationClient(EnvConfig.get("API_URL"));
-
- private final Executor vThreadPool;
-
- public SelfKickListener(Executor vThreadPool) {
- this.vThreadPool = vThreadPool;
- }
-
- @Override
- public void onGuildLeave(@NotNull GuildLeaveEvent event) {
-
- Guild leftGuild = event.getGuild();
- vThreadPool.execute(()->{
- alClient.deleteRegisteredGuild(leftGuild.getId());
- mlClient.deleteRegisteredGuild(leftGuild.getId());
- });
- }
-}
diff --git a/src/main/java/org/papertrail/listeners/misc/ServerStatCommandListener.java b/src/main/java/org/papertrail/listeners/misc/ServerStatCommandListener.java
deleted file mode 100644
index 7e031346..00000000
--- a/src/main/java/org/papertrail/listeners/misc/ServerStatCommandListener.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package org.papertrail.listeners.misc;
-
-import net.dv8tion.jda.api.EmbedBuilder;
-import net.dv8tion.jda.api.OnlineStatus;
-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.interaction.command.SlashCommandInteractionEvent;
-import net.dv8tion.jda.api.hooks.ListenerAdapter;
-import org.papertrail.commons.utilities.DurationFormatter;
-
-import java.awt.Color;
-import java.time.Instant;
-import java.util.List;
-import java.util.Objects;
-
-public class ServerStatCommandListener extends ListenerAdapter{
-
- @Override
- public void onSlashCommandInteraction(SlashCommandInteractionEvent event) {
-
- if(event.getName().equals("stats")) {
-
- Guild guild = event.getGuild();
- if (guild == null) {
- event.reply("You can only use this command in Guilds").setEphemeral(true).queue();
- return;
- }
-
- List members = guild.getMemberCache().asList();
- int botCount = 0;
- int userCount = 0;
- int onlineUserCount = 0;
- for(Member member: members) {
- if(member.getUser().isBot()) {
- botCount++;
- }
-
- else {
- OnlineStatus status = member.getOnlineStatus();
- if(status.equals(OnlineStatus.DO_NOT_DISTURB) || status.equals(OnlineStatus.IDLE) || status.equals(OnlineStatus.ONLINE)) {
- onlineUserCount++;
- }
- userCount++;
- }
- }
-
- EmbedBuilder eb = new EmbedBuilder();
- eb.setTitle("π Server Statistics π");
- eb.setDescription("π Server Statistics For: **"+guild.getName()+"**");
- eb.setThumbnail(guild.getIconUrl());
- eb.setColor(Color.PINK);
-
- eb.addField("π Guild Name", "β°ββ€"+guild.getName(), false);
- eb.addField("π Guild Owner", "β°ββ€"+ Objects.requireNonNull(guild.getMemberById(guild.getOwnerId())).getAsMention(), false);
- eb.addField("π
Guild Created On", "β°ββ€"+DurationFormatter.isoToLocalTimeCounter(guild.getTimeCreated()), false);
- eb.addField("π Guild Vanity URL", "β°ββ€"+(guild.getVanityUrl() !=null ? guild.getVanityUrl() : "Not Set"), false);
-
- eb.addField("π₯ Member Count", "β°ββ€"+userCount, true);
- eb.addField("π€ Bot Count", "β°ββ€"+botCount, true);
- eb.addField("π’ Members Online", "β°ββ€"+onlineUserCount+"/"+userCount, true);
-
- List boosters = guild.getBoosters();
- StringBuilder mentionableBoosters = new StringBuilder();
- for(Member booster: boosters) {
- mentionableBoosters.append(booster.getAsMention()).append(" ");
- }
- eb.addField("π Guild Boosters ", "β°ββ€"+mentionableBoosters, false);
- eb.addField("π Guild Boost Count", "β°ββ€"+guild.getBoostCount(), false);
- eb.addField("π Booster Role", "β°ββ€"+(guild.getBoostRole() !=null ? guild.getBoostRole().getAsMention() : "No Boost Role Found"), false);
- eb.addField("πΌ Boost Tier", "β°ββ€"+ guild.getBoostTier(), false);
-
- eb.addField("π Locale", "β°ββ€"+guild.getLocale().getNativeName(), true);
- eb.addField("π Verification", "β°ββ€"+guild.getVerificationLevel().name(), true);
- eb.addField("π§± Roles", "β°ββ€"+guild.getRoles().size(), true);
- eb.addField("ποΈ Categories", "β°ββ€"+guild.getCategories().size(), true);
- eb.addField("π¬ Text Channels", "β°ββ€"+guild.getTextChannels().size(), true);
- eb.addField("π Voice Channels", "β°ββ€"+guild.getVoiceChannels().size(), true);
-
- eb.addField("π Data Requested By", "β°ββ€"+ Objects.requireNonNull(event.getMember()).getAsMention(), false);
- eb.setFooter("π Stats By: PaperTrail π");
- eb.setTimestamp(Instant.now());
-
- MessageEmbed mb = eb.build();
- event.replyEmbeds(mb).setEphemeral(false).queue();
- }
-
- }
-}
diff --git a/src/main/java/org/papertrail/listeners/misc/SlashCommandRegistrationListener.java b/src/main/java/org/papertrail/listeners/misc/SlashCommandRegistrationListener.java
deleted file mode 100644
index a192567c..00000000
--- a/src/main/java/org/papertrail/listeners/misc/SlashCommandRegistrationListener.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.papertrail.listeners.misc;
-
-import net.dv8tion.jda.api.JDA;
-import net.dv8tion.jda.api.events.session.ReadyEvent;
-import net.dv8tion.jda.api.hooks.ListenerAdapter;
-import net.dv8tion.jda.api.interactions.commands.build.CommandData;
-import net.dv8tion.jda.api.interactions.commands.build.Commands;
-import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
-import org.jetbrains.annotations.NotNull;
-
-/*
- * Registers all the slash commands places throughout the code
- */
-public class SlashCommandRegistrationListener extends ListenerAdapter {
-
- @Override
- public void onReady(@NotNull ReadyEvent event) {
- setAuditLogCommands(event.getJDA());
- }
-
- private void setAuditLogCommands(JDA jda) {
-
- CommandData auditLog = Commands.slash("auditlog", "manage audit log options")
- .addSubcommands(new SubcommandData("set", "set audit log channel here"))
- .addSubcommands(new SubcommandData("view", "view audit log channel"))
- .addSubcommands(new SubcommandData("remove", "unset audit log channel"));
-
- CommandData messageLog = Commands.slash("messagelog", "manage message log options")
- .addSubcommands(new SubcommandData("set", "set message log channel here"))
- .addSubcommands(new SubcommandData("view", "view message log channel"))
- .addSubcommands(new SubcommandData("remove", "unset message log channel"));
-
- CommandData serverStats = Commands.slash("stats",
- "Provides Server Statistics");
-
- CommandData setup = Commands.slash("setup", "Provides a guide on setting up the bot");
-
- jda.updateCommands()
- .addCommands(auditLog,
- messageLog,
- serverStats,
- setup)
- .queue();
- }
-}
diff --git a/src/main/java/org/papertrail/main/ConnectionInitializer.java b/src/main/java/org/papertrail/main/ConnectionInitializer.java
deleted file mode 100644
index bbc08a72..00000000
--- a/src/main/java/org/papertrail/main/ConnectionInitializer.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.papertrail.main;
-
-import lombok.Getter;
-import net.dv8tion.jda.api.OnlineStatus;
-import net.dv8tion.jda.api.requests.GatewayIntent;
-import net.dv8tion.jda.api.sharding.DefaultShardManagerBuilder;
-import net.dv8tion.jda.api.sharding.ShardManager;
-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.commons.utilities.EnvConfig;
-import org.papertrail.listeners.misc.ActivityUpdateListener;
-
-/*
- * This class initializes the connection to discord and configures all the necessary intents
- */
-@Getter
-public class ConnectionInitializer {
-
- // returns the manager that manages multiple shards (instances) of the bot
- // Manages multiple shards (instances) of the bot
- private final ShardManager manager;
-
- public ConnectionInitializer() {
-
- String token = EnvConfig.get("TOKEN");
-
- DefaultShardManagerBuilder builder = DefaultShardManagerBuilder.createDefault(token);
- builder.enableIntents(GatewayIntent.SCHEDULED_EVENTS,
- GatewayIntent.AUTO_MODERATION_EXECUTION,
- GatewayIntent.AUTO_MODERATION_CONFIGURATION,
- GatewayIntent.MESSAGE_CONTENT,
- GatewayIntent.GUILD_MEMBERS,
- GatewayIntent.GUILD_EXPRESSIONS,
- GatewayIntent.GUILD_PRESENCES,
- GatewayIntent.GUILD_MODERATION);
-
- builder.setStatus(OnlineStatus.ONLINE);
-
- //cache all users of the bot
- builder.setMemberCachePolicy(MemberCachePolicy.ALL);
- builder.setChunkingFilter(ChunkingFilter.ALL);
- //you will still need builder.enableCache() to cache user activities and status
- builder.enableCache(CacheFlag.ACTIVITY,
- CacheFlag.CLIENT_STATUS,
- CacheFlag.EMOJI,
- CacheFlag.STICKER,
- CacheFlag.ONLINE_STATUS,
- CacheFlag.MEMBER_OVERRIDES,
- CacheFlag.ROLE_TAGS,
- CacheFlag.SCHEDULED_EVENTS);
-
- manager = builder.build();
- manager.addEventListener(new ActivityUpdateListener(manager));
- //manager.addEventListener(new SlashCommandRegistrationListener());
- // re-enable it only when adding/updating/deleting commands
- }
-
-}
diff --git a/src/main/java/org/papertrail/main/Start.java b/src/main/java/org/papertrail/main/Start.java
deleted file mode 100644
index 699dfcf8..00000000
--- a/src/main/java/org/papertrail/main/Start.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.papertrail.main;
-
-import com.sun.net.httpserver.HttpExchange;
-import com.sun.net.httpserver.HttpHandler;
-import com.sun.net.httpserver.HttpServer;
-import net.dv8tion.jda.api.sharding.ShardManager;
-import org.papertrail.listeners.audit.event.AuditLogEventListener;
-import org.papertrail.listeners.audit.event.GuildBoostEventListener;
-import org.papertrail.listeners.audit.event.GuildMemberJoinAndLeaveEventListener;
-import org.papertrail.listeners.audit.event.GuildPollEventListener;
-import org.papertrail.listeners.audit.event.GuildVoiceEventListener;
-import org.papertrail.listeners.audit.setup.AuditLogSetupCommandListener;
-import org.papertrail.listeners.message.event.MessageLogListener;
-import org.papertrail.listeners.message.setup.MessageLogSetupCommandListener;
-import org.papertrail.listeners.misc.BotSetupInstructionCommandListener;
-import org.papertrail.listeners.misc.SelfKickListener;
-import org.papertrail.listeners.misc.ServerStatCommandListener;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
-/*
- * The main class of the bot
- */
-public class Start {
-
- // All I/O blocking operations run inside the vThreadPool
- private static final Executor vThreadPool = Executors.newVirtualThreadPerTaskExecutor();
-
- public static void main(String[] args) throws IOException {
-
- ConnectionInitializer ci = new ConnectionInitializer();
- ShardManager manager = ci.getManager();
-
- manager.addEventListener(new AuditLogSetupCommandListener());
- manager.addEventListener(new AuditLogEventListener(vThreadPool));
-
- manager.addEventListener(new MessageLogSetupCommandListener());
- manager.addEventListener(new MessageLogListener(vThreadPool));
-
- manager.addEventListener(new GuildVoiceEventListener(vThreadPool));
- manager.addEventListener(new GuildMemberJoinAndLeaveEventListener(vThreadPool));
- manager.addEventListener(new GuildPollEventListener(vThreadPool));
- manager.addEventListener(new GuildBoostEventListener(vThreadPool));
- manager.addEventListener(new SelfKickListener(vThreadPool));
-
- manager.addEventListener(new ServerStatCommandListener());
- manager.addEventListener(new BotSetupInstructionCommandListener());
-
- // Custom health check endpoint
- HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
- server.createContext("/ping", new PingHandler());
- server.setExecutor(null); // creates a default executor
- server.start();
- }
-
- static class PingHandler implements HttpHandler {
- @Override
- public void handle(HttpExchange exchange) throws IOException {
- exchange.sendResponseHeaders(200, -1);
- }
- }
-
-}
diff --git a/src/main/resources/tinylog.properties b/src/main/resources/tinylog.properties
index 22ba864e..a9bf9fa4 100644
--- a/src/main/resources/tinylog.properties
+++ b/src/main/resources/tinylog.properties
@@ -1,5 +1,4 @@
-writer = console
-writer.format = {level}: {class}.{method}()\n{message}
-writer.level = info
-
-writingthread = true
\ No newline at end of file
+writer=console
+writer.format={level}: {class}.{method}()\n{message}
+writer.level=info
+writingthread=true
\ No newline at end of file