From 49c7984bde11b39b6f77a02b6bbd78db276bfea3 Mon Sep 17 00:00:00 2001 From: floppydiskette Date: Sun, 22 Dec 2024 01:15:47 +0000 Subject: [PATCH] Log warnings to a channel --- README.md | 4 ++- config.example.json | 3 +- pom.xml | 2 +- src/main/java/net/hypr/doki/Config.java | 4 +++ src/main/java/net/hypr/doki/Doki.java | 4 +++ .../hypr/doki/commands/moderation/Warn.java | 31 ++++++++++++++++--- 6 files changed, 40 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 6975308..5a04bcf 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,8 @@ A multipurpose Discord bot written in Java. ## Config file schema ```json { - "token": "your_token" + "token": "your_token", + "warningChannel": 0 } ``` @@ -37,3 +38,4 @@ A multipurpose Discord bot written in Java. | `/timeout get` | Gets the current timeout status of the specified member | `[member]` | | `/timeout cancel` | Cancels the specified users timeout | `[member]`, `(reason)` | | `/poll` | Creates a poll | `[title]`, `[duration]`, `[options]`, `(multiple-choice)` | +| `/warn` | Warns a user | `[member]`, `[reason]` | \ No newline at end of file diff --git a/config.example.json b/config.example.json index 7bc7b61..72ad5a6 100644 --- a/config.example.json +++ b/config.example.json @@ -1,3 +1,4 @@ { - "token": "CHANGEME" + "token": "CHANGEME", + "warningChannel": 0 } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 5ccf8f2..3db48dc 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ net.hypr doki - 1.0.6 + 1.0.7 17 diff --git a/src/main/java/net/hypr/doki/Config.java b/src/main/java/net/hypr/doki/Config.java index 7615f3b..8c2a56b 100644 --- a/src/main/java/net/hypr/doki/Config.java +++ b/src/main/java/net/hypr/doki/Config.java @@ -11,6 +11,7 @@ import java.nio.charset.StandardCharsets; //You will need a valid config.json in the resources folder for this to work public class Config { @SuppressWarnings("unused") private String token; + @SuppressWarnings("unused") private long warningChannel; /** * Returns the configuration object for this bot @@ -33,4 +34,7 @@ public class Config { public String getToken() { return token; } + public long getWarningChannel() { + return warningChannel; + } } \ No newline at end of file diff --git a/src/main/java/net/hypr/doki/Doki.java b/src/main/java/net/hypr/doki/Doki.java index 299d19d..2fd96ed 100644 --- a/src/main/java/net/hypr/doki/Doki.java +++ b/src/main/java/net/hypr/doki/Doki.java @@ -22,6 +22,10 @@ public class Doki { public static JDA getJDA() { return jda; } + public static Config getConfig() { return config; } + public static Logger getLogger() { + return log; + } public static void start() throws IOException, InterruptedException { config = Config.readConfig(); diff --git a/src/main/java/net/hypr/doki/commands/moderation/Warn.java b/src/main/java/net/hypr/doki/commands/moderation/Warn.java index 4c6be60..d6b7f87 100644 --- a/src/main/java/net/hypr/doki/commands/moderation/Warn.java +++ b/src/main/java/net/hypr/doki/commands/moderation/Warn.java @@ -10,6 +10,11 @@ import com.freya02.botcommands.api.application.slash.annotations.JDASlashCommand import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.Permission; import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.channel.concrete.TextChannel; +import net.hypr.doki.Doki; +import org.slf4j.Logger; + +import java.awt.*; @CommandMarker @BotPermissions(Permission.MODERATE_MEMBERS) @@ -22,13 +27,29 @@ public class Warn extends ApplicationCommand { public void warn(GuildSlashEvent event, @AppOption(name = "member", description = "The member to warn") Member member, @AppOption(name = "reason", description = "The reason for warning them") String reason) { + Logger log = Doki.getLogger(); + Member actingMod = event.getMember(); EmbedBuilder warnEmbed = new EmbedBuilder() .setTitle(String.format("You were warned in %s", event.getGuild().getName())) - .setDescription(String.format("**Reason:** %s", reason)); - member.getUser().openPrivateChannel().queue((dm) -> dm.sendMessageEmbeds(warnEmbed.build()).queue( - success -> event.replyFormat("Warned %s for %s", member.getAsMention(), reason).setEphemeral(true).queue(), - // User has blocked bot or disabled DMs + .setDescription(String.format("**Reason:** %s", reason)) + .setFooter(String.format("Warned by %s (%s)", actingMod.getEffectiveName(), actingMod.getId()), actingMod.getEffectiveAvatarUrl()) + .setColor(new Color(239, 148, 60)); + log.debug(String.format("%s", Doki.getConfig().getWarningChannel())); + TextChannel warningChannel = Doki.getJDA().getTextChannelById(Doki.getConfig().getWarningChannel()); + member.getUser().openPrivateChannel().queue( + (dm) -> dm.sendMessageEmbeds(warnEmbed.build()).queue( + success -> event.replyFormat("Warned %s for %s", member.getAsMention(), reason).setEphemeral(true).queue(), + // User has blocked bot or disabled DMs + error -> event.replyFormat("Warned %s for %s\n-# (Unable to DM user)", member.getAsMention(), reason).queue() + ), error -> event.replyFormat("Warned %s for %s\n-# (Unable to DM user)", member.getAsMention(), reason).queue() - )); + ); + warnEmbed.setTitle(String.format("%s (%s) was warned", member.getEffectiveName(), member.getId())); + try { + assert warningChannel != null; + warningChannel.sendMessageEmbeds(warnEmbed.build()).queue(); + } catch (NullPointerException ex) { + log.warn("Failed to send message to warning log channel"); + } } } \ No newline at end of file