From ef29a13c0f8cb846fa3f5944318c229a3220550b Mon Sep 17 00:00:00 2001 From: Egg-03 <111327101+Egg-03@users.noreply.github.com> Date: Mon, 14 Jul 2025 10:29:12 +0530 Subject: [PATCH 1/6] Add permission check slash command and listener Introduces a new /permcheck slash command to verify if the bot has the required permissions to function properly. Adds RequiredPermissionCheckListener to handle the command and updates command registration and event listener setup accordingly. --- .../RequiredPermissionCheckListener.java | 66 +++++++++++++++++++ .../java/org/papertrail/main/FireRun.java | 2 + .../main/SlashCommandRegistrar.java | 5 +- 3 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java 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..c629c20d --- /dev/null +++ b/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java @@ -0,0 +1,66 @@ +package org.papertrail.listeners.customlisteners; + +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.MessageEmbed; +import net.dv8tion.jda.api.entities.Role; +import net.dv8tion.jda.api.entities.SelfUser; +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); + + EmbedBuilder eb = new EmbedBuilder(); + eb.setTitle("PaperTrail Permissions Checker"); + eb.setDescription("Helps determine whether the required permissions are granted for PaperTrail to function properly"); + + // 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_AUDIT_LOGS, false, + Permission.VIEW_CHANNEL, false)); + + + // iterate over the permissions granted to the bot's role and see if it intersects with the required permissions + // if intersection exists for a particular permission, change it's status to true + botIntegrationRole.getPermissions().forEach(permission -> { + if(requiredPermissions.get(permission)!=null) { + requiredPermissions.replace(permission, true); + } + }); + + // iterate over the required permissions map and see what required permissions have been granted for the bot's integration role + StringBuilder botRolePermissions = new StringBuilder(); + requiredPermissions.entrySet().forEach(permission -> { + botRolePermissions.append(Boolean.TRUE.equals(permission.getValue()) ? "✅" : "❌"); + botRolePermissions.append(permission.getKey().getName()+System.lineSeparator()); + }); + + eb.addField("The following set of required permissions are granted to the bot's role: ", botRolePermissions.toString(), false); + + // reset the permission status + requiredPermissions.entrySet().forEach(permission -> requiredPermissions.replace(permission.getKey(), false)); + + MessageEmbed mb = eb.build(); + event.replyEmbeds(mb).queue(); + } + } +} 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(); } } From bd4e4b7398f599191114e2f45ede919ad3909f61 Mon Sep 17 00:00:00 2001 From: Egg-03 <111327101+Egg-03@users.noreply.github.com> Date: Mon, 14 Jul 2025 10:53:08 +0530 Subject: [PATCH 2/6] Show channel-specific permission overrides for bot role Added logic to display the permission overrides granted to the bot's role for the current channel, in addition to the global role permissions. This provides clearer visibility into both server-wide and channel-specific permissions for troubleshooting and configuration. --- .../RequiredPermissionCheckListener.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java b/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java index c629c20d..771e500c 100644 --- a/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java +++ b/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java @@ -54,10 +54,34 @@ public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { botRolePermissions.append(permission.getKey().getName()+System.lineSeparator()); }); - eb.addField("The following set of required permissions are granted to the bot's role: ", botRolePermissions.toString(), false); + eb.addField("The following set of required permissions are granted to the bot's role: "+botIntegrationRole.getAsMention(), botRolePermissions.toString(), false); // reset the permission status requiredPermissions.entrySet().forEach(permission -> requiredPermissions.replace(permission.getKey(), false)); + + guild.getGuildChannelById(event.getChannelIdLong()).getPermissionContainer().getRolePermissionOverrides().forEach(override -> { + if(override.getRole().equals(botIntegrationRole)) { + + override.getAllowed().forEach(allowedPermission -> { + if(requiredPermissions.get(allowedPermission)!=null) { + requiredPermissions.replace(allowedPermission, true); + } + }); + + override.getDenied().forEach(deniedPermission -> { + if(requiredPermissions.get(deniedPermission)!=null) { + requiredPermissions.replace(deniedPermission, false); + } + }); + } + }); + + StringBuilder channelPermissionsForBotRole = new StringBuilder(); + requiredPermissions.entrySet().forEach(permission -> { + channelPermissionsForBotRole.append(Boolean.TRUE.equals(permission.getValue()) ? "✅" : "❌"); + channelPermissionsForBotRole.append(permission.getKey().getName()+System.lineSeparator()); + }); + eb.addField("The following set of permission overrides are granted to the bot's role for this channel: ", channelPermissionsForBotRole.toString(), false); MessageEmbed mb = eb.build(); event.replyEmbeds(mb).queue(); From 95c3028d352dee3f8637e74b8245082bd55e9ad1 Mon Sep 17 00:00:00 2001 From: Egg-03 <111327101+Egg-03@users.noreply.github.com> Date: Mon, 14 Jul 2025 11:25:28 +0530 Subject: [PATCH 3/6] Improve channel permission override checks for bot role Refactors the permission check logic to detect if the current channel has a custom override for the bot's role, and updates the embed message accordingly. Removes the previous logic that listed per-permission overrides and instead provides a warning if no override is present, improving clarity for private channel access issues. --- .../RequiredPermissionCheckListener.java | 46 +++++++++---------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java b/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java index 771e500c..bb9458dc 100644 --- a/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java +++ b/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java @@ -1,14 +1,17 @@ package org.papertrail.listeners.customlisteners; import java.util.EnumMap; +import java.util.List; 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.MessageEmbed; +import net.dv8tion.jda.api.entities.PermissionOverride; 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; @@ -54,34 +57,27 @@ public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { botRolePermissions.append(permission.getKey().getName()+System.lineSeparator()); }); - eb.addField("The following set of required permissions are granted to the bot's role: "+botIntegrationRole.getAsMention(), botRolePermissions.toString(), false); + eb.addField("The following set of required permissions are granted to the bot's role: `"+botIntegrationRole.getName()+"`", botRolePermissions.toString(), false); - // reset the permission status - requiredPermissions.entrySet().forEach(permission -> requiredPermissions.replace(permission.getKey(), false)); + GuildChannel currentChannel = guild.getGuildChannelById(event.getChannelIdLong()); + + if(currentChannel!=null) { + boolean botIntegrationRoleDetected = false; + + List permissionOverrides = currentChannel.getPermissionContainer().getRolePermissionOverrides(); + for (PermissionOverride override: permissionOverrides) { + if(override.getRole().equals(botIntegrationRole)) { + botIntegrationRoleDetected = true; + break; + } - guild.getGuildChannelById(event.getChannelIdLong()).getPermissionContainer().getRolePermissionOverrides().forEach(override -> { - if(override.getRole().equals(botIntegrationRole)) { - - override.getAllowed().forEach(allowedPermission -> { - if(requiredPermissions.get(allowedPermission)!=null) { - requiredPermissions.replace(allowedPermission, true); - } - }); - - override.getDenied().forEach(deniedPermission -> { - if(requiredPermissions.get(deniedPermission)!=null) { - requiredPermissions.replace(deniedPermission, false); - } - }); } - }); - - StringBuilder channelPermissionsForBotRole = new StringBuilder(); - requiredPermissions.entrySet().forEach(permission -> { - channelPermissionsForBotRole.append(Boolean.TRUE.equals(permission.getValue()) ? "✅" : "❌"); - channelPermissionsForBotRole.append(permission.getKey().getName()+System.lineSeparator()); - }); - eb.addField("The following set of permission overrides are granted to the bot's role for this channel: ", channelPermissionsForBotRole.toString(), false); + + if(botIntegrationRoleDetected) + eb.addField("Channel "+currentChannel.getAsMention()+" has a custom override for the bot role: `"+botIntegrationRole.getName()+"`", "Check the role override to make sure the required permissions are granted", false); + else + eb.addField("⚠️ WARNING: Channel "+currentChannel.getAsMention()+" does not have any overrides for the bot role: `"+botIntegrationRole.getName()+"`", "This shouldn't be a problem if the channel is not a private channel. If it is a private channel, PaperTrail may not have access to this channel", false); + } MessageEmbed mb = eb.build(); event.replyEmbeds(mb).queue(); From f4010216dd6effc457c730235d1bf6cefaa6e51f Mon Sep 17 00:00:00 2001 From: Egg-03 <111327101+Egg-03@users.noreply.github.com> Date: Tue, 15 Jul 2025 12:02:24 +0530 Subject: [PATCH 4/6] Refactor permission check logic in listener Simplifies and updates the logic for checking and displaying required permissions for the bot's role in a channel. Removes redundant code, directly checks channel-specific overrides, and improves the embed output to reflect permissions granted in the current channel context. --- .../RequiredPermissionCheckListener.java | 62 +++++++++---------- 1 file changed, 28 insertions(+), 34 deletions(-) diff --git a/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java b/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java index bb9458dc..c057ab25 100644 --- a/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java +++ b/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java @@ -1,14 +1,13 @@ package org.papertrail.listeners.customlisteners; import java.util.EnumMap; -import java.util.List; +import java.util.EnumSet; 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.MessageEmbed; -import net.dv8tion.jda.api.entities.PermissionOverride; import net.dv8tion.jda.api.entities.Role; import net.dv8tion.jda.api.entities.SelfUser; import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel; @@ -42,43 +41,38 @@ public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { Permission.VIEW_CHANNEL, false)); - // iterate over the permissions granted to the bot's role and see if it intersects with the required permissions - // if intersection exists for a particular permission, change it's status to true - botIntegrationRole.getPermissions().forEach(permission -> { - if(requiredPermissions.get(permission)!=null) { - requiredPermissions.replace(permission, true); - } - }); - - // iterate over the required permissions map and see what required permissions have been granted for the bot's integration role - StringBuilder botRolePermissions = new StringBuilder(); - requiredPermissions.entrySet().forEach(permission -> { - botRolePermissions.append(Boolean.TRUE.equals(permission.getValue()) ? "✅" : "❌"); - botRolePermissions.append(permission.getKey().getName()+System.lineSeparator()); - }); - - eb.addField("The following set of required permissions are granted to the bot's role: `"+botIntegrationRole.getName()+"`", botRolePermissions.toString(), false); - GuildChannel currentChannel = guild.getGuildChannelById(event.getChannelIdLong()); - if(currentChannel!=null) { - boolean botIntegrationRoleDetected = false; - - List permissionOverrides = currentChannel.getPermissionContainer().getRolePermissionOverrides(); - for (PermissionOverride override: permissionOverrides) { - if(override.getRole().equals(botIntegrationRole)) { - botIntegrationRoleDetected = true; - break; - } + if(currentChannel!=null) { + currentChannel + .getPermissionContainer() + .getRolePermissionOverrides() + .forEach(permission -> { + if(permission.getRole().equals(botIntegrationRole)) { + EnumSet allowedPermList = permission.getAllowed(); + EnumSet deniedPermList = permission.getDenied(); - } + requiredPermissions.entrySet().forEach(p -> { + if(allowedPermList.contains(p.getKey())) { + p.setValue(true); + } + + if(deniedPermList.contains(p.getKey())) { + p.setValue(false); + } + }); + } + }); - if(botIntegrationRoleDetected) - eb.addField("Channel "+currentChannel.getAsMention()+" has a custom override for the bot role: `"+botIntegrationRole.getName()+"`", "Check the role override to make sure the required permissions are granted", false); - else - eb.addField("⚠️ WARNING: Channel "+currentChannel.getAsMention()+" does not have any overrides for the bot role: `"+botIntegrationRole.getName()+"`", "This shouldn't be a problem if the channel is not a private channel. If it is a private channel, PaperTrail may not have access to this channel", false); + StringBuilder finalPermissions = new StringBuilder(); + requiredPermissions.entrySet().forEach(permission -> { + finalPermissions.append(Boolean.TRUE.equals(permission.getValue()) ? "✅" : "❌"); + finalPermissions.append(permission.getKey().getName()+System.lineSeparator()); + }); + + eb.addField("The following set of required permissions are granted to the bot in the channel: "+currentChannel.getAsMention(), finalPermissions.toString(), false); } - + MessageEmbed mb = eb.build(); event.replyEmbeds(mb).queue(); } From 5d8245ad0bb3341ed0e174f825d94b1d9eae0a1f Mon Sep 17 00:00:00 2001 From: Egg-03 <111327101+Egg-03@users.noreply.github.com> Date: Tue, 15 Jul 2025 13:03:27 +0530 Subject: [PATCH 5/6] Refactor permission check logic in listener Simplifies channel-specific permission checks by using Member#getPermissions instead of manual role override inspection. Adds clearer error handling when channel or bot member is unavailable, and includes a field for the bot integration role's VIEW_AUDIT_LOGS permission. --- .../RequiredPermissionCheckListener.java | 36 ++++++++----------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java b/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java index c057ab25..dad92d8b 100644 --- a/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java +++ b/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java @@ -1,12 +1,12 @@ package org.papertrail.listeners.customlisteners; import java.util.EnumMap; -import java.util.EnumSet; 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; @@ -25,11 +25,14 @@ public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { 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.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( @@ -37,30 +40,17 @@ public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { Permission.MESSAGE_HISTORY, false, Permission.MESSAGE_SEND, false, Permission.MESSAGE_SEND_IN_THREADS, false, - Permission.VIEW_AUDIT_LOGS, false, Permission.VIEW_CHANNEL, false)); GuildChannel currentChannel = guild.getGuildChannelById(event.getChannelIdLong()); - if(currentChannel!=null) { - currentChannel - .getPermissionContainer() - .getRolePermissionOverrides() - .forEach(permission -> { - if(permission.getRole().equals(botIntegrationRole)) { - EnumSet allowedPermList = permission.getAllowed(); - EnumSet deniedPermList = permission.getDenied(); - - requiredPermissions.entrySet().forEach(p -> { - if(allowedPermList.contains(p.getKey())) { - p.setValue(true); - } - - if(deniedPermList.contains(p.getKey())) { - p.setValue(false); - } - }); + 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); } }); @@ -70,9 +60,11 @@ public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { finalPermissions.append(permission.getKey().getName()+System.lineSeparator()); }); - eb.addField("The following set of required permissions are granted to the bot in the channel: "+currentChannel.getAsMention(), finalPermissions.toString(), false); + + eb.addField("Channel Specific Permissions: "+currentChannel.getAsMention(), finalPermissions.toString(), false); } - + + MessageEmbed mb = eb.build(); event.replyEmbeds(mb).queue(); } From ee7efa4d0ea0e8916abb3ad060dc9272e482d081 Mon Sep 17 00:00:00 2001 From: Egg-03 <111327101+Egg-03@users.noreply.github.com> Date: Tue, 15 Jul 2025 13:23:53 +0530 Subject: [PATCH 6/6] Bump version to 1.2.0 Updated project version to 1.2.0 in pom.xml and ProjectInfo.java. Added color to the permissions checker embed and included a notice about boost count timing in the server boost listener. --- pom.xml | 2 +- .../customlisteners/RequiredPermissionCheckListener.java | 2 ++ .../listeners/guildlisteners/ServerBoostListener.java | 1 + src/main/java/org/papertrail/version/ProjectInfo.java | 2 +- 4 files changed, 5 insertions(+), 2 deletions(-) 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 index dad92d8b..7b7c799e 100644 --- a/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java +++ b/src/main/java/org/papertrail/listeners/customlisteners/RequiredPermissionCheckListener.java @@ -1,5 +1,6 @@ package org.papertrail.listeners.customlisteners; +import java.awt.Color; import java.util.EnumMap; import java.util.Map; @@ -30,6 +31,7 @@ public void onSlashCommandInteraction(SlashCommandInteractionEvent event) { 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); 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/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";