Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,17 @@
<artifactId>guava</artifactId>
<version>33.4.8-jre</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-restclient -->
<dependency>
<groupId>com.konghq</groupId>
<artifactId>unirest-java-core</artifactId>
<version>4.5.0</version>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-restclient</artifactId>
<version>4.0.0-M2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.vavr/vavr -->
<dependency>
<groupId>io.vavr</groupId>
<artifactId>vavr</artifactId>
<version>0.10.7</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
import java.awt.Color;
import java.util.Objects;

import org.papertrail.sdk.http.HttpServiceResponse;
import org.papertrail.sdk.model.ErrorResponse;
import io.vavr.control.Either;
import org.papertrail.sdk.model.ErrorObject;
import org.papertrail.sdk.client.AuditLogClient;
import org.papertrail.sdk.model.AuditLogResponse;
import org.papertrail.sdk.model.AuditLogObject;

import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.Permission;
Expand Down Expand Up @@ -50,38 +50,41 @@ public void onSlashCommandInteraction(SlashCommandInteractionEvent event) {


private void setAuditLogging(SlashCommandInteractionEvent event) {
// Only members with MANAGE_SERVER permissions should be able to use this command
Member member = event.getMember();
if (member == null || !member.hasPermission(Permission.MANAGE_SERVER)) {
event.reply("❌ You don't have the permission required to use this command.").setEphemeral(true).queue();
return;
}

// Only members with MANAGE_SERVER permissions should be able to use this command
Member member = event.getMember();
if (member == null || !member.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
String channelIdToRegister = event.getChannel().asTextChannel().getId();
HttpServiceResponse<AuditLogResponse, ErrorResponse> guildRegistration = AuditLogClient.registerGuild(Objects.requireNonNull(event.getGuild()).getId(), channelIdToRegister);
if(guildRegistration.requestSuccess()){
String guildId = Objects.requireNonNull(event.getGuild()).getId();
String channelId = event.getChannel().asTextChannel().getId();

Either<ErrorObject, AuditLogObject> response = AuditLogClient.registerGuild(guildId, channelId);
response.peek(success -> {

EmbedBuilder eb = new EmbedBuilder();
eb.setTitle("📝 Audit Log Configuration");
eb.addField("✅ Channel Registration Success","╰┈➤"+"All audit log info will be logged here", false);
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 {

}).peekLeft(failure -> {

EmbedBuilder eb = new EmbedBuilder();
eb.setTitle("📝 Audit Log Configuration");
eb.addField("❌ Channel Registration Failure", "╰┈➤" + "Channel could not be registered", false);
eb.addField("\uD83C\uDF10 API Response", "╰┈➤"+guildRegistration.error().message(), false);
eb.addField("\uD83C\uDF10 API Response", "╰┈➤" + failure.message(), false);
eb.setColor(Color.YELLOW);
MessageEmbed mb = eb.build();
event.replyEmbeds(mb).setEphemeral(false).queue();

}
}
event.replyEmbeds(mb).setEphemeral(false).queue();
});
}

private void retrieveAuditLoggingChannel(SlashCommandInteractionEvent event) {

Expand All @@ -95,13 +98,13 @@ private void retrieveAuditLoggingChannel(SlashCommandInteractionEvent event) {
String guildId = Objects.requireNonNull(event.getGuild()).getId();

// Call the API to retrieve the registered channel
HttpServiceResponse<AuditLogResponse, ErrorResponse> guildRegistrationCheck = AuditLogClient.getRegisteredGuild(guildId);
Either<ErrorObject, AuditLogObject> response = AuditLogClient.getRegisteredGuild(guildId);

// 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
if (guildRegistrationCheck.requestSuccess()) {
response.peek(success -> {

String registeredChannelId = guildRegistrationCheck.success().channelId();
String registeredChannelId = success.channelId();
GuildChannel registeredChannel = event.getJDA().getGuildChannelById(registeredChannelId);

EmbedBuilder eb = new EmbedBuilder();
Expand All @@ -110,15 +113,17 @@ private void retrieveAuditLoggingChannel(SlashCommandInteractionEvent event) {
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();
} else {

}).peekLeft(failure -> {

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) {
Expand All @@ -132,8 +137,8 @@ private void unsetAuditLogging(SlashCommandInteractionEvent event) {

String guildId = Objects.requireNonNull(event.getGuild()).getId();
// Call the API to unregister guild
HttpServiceResponse<Void, ErrorResponse> guildUnregistration = AuditLogClient.deleteRegisteredGuild(guildId);
if(guildUnregistration.requestSuccess()) {
Either<ErrorObject, Void> response = AuditLogClient.deleteRegisteredGuild(guildId);
response.peek(success -> {

EmbedBuilder eb = new EmbedBuilder();
eb.setTitle("📝 Audit Log Configuration");
Expand All @@ -143,17 +148,18 @@ private void unsetAuditLogging(SlashCommandInteractionEvent event) {

event.replyEmbeds(mb).setEphemeral(false).queue();

} else {
}).peekLeft(failure -> {

EmbedBuilder eb = new EmbedBuilder();
eb.setTitle("📝 Audit Log Configuration");
eb.addField("❌ Channel Removal Failure", "╰┈➤"+"Channel could not be unset", false);
eb.addField("\uD83C\uDF10 API Response", "╰┈➤"+guildUnregistration.error().message(), false);
eb.addField("\uD83C\uDF10 API Response", "╰┈➤"+failure.message(), false);
eb.setColor(Color.YELLOW);
MessageEmbed mb = eb.build();

event.replyEmbeds(mb).setEphemeral(false).queue();

}
});

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@
import java.awt.Color;
import java.util.Objects;

import org.papertrail.sdk.http.HttpServiceResponse;
import org.papertrail.sdk.model.ErrorResponse;
import io.vavr.control.Either;
import org.papertrail.sdk.model.ErrorObject;
import org.papertrail.sdk.client.MessageLogClient;
import org.papertrail.sdk.model.MessageLogResponse;
import org.papertrail.sdk.model.MessageLogObject;

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.middleman.GuildChannel;
Expand Down Expand Up @@ -57,13 +56,12 @@ private void setMessageLogging(SlashCommandInteractionEvent event) {
event.reply("❌ You don't have the permission required to use this command.").setEphemeral(true).queue();
return;
}

Guild guild = event.getGuild();
String guildId = Objects.requireNonNull(guild).getId();

String guildId = Objects.requireNonNull(event.getGuild()).getId();

// Call the API to register guild for message logging
HttpServiceResponse<MessageLogResponse, ErrorResponse> guildRegistration = MessageLogClient.registerGuild(guildId, event.getChannelId());
if(guildRegistration.requestSuccess()) {
Either<ErrorObject, MessageLogObject> response = MessageLogClient.registerGuild(guildId, event.getChannelId());
response.peek(success -> {

EmbedBuilder eb = new EmbedBuilder();
eb.setTitle("Message Log Registration");
Expand All @@ -72,17 +70,19 @@ private void setMessageLogging(SlashCommandInteractionEvent event) {

MessageEmbed mb = eb.build();
event.replyEmbeds(mb).setEphemeral(false).queue();
} else {

}).peekLeft(failure -> {

EmbedBuilder eb = new EmbedBuilder();
eb.setTitle("Message Log Registration");
eb.addField("❌ Channel Registration Failure","╰┈➤"+"Channel could not be registered", false);
eb.addField("\uD83C\uDF10 API Response", "╰┈➤"+guildRegistration.error().message(), false);
eb.addField("\uD83C\uDF10 API Response", "╰┈➤"+failure.message(), false);
eb.setColor(Color.YELLOW);

MessageEmbed mb = eb.build();
event.replyEmbeds(mb).setEphemeral(false).queue();
}
});

}

private void retrieveMessageLoggingChannel(SlashCommandInteractionEvent event) {
Expand All @@ -94,15 +94,13 @@ private void retrieveMessageLoggingChannel(SlashCommandInteractionEvent event) {
return;
}

Guild guild = event.getGuild();
String guildId = Objects.requireNonNull(guild).getId();
String guildId = Objects.requireNonNull(event.getGuild()).getId();

// Call the API to check for registered guild
HttpServiceResponse<MessageLogResponse, ErrorResponse> guildRegistrationCheck = MessageLogClient.getRegisteredGuild(guildId);

if(guildRegistrationCheck.requestSuccess()){
Either<ErrorObject, MessageLogObject> response = MessageLogClient.getRegisteredGuild(guildId);
response.peek(success -> {

String registeredChannelId = guildRegistrationCheck.success().channelId();
String registeredChannelId = success.channelId();
GuildChannel registeredChannel = event.getJDA().getGuildChannelById(registeredChannelId);

EmbedBuilder eb = new EmbedBuilder();
Expand All @@ -112,16 +110,15 @@ private void retrieveMessageLoggingChannel(SlashCommandInteractionEvent event) {
MessageEmbed mb = eb.build();
event.replyEmbeds(mb).setEphemeral(false).queue();

} else {
}).peekLeft(failure -> {

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) {
Expand All @@ -133,12 +130,11 @@ private void unsetMessageLogging(SlashCommandInteractionEvent event) {
return;
}

Guild guild = event.getGuild();
String guildId = Objects.requireNonNull(guild).getId();
String guildId = Objects.requireNonNull(event.getGuild()).getId();

// Call the API to unregister guild
HttpServiceResponse<Void, ErrorResponse> guildUnregistration = MessageLogClient.deleteRegisteredGuild(guildId);
if (guildUnregistration.requestSuccess()) {
Either<ErrorObject, Void> response = MessageLogClient.deleteRegisteredGuild(guildId);
response.peek(success -> {

EmbedBuilder eb = new EmbedBuilder();
eb.setTitle("📝 Message Log Configuration");
Expand All @@ -147,17 +143,19 @@ private void unsetMessageLogging(SlashCommandInteractionEvent event) {

MessageEmbed mb = eb.build();
event.replyEmbeds(mb).setEphemeral(false).queue();
} else {

}).peekLeft(failure -> {

EmbedBuilder eb = new EmbedBuilder();
eb.setTitle("📝 Message Log Configuration");
eb.addField("❌ Channel Removal Failure", "╰┈➤" + "Channel could not be unset", false);
eb.addField("\uD83C\uDF10 API Response", "╰┈➤" + guildUnregistration.error().message(), false);
eb.addField("\uD83C\uDF10 API Response", "╰┈➤" + failure.message(), false);
eb.setColor(Color.YELLOW);
MessageEmbed mb = eb.build();

event.replyEmbeds(mb).setEphemeral(false).queue();

}
});

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import java.util.Objects;
import java.util.concurrent.Executor;

import io.vavr.control.Either;
import org.jetbrains.annotations.NotNull;

import net.dv8tion.jda.api.EmbedBuilder;
Expand All @@ -15,9 +16,8 @@
import net.dv8tion.jda.api.events.guild.member.update.GuildMemberUpdateBoostTimeEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.papertrail.sdk.client.AuditLogClient;
import org.papertrail.sdk.http.HttpServiceResponse;
import org.papertrail.sdk.model.AuditLogResponse;
import org.papertrail.sdk.model.ErrorResponse;
import org.papertrail.sdk.model.AuditLogObject;
import org.papertrail.sdk.model.ErrorObject;

public class ServerBoostListener extends ListenerAdapter {

Expand All @@ -33,44 +33,43 @@ public void onGuildMemberUpdateBoostTime(@NotNull GuildMemberUpdateBoostTimeEven
vThreadPool.execute(()->{
// server boost logs are mapped to audit log table
// Call the API and see if the event came from a registered Guild
HttpServiceResponse<AuditLogResponse, ErrorResponse> guildCheck = AuditLogClient.getRegisteredGuild(event.getGuild().getId());
Either<ErrorObject, AuditLogObject> response = AuditLogClient.getRegisteredGuild(event.getGuild().getId());
response.peek(success -> {
String registeredChannelId= success.channelId();

if(!guildCheck.requestSuccess()){
return;
}
String registeredChannelId= guildCheck.success().channelId();
Member member = event.getMember();
Guild guild = event.getGuild();

Member member = event.getMember();
Guild guild = event.getGuild();
String mentionableMember = member.getAsMention();

String mentionableMember = member.getAsMention();
OffsetDateTime newBoostTime = event.getNewTimeBoosted(); // Will be null if the member stopped boosting

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());

EmbedBuilder eb = new EmbedBuilder();
eb.setTitle("🚀 Server Boost Event ");
eb.setThumbnail(guild.getIconUrl());
if (newBoostTime != null) {
eb.setDescription("🎉 **" + guild.getName() + "** has been boosted!");
eb.setColor(Color.PINK);
eb.addField("🔋 Booster Gained", "╰┈➤"+mentionableMember+" has started boosting your server", false);
eb.addField("📈 Total Boosts In The Server", "╰┈➤"+guild.getBoostCount(), false);
eb.addField("🎖️ Current Boost Tier", "╰┈➤"+ guild.getBoostTier(), false);
} else {
eb.setDescription("⚠️ **" + guild.getName() + "** has lost a boost.");
eb.setColor(Color.GRAY);
eb.addField("🪫 Booster Lost", "╰┈➤"+mentionableMember+" has removed their boost from your server", false);
eb.addField("📉 Remaining Boosts In The Server", "╰┈➤"+guild.getBoostCount(), false);
eb.addField("🎖️ Current Boost Tier", "╰┈➤"+ guild.getBoostTier(), false);
eb.addField("Notice", "Boosts remain active for a period even after a member stops boosting, so the server's boost count doesn't update immediately.", false);
}

if (newBoostTime != null) {
eb.setDescription("🎉 **" + guild.getName() + "** has been boosted!");
eb.setColor(Color.PINK);
eb.addField("🔋 Booster Gained", "╰┈➤"+mentionableMember+" has started boosting your server", false);
eb.addField("📈 Total Boosts In The Server", "╰┈➤"+guild.getBoostCount(), false);
eb.addField("🎖️ Current Boost Tier", "╰┈➤"+ guild.getBoostTier(), false);
} else {
eb.setDescription("⚠️ **" + guild.getName() + "** has lost a boost.");
eb.setColor(Color.GRAY);
eb.addField("🪫 Booster Lost", "╰┈➤"+mentionableMember+" has removed their boost from your server", false);
eb.addField("📉 Remaining Boosts In The Server", "╰┈➤"+guild.getBoostCount(), false);
eb.addField("🎖️ Current Boost Tier", "╰┈➤"+ guild.getBoostTier(), false);
eb.addField("Notice", "Boosts remain active for a period even after a member stops boosting, so the server's boost count doesn't update immediately.", false);
}
eb.setFooter("Server Boost Detection");
eb.setTimestamp(Instant.now());

eb.setFooter("Server Boost Detection");
eb.setTimestamp(Instant.now());
MessageEmbed mb = eb.build();
Objects.requireNonNull(event.getGuild().getTextChannelById(registeredChannelId)).sendMessageEmbeds(mb).queue();
});

MessageEmbed mb = eb.build();
Objects.requireNonNull(event.getGuild().getTextChannelById(registeredChannelId)).sendMessageEmbeds(mb).queue();
});
}
}
Loading
Loading