Log warnings to a channel

This commit is contained in:
floppydiskette 2024-12-22 01:15:47 +00:00
parent 7ee79862c8
commit 49c7984bde
Signed by: fwoppydwisk
SSH key fingerprint: SHA256:Hqn452XQ1ETzUt/FthJu6+OFkS4NBxCv5VQSEvuk7CE
6 changed files with 40 additions and 8 deletions

View file

@ -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]` |

View file

@ -1,3 +1,4 @@
{
"token": "CHANGEME"
"token": "CHANGEME",
"warningChannel": 0
}

View file

@ -6,7 +6,7 @@
<groupId>net.hypr</groupId>
<artifactId>doki</artifactId>
<version>1.0.6</version>
<version>1.0.7</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>

View file

@ -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;
}
}

View file

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

View file

@ -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");
}
}
}