diff --git a/pom.xml b/pom.xml
index 692a11f8..3499f6f8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
4.0.0
org.egg.papertrail
paper-trail-bot
- 1.1.0
+ 1.2.0
PaperTrail
A simple bot for logging all user actions
diff --git a/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java b/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java
new file mode 100644
index 00000000..7b7c799e
--- /dev/null
+++ b/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java
@@ -0,0 +1,74 @@
+package org.papertrail.listeners.customlisteners;
+
+import java.awt.Color;
+import java.util.EnumMap;
+import java.util.Map;
+
+import net.dv8tion.jda.api.EmbedBuilder;
+import net.dv8tion.jda.api.Permission;
+import net.dv8tion.jda.api.entities.Guild;
+import net.dv8tion.jda.api.entities.Member;
+import net.dv8tion.jda.api.entities.MessageEmbed;
+import net.dv8tion.jda.api.entities.Role;
+import net.dv8tion.jda.api.entities.SelfUser;
+import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
+import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
+import net.dv8tion.jda.api.hooks.ListenerAdapter;
+
+public class RequiredPermissionCheckListener extends ListenerAdapter {
+
+ @Override
+ public void onSlashCommandInteraction(SlashCommandInteractionEvent event) {
+
+ if (event.getName().equals("permcheck")) {
+
+ Guild guild = event.getGuild();
+
+ SelfUser botAsUser = event.getJDA().getSelfUser();
+ Role botIntegrationRole = guild.getRoleByBot(botAsUser);
+ Member botMember = guild.getMember(botAsUser);
+
+ EmbedBuilder eb = new EmbedBuilder();
+ eb.setTitle("PaperTrail Permissions Checker");
+ eb.setDescription("Helps determine whether the required permissions are granted for PaperTrail to function properly");
+ eb.setColor(Color.MAGENTA);
+
+ eb.addField("Bot Integration Role Specific Permission", (botIntegrationRole.hasPermission(Permission.VIEW_AUDIT_LOGS) ? "â
" : "â")+Permission.VIEW_AUDIT_LOGS.getName(), false);
+
+ // create a map of required permissions and set all their statuses to false
+ Map requiredPermissions = new EnumMap<>(Permission.class);
+ requiredPermissions.putAll(Map.of(
+ Permission.MESSAGE_EMBED_LINKS, false,
+ Permission.MESSAGE_HISTORY, false,
+ Permission.MESSAGE_SEND, false,
+ Permission.MESSAGE_SEND_IN_THREADS, false,
+ Permission.VIEW_CHANNEL, false));
+
+
+ GuildChannel currentChannel = guild.getGuildChannelById(event.getChannelIdLong());
+
+ if(currentChannel==null || botMember == null) {
+ eb.addField("Channel Specific Permissions","ERROR: Could not determine bot permissions for the given channel. Channel possibly not supported", false);
+ } else {
+ botMember.getPermissions(currentChannel).forEach(permission ->{
+ if(requiredPermissions.containsKey(permission)) {
+ requiredPermissions.replace(permission, true);
+ }
+ });
+
+ StringBuilder finalPermissions = new StringBuilder();
+ requiredPermissions.entrySet().forEach(permission -> {
+ finalPermissions.append(Boolean.TRUE.equals(permission.getValue()) ? "â
" : "â");
+ finalPermissions.append(permission.getKey().getName()+System.lineSeparator());
+ });
+
+
+ eb.addField("Channel Specific Permissions: "+currentChannel.getAsMention(), finalPermissions.toString(), false);
+ }
+
+
+ MessageEmbed mb = eb.build();
+ event.replyEmbeds(mb).queue();
+ }
+ }
+}
diff --git a/src/main/java/org/papertrail/listeners/guildlisteners/ServerBoostListener.java b/src/main/java/org/papertrail/listeners/guildlisteners/ServerBoostListener.java
index 17f7f319..5e81ad1a 100644
--- a/src/main/java/org/papertrail/listeners/guildlisteners/ServerBoostListener.java
+++ b/src/main/java/org/papertrail/listeners/guildlisteners/ServerBoostListener.java
@@ -56,6 +56,7 @@ public void onGuildMemberUpdateBoostTime(GuildMemberUpdateBoostTimeEvent event)
eb.addField("đĒĢ Booster Lost", "â°ââ¤"+mentionableMember+" has removed their boost from your server", false);
eb.addField("đ Remaining Boosts In The Server", "â°ââ¤"+guild.getBoostCount(), false);
eb.addField("đī¸ Current Boost Tier", "â°ââ¤"+guild.getBoostTier().toString(), false);
+ eb.addField("Notice", "Boosts remain active for a period even after a member stops boosting, so the server's boost count doesn't update immediately.", false);
}
eb.setFooter("Server Boost Detection");
diff --git a/src/main/java/org/papertrail/main/FireRun.java b/src/main/java/org/papertrail/main/FireRun.java
index 750f8ed4..e1e8d0a1 100644
--- a/src/main/java/org/papertrail/main/FireRun.java
+++ b/src/main/java/org/papertrail/main/FireRun.java
@@ -12,6 +12,7 @@
import org.papertrail.listeners.customlisteners.BotInfoListener;
import org.papertrail.listeners.customlisteners.ServerStatListener;
import org.papertrail.listeners.customlisteners.BotSetupListener;
+import org.papertrail.listeners.customlisteners.RequiredPermissionCheckListener;
import org.papertrail.listeners.guildlisteners.ServerBoostListener;
import org.papertrail.listeners.loglisteners.AuditLogListener;
import org.papertrail.listeners.loglisteners.AuditLogCommandListener;
@@ -59,6 +60,7 @@ public static void main(String[] args) throws IOException, SQLException {
ci.getManager().addEventListener(new BotInfoListener());
ci.getManager().addEventListener(new BotSetupListener());
ci.getManager().addEventListener(new AnnouncementListener(dc));
+ ci.getManager().addEventListener(new RequiredPermissionCheckListener());
/*
* This is required only to set up a cron-job to periodically ping this end-point so that
diff --git a/src/main/java/org/papertrail/main/SlashCommandRegistrar.java b/src/main/java/org/papertrail/main/SlashCommandRegistrar.java
index 517145dd..2c0040af 100644
--- a/src/main/java/org/papertrail/main/SlashCommandRegistrar.java
+++ b/src/main/java/org/papertrail/main/SlashCommandRegistrar.java
@@ -47,6 +47,8 @@ private void setAuditLogCommands(JDA jda) {
.addOption(OptionType.STRING, "detail", "Detailed Information", true)
.addOption(OptionType.STRING, "extra", "Extra Notes", false);
+ CommandData permCheck = Commands.slash("permcheck", "Checks if the bot has the necessary permissions to operate");
+
jda.updateCommands()
.addCommands(auditLogChannelRegistration,
auditLogChannelFetch,
@@ -57,7 +59,8 @@ private void setAuditLogCommands(JDA jda) {
serverStats,
botInfo,
setup,
- announcement)
+ announcement,
+ permCheck)
.queue();
}
}
diff --git a/src/main/java/org/papertrail/version/ProjectInfo.java b/src/main/java/org/papertrail/version/ProjectInfo.java
index d74f4f59..31246d9e 100644
--- a/src/main/java/org/papertrail/version/ProjectInfo.java
+++ b/src/main/java/org/papertrail/version/ProjectInfo.java
@@ -7,7 +7,7 @@ private ProjectInfo() {
}
public static final String APPNAME = "PaperTrail";
- public static final String VERSION = "v1.1.0";
+ public static final String VERSION = "v1.2.0";
public static final String PROJECT_LINK = "https://github.com/Egg-03/PaperTrailBot";
public static final String PROJECT_ISSUE_LINK="https://github.com/Egg-03/PaperTrailBot/issues";