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