Skip to content

Commit 2a3bd41

Browse files
committed
Log nickname edits using webhook
1 parent 8119a28 commit 2a3bd41

File tree

1 file changed

+34
-8
lines changed

1 file changed

+34
-8
lines changed

src/listener/java/com/mcmoddev/mmdbot/thelistener/events/ModerationEvents.java

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@
2222

2323
import static com.mcmoddev.mmdbot.thelistener.TheListener.getInstance;
2424
import static com.mcmoddev.mmdbot.thelistener.util.Utils.mentionAndID;
25+
26+
import club.minnced.discord.webhook.send.AllowedMentions;
2527
import com.mcmoddev.mmdbot.core.event.moderation.WarningEvent;
28+
import com.mcmoddev.mmdbot.core.util.webhook.WebhookManager;
2629
import com.mcmoddev.mmdbot.thelistener.TheListener;
2730
import com.mcmoddev.mmdbot.thelistener.util.LoggingType;
2831
import com.mcmoddev.mmdbot.thelistener.util.Utils;
@@ -33,6 +36,7 @@
3336
import net.dv8tion.jda.api.audit.AuditLogKey;
3437
import net.dv8tion.jda.api.entities.Member;
3538
import net.dv8tion.jda.api.entities.MessageEmbed;
39+
import net.dv8tion.jda.api.entities.StandardGuildMessageChannel;
3640
import net.dv8tion.jda.api.entities.User;
3741
import net.dv8tion.jda.api.events.guild.GuildBanEvent;
3842
import net.dv8tion.jda.api.events.guild.GuildUnbanEvent;
@@ -50,10 +54,12 @@
5054
import java.util.Optional;
5155
import java.util.concurrent.TimeUnit;
5256

53-
// TODO add timeout events
5457
public final class ModerationEvents extends ListenerAdapter {
5558
public static final ModerationEvents INSTANCE = new ModerationEvents();
5659

60+
private static final String WEBHOOK_NAME = "ModerationLogs";
61+
private static final WebhookManager WEBHOOKS = WebhookManager.of(e -> e.trim().equals(WEBHOOK_NAME), WEBHOOK_NAME, AllowedMentions.none());
62+
5763
public static final Color RUBY = new Color(0xE91E63);
5864
public static final Color LIGHT_SEA_GREEN = new Color(0x1ABC9C);
5965

@@ -75,7 +81,7 @@ public void onGuildBan(@NotNull final GuildBanEvent event) {
7581
embed.addField("**Name:**", bannedUser.getName(), false);
7682
embed.addField("**User ID:**", bannedUser.getId(), false);
7783
embed.addField("**Profile:**", bannedUser.getAsMention(), false);
78-
embed.addField("**Profile Age**", TimeFormat.RELATIVE
84+
embed.addField("**Profile Age:**", TimeFormat.RELATIVE
7985
.format(bannedUser.getTimeCreated()), false);
8086

8187
if (log.getReason() != null) {
@@ -117,7 +123,7 @@ public void onGuildUnban(@NotNull final GuildUnbanEvent event) {
117123
embed.addField("**Name:**", bannedUser.getName(), false);
118124
embed.addField("**User ID:**", bannedUser.getId(), false);
119125
embed.addField("**Profile:**", bannedUser.getAsMention(), false);
120-
embed.addField("**Profile Age**", TimeFormat.RELATIVE
126+
embed.addField("**Profile Age:**", TimeFormat.RELATIVE
121127
.format(bannedUser.getTimeCreated()), false);
122128

123129
final var targetId = log.getTargetIdLong();
@@ -149,15 +155,21 @@ public void onGuildMemberUpdateNickname(@NotNull final GuildMemberUpdateNickname
149155

150156
embed.setColor(Color.YELLOW);
151157
embed.setTitle("Nickname Changed");
152-
embed.setThumbnail(event.getUser().getAvatarUrl());
153158
embed.addField("User:", event.getUser().getAsMention() + " (" + event.getUser().getId() + ")", true);
154159
embed.setTimestamp(Instant.now());
155-
embed.addField("Nickname Editor: ", editor.map(u -> "%s (%s)".formatted(u.getAsMention(), u.getId())).orElse("Unknown"), false);
160+
if (editor.isPresent()) {
161+
final User editorU = editor.get();
162+
if (editorU.getIdLong() != event.getUser().getIdLong()) {
163+
embed.addField("Nickname Editor: ", "%s (%s)".formatted(editorU.getAsMention(), editorU.getId()), false);
164+
}
165+
} else {
166+
embed.addField("Nickname Editor: ", "Unknown", false);
167+
}
156168

157169
embed.addField("Old Nickname:", event.getOldNickname() == null ? "*None*" : event.getOldNickname(), true);
158170
embed.addField("New Nickname:", event.getNewNickname() == null ? "*None*" : event.getNewNickname(), true);
159171

160-
log(event.getGuild().getIdLong(), event.getJDA(), embed.build());
172+
logWithWebhook(event.getGuild().getIdLong(), event.getJDA(), embed.build(), event.getUser());
161173
}
162174
}, () -> onNickNoAudit(event));
163175
}
@@ -175,7 +187,7 @@ private void onNickNoAudit(final GuildMemberUpdateNicknameEvent event) {
175187
embed.addField("Old Nickname:", event.getOldNickname() == null ? "*None*" : event.getOldNickname(), true);
176188
embed.addField("New Nickname:", event.getNewNickname() == null ? "*None*" : event.getNewNickname(), true);
177189

178-
log(event.getGuild().getIdLong(), event.getJDA(), embed.build());
190+
logWithWebhook(event.getGuild().getIdLong(), event.getJDA(), embed.build(), event.getUser());
179191
}
180192

181193
@Override
@@ -199,7 +211,7 @@ public void onGuildMemberRemove(@NotNull final GuildMemberRemoveEvent event) {
199211
embed.addField("**Name:**", kickedUser.getName(), false);
200212
embed.addField("**User ID:**", kickedUser.getId(), false);
201213
embed.addField("**Profile:**", kickedUser.getAsMention(), false);
202-
embed.addField("**Profile Age**", TimeFormat.RELATIVE
214+
embed.addField("**Profile Age:**", TimeFormat.RELATIVE
203215
.format(kickedUser.getTimeCreated()), false);
204216

205217
embed.addField("Guild Join Time:", Optional.ofNullable(event.getMember()).map(Member::getTimeJoined)
@@ -362,4 +374,18 @@ private void log(long guildId, JDA jda, MessageEmbed embed) {
362374
}
363375
});
364376
}
377+
private void logWithWebhook(long guildId, JDA jda, MessageEmbed embed, User author) {
378+
final var loggingChannels = LoggingType.MODERATION_EVENTS.getChannels(guildId);
379+
loggingChannels
380+
.forEach(id -> {
381+
final var ch = id.resolve(idL -> jda.getChannelById(StandardGuildMessageChannel.class, idL));
382+
if (ch != null) {
383+
WEBHOOKS.getWebhook(ch)
384+
.send(com.mcmoddev.mmdbot.core.util.Utils.webhookMessage(embed)
385+
.setUsername(author.getName())
386+
.setAvatarUrl(author.getEffectiveAvatarUrl())
387+
.build());
388+
}
389+
});
390+
}
365391
}

0 commit comments

Comments
 (0)